PQ - parametrisiert auf int. Tabellen
#31
Hallöchen,

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 Wink 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)
Antworten Top
#32
(29.04.2025, 18:39)schauan schrieb: Hallöchen,

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 Wink 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.

Ciao, Ralf

Antworten Top
#33
Hallo Ralf,

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:
  • Ralf A
Antworten Top
#34
... 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 Wink 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:

=CUBEWERT("ThisWorkbookDataModel";"[tblDat].[Wer].[Ton]";"[tblDat].[Wer].[Menge]")

bekomme ich #NV. Ist halt erst mal die Methode try & error ... Ich möchte praktisch von Ton die Menge ...

Den Formelansatz habe ich, wie gesagt, aus einem Beispiel vom tabellenexperte. Er hat dort

=CUBEWERT("ThisWorkbookDataModel";"[Measures].[Umsatz]";"[tbl_Artikel].[Bezeichnung].[All].[Black Mambo]";"[tbl_Vertrieb].[Region].[All].[Nord]")

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 ...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#35
(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 Wink 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:

=CUBEWERT("ThisWorkbookDataModel";"[tblDat].[Wer].[Ton]";"[tblDat].[Wer].[Menge]")

bekomme ich #NV. Ist halt erst mal die Methode try & error ... Ich möchte praktisch von Ton die Menge ...

Den Formelansatz habe ich, wie gesagt, aus einem Beispiel vom tabellenexperte. Er hat dort

=CUBEWERT("ThisWorkbookDataModel";"[Measures].[Umsatz]";"[tbl_Artikel].[Bezeichnung].[All].[Black Mambo]";"[tbl_Vertrieb].[Region].[All].[Nord]")

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...  Worriedsmiley
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.

Ciao, Ralf

Antworten Top
#36
Hallo schauan


Wie soll tblDat mit tblGrund verglichen werden keine passende ID hinterlegt ist??
Viele Grüße
PIVPQ
Antworten Top
#37
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. 100
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 Wink 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.


.xlsm   Datenmodell_AS.xlsm (Größe: 151,79 KB / Downloads: 3)
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#38
Hallo schauan

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.


Angehängte Dateien
.zip   PQ-MultiDateiImport-Parametrisiert.zip (Größe: 47,99 KB / Downloads: 4)
Viele Grüße
PIVPQ
Antworten Top
#39
Die KI meint 
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,

    // 3. Lade "tbl_Grund"-Tabellen
    tblGrund = LoadTableFromFiles(SourcePath, "tbl_Grund"),

    // 4. Lade "tbl_Dat"-Tabellen
    tblDat = LoadTableFromFiles(SourcePath, "tbl_Dat"),

    // 5. Verbinde "tblDat" mit "tblGrund" über "Dateiname"
    Joined = Table.NestedJoin(tblDat, {"Dateiname"}, tblGrund, {"Dateiname"}, "tblGrund", JoinKind.LeftOuter),

    // 6. Entfalte Spalten aus der Join-Tabelle
    Expanded = Table.ExpandTableColumn(Joined, "tblGrund", {"Warum", "Wieso"}),

    // 7. Unpivot "Wo", "Warum", "Wieso" → Spalten in Zeilen
    Unpivoted = Table.Unpivot(Expanded, {"Wo", "Warum", "Wieso"}, "Attribut", "Wert"),

    // 8. Entferne nicht mehr benötigte Spalten
    Ergebnis = Table.RemoveColumns(Unpivoted, {"Dateiname", "Attribut"})
in
    Ergebnis
und ergänzt
Zitat:Vorteile der neuen Struktur
  • Wiederverwendbarkeit:
    Code:
    LoadTableFromFiles
    ist universell einsetzbar
  • Wartbarkeit: klarer benannte Schritte statt tiefer Verschachtelung
  • Lesbarkeit: logischer Aufbau mit Zwischenüberschriften
Antworten Top
#40
Was juckt den Piv die KI, wenn er doch denkt es besser zu wissen. Aber evtl. wird er ja irgend wann den HI-Level verlassen können.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste