also, das mit den Schritten ist schon gerade für die Verständlichkeit und Nachvollziehbarkeit sehr von Vorteil. Gleiches gilt natürlich auch für die zeilenweise Codierung, man muss nicht suchen, was da (als Schritt) zusammenhängt. So habe ich das fest programmierten "Mappe1_" mühelos variabel gestalten können.
Ich habe ja in der Vergangenheit viel mit VBA + DAO, ADO, SQL (und auch mit den alten Querys von Excel 97) usw. gearbeitet und habe z.B. im VBA die Daten direkt in Arrays gepackt oder wie auch immer es dann weiter ging. Für mich ist daher eben auch die Variante mit der Weiterverarbeitung ohne Laden in ein Blatt von Interesse, wenn das hier angeboten wird. Frei nach dem Motto "Man lernt nie aus"
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
also, das mit den Schritten ist schon gerade für die Verständlichkeit und Nachvollziehbarkeit sehr von Vorteil. Gleiches gilt natürlich auch für die zeilenweise Codierung, man muss nicht suchen, was da (als Schritt) zusammenhängt. So habe ich das fest programmierten "Mappe1_" mühelos variabel gestalten können.
Ich habe ja in der Vergangenheit viel mit VBA + DAO, ADO, SQL (und auch mit den alten Querys von Excel 97) usw. gearbeitet und habe z.B. im VBA die Daten direkt in Arrays gepackt oder wie auch immer es dann weiter ging. Für mich ist daher eben auch die Variante mit der Weiterverarbeitung ohne Laden in ein Blatt von Interesse, wenn das hier angeboten wird. Frei nach dem Motto "Man lernt nie aus"
Das ausschließliche Laden der mittels PQ aufbereiteten Daten in das Datenmodell ergibt ja nur dann Sinn, wenn man die Daten mittels Power Pivot (incl. oder excl. DAX) weiterverarbeoiten will. Wenn man das nicht will oder muss, dann ergibt das NUR Laden ins Datenmodell keinen Sinn, denn man bereitet ja keine Daten auf, um sie anschließend nicht sehen zu wollen. Die Frage Datenmodell oder nicht ist also immer eine Frage der nachfolgenden Absichten.
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben. Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.
ergänzend zu Deinen Ausführungen möchte ich darauf hinweisen, daß auch die Excel-Cube-Funktionen in der Lage sind, Daten aus dem -modell in einem Arbeitsblatt darzustellen.
Gruß von Luschi aus klein-Paris
Folgende(r) 1 Nutzer sagt Danke an Luschi für diesen Beitrag:1 Nutzer sagt Danke an Luschi für diesen Beitrag 28 • Ralf A
... nun weiß ich immer noch nicht, wie das genau geht und hege immer noch die Hoffnung, das zum einen jemand einen entsprechender Ansatz hier vorstellt und meine Beispieldaten hoffentlich geeignet sind Ich stelle mich jetzt mal ganz blöd an:
Nach dem Tipp mit den CUBE Funktionen habe ich nach powerquery excel cube gegoogelt. Die meisten auf der ersten Seite wollen anscheinend die CUBE in PQ programmieren. Ich habe da aber auch was vom tabellenexperte gefunden.
Wenn ich z.B. in dem Lösungsansatz von PIVPQ folgendes eingebe:
30.04.2025, 10:03 (Dieser Beitrag wurde zuletzt bearbeitet: 30.04.2025, 10:06 von Ralf A.)
(30.04.2025, 08:55)schauan schrieb: ... nun weiß ich immer noch nicht, wie das genau geht und hege immer noch die Hoffnung, das zum einen jemand einen entsprechender Ansatz hier vorstellt und meine Beispieldaten hoffentlich geeignet sind Ich stelle mich jetzt mal ganz blöd an:
Nach dem Tipp mit den CUBE Funktionen habe ich nach powerquery excel cube gegoogelt. Die meisten auf der ersten Seite wollen anscheinend die CUBE in PQ programmieren. Ich habe da aber auch was vom tabellenexperte gefunden.
Wenn ich z.B. in dem Lösungsansatz von PIVPQ folgendes eingebe:
Der tabellenexperte arbeitet allerdings mit Pivottabellen. Ein Measure hab ich nicht.
OK, weiter gesucht. Auf Seite 2 kommt wieder was vom tabellenexperte. Mal schauen, was da drin steht. Jetzt ist aber erst mal Frühstück ...
Warum versuchst Du denn, den 3. Schritt vor dem 1. zu machen? Ist doch absolut nicht notwendig. Erstelle aus den Daten im Datenmodell eine Pivottable.. (Laden in... Pivottable). Um die Anzahl eines Wertes herauszufinden brauchst Du keine Measures oder Cubefunktionen. Du ziehst Ton einfach in das Wertefeld und als Wertfeldeinstellung kannst Du dann die gewünschte Aggregation auswählen.
PIVPQ Lösungen schaue ich mir schon lange nicht mehr an. Vergeude meine Zeit nicht so gern mit dem Entwirren unnötig verknäuelter Codezeilen. Da musst Du PIVPQ schon selbst fragen. Im Übrigen finde ich @Luschis Lösung absolut gelungen, zielführend und vorallem durchschaubar.
Zum Schluss noch etwas, dass Du sicher selbst weisst. Ein Forum kann keinen Fachkurs ersetzen. Es gibt inzwischen auch gute Fachbücher zum Thema und jede Menge gute Tutorials. Und dann Step by Step. Erst mal PQ, dann M, dann Power Pivot incl. Measures, Dax und Cubefunktionen. Obwohl Du die letzten beiden vermutlich kaum brauchen wirst. Zumindest dann nicht, wenn Du kein Buchhalter werden willst...
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben. Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.
01.05.2025, 08:09 (Dieser Beitrag wurde zuletzt bearbeitet: 01.05.2025, 08:09 von schauan.)
Hallöchen,
@Ralf, ich fixe mich da schon durch, kann aber vielleicht nicht jeder. Ich schrieb ja auch "ich stelle mich mal Blöd an ..." - im Sinne von wäre vielleicht nicht verkehrt, wenn die aufgezeigten Ansätze für die Allgemeinheit etwas genauer dargestellt werden. Bei PivPQ habe ich nicht weiter geschaut, weil das so einfach wie unten beschrieben nicht geht. Bei meinen Fragen hatte ich z.B. in #20, #22 und #29 PivPQ angesprochen ...
Also, mit den Lösungen z.B. von ws-53 und Luschi kann man ohne weitere Anpassungen im PQ die Daten auch, wie unten beschrieben, ins Datenmodell laden und von dort aus weiterverarbeiten.
Hier der Vollständigkeit halber eine ganz kurze Lösungsbeschreibung mit Pivot und dem Datenmodel. Im Prinzip sind das nur zwei Schritte ...
- Erstellung einer Abfrage mit der Möglichkeit des "Laden in" ins Datenmodell im erweiterten PQ-Editor ..oder Änderung einer bereits ins Blatt übernommenen Abfrage im Ribbon der Abfrage ("Laden in" steht ggf. nicht / nicht mehr im PQ-Editor zur Verfügung)
(- sofern noch nicht vorhanden, PowerPivot bei den com-AddIns aktivieren) - im PowerPivot-Ribbon dann z.B. die Datenmodelle verwalten und dort die Pivot erstellen
Ich habe das mal im anhängenden Beispiel durchgezogen, ohne die Parametrisierung aus der ursprünglichen Fragestellung. Der PQ-Code sieht nun natürlich etwas anders aus als der von unseren PQ-Profis. Die ausgegebene Pivottabelle ist ziemlich sinnlos aber es sollte nur erst mal aufzeigen, was man machen könnte.
Dazu noch das Auslesen eines Wertes per CUBE und das Übertragen der Daten par VBA in ein Array und hier nur mal als Komplettausgabe in der Tabelle ohne weitere Verarbeitung.
Jetzt hoffe ich das ich dich besser verstanden habe, nach deiner letzten Datei. Ich wiederhole immer wieder du benötigst kein VBA!! Wozu auch? Schaue dir das nun mal an, habe dir auch noch ein Datenschnitt zum Filtern angelegt.
Zitat:Die gegebene M-Code-Funktion ist sehr verschachtelt und schwer lesbar. Sie lädt Daten aus mehreren Excel-Dateien in einem Verzeichnis, extrahiert spezifische Tabellen, verbindet sie und führt anschließend Transformationen durch. Ich werde sie in logisch benannte Zwischenschritte aufteilen, damit sie leichter zu verstehen, warten und anpassen ist.
und liefert das
Code:
let // 1. Lade Pfad aus der Tabelle "tblPath" SourcePath = Excel.CurrentWorkbook(){[Name="tblPath"]}[Content]{0}[Path] & "\Download",
// 2. Hilfsfunktion zum Einlesen von Dateien mit bestimmtem Tabellen-Namen LoadTableFromFiles = (folderPath as text, tableName as text) => let files = Folder.Files(folderPath), filesWithContent = Table.AddColumn(files, "Inhalt", each try Excel.Workbook([Content], null, true) otherwise null), tablesExtracted = Table.AddColumn(filesWithContent, "Tabelle", each try [Inhalt]{[Item=tableName, Kind="Table"]}[Data] otherwise null), validTables = Table.SelectRows(tablesExtracted, each [Tabelle] <> null), result = Table.Combine(List.Transform( List.Zip({validTables[Tabelle], validTables[Name]}), each Table.AddColumn(_{0}, "Dateiname", (x) => _{1}) )) in result,