PQ - parametrisiert auf int. Tabellen
#11
Hallo schauan

Habe mir gerade nur ganz kurz nur deine Zip Datei angeschaut.
Der Aufbau dem ganzen  sieht sehr gut aus.
Wenn es nur immer um die gleichen Tabellennamen (Dat & Grund) ist das einlesen kein Problem, da spielt es absolut keine Rolle ob es verschiedene Spaltennamen haben.
Ich persönlich mache sowas nur noch in einer einzigen Abfrage , was dir wahrscheinlich nicht gefallen wird.
Mir ist noch unklar was du nach den Einlesen mit den Ganzen vor hast.
Viele Grüße
PIVPQ
Antworten Top
#12
@Ralf,

das ist dann doch ein Missverständnis. Die Daten in der Parametertabelle werden manuell gepflegt.

Ich komme nochmal auf den ursprünglichen code von ws-53 zurück.
Der holte die Daten aus den in der Parametertabelle definierten csv.
Ich habe nun stattdessen 3 Exceldateien.

Im erweiterten Editor kann ich in dieser Datei zwar das eine oder andere Offensichtliche anpassen, aber viel mehr auch mangels ausreichender Kenntnisse nicht Sad
Ich kann z.B. aus "Warengruppe","Umsatz", was bei mir nicht enthalten ist, "Wer","Was" machen.
Ich kann auch den Pfad von Import Directory ändern.
Das mit der Hilfsabfrage bekomme ich schon nicht gebacken. Das mit der csv-wandlung kann ja entfallen, aber die ganze Hilfsabfrage löschen geht nicht weil die in einer anderen gebraucht wird.

#2 von ws-53 holt mir zwar die spezielle Tabelle, aber nur aus dem ersten Verzeichnis der Parametertabelle und dort auch von allen Tabellen in diesem Verzeichnis und nicht nur von der definierten. Ich hatte zum Test mal die Mappe1_GHI nach .../Anton/ kopiert. Mappe1_DEF wird nicht importiert - habe das Ergebnis mal im Anhang.

Ich bräuchte praktisch einen Mix aus dem ursprünglichen code cef - Parameter... und #2

@pivpq,

wie gesagt, es geht mir nur darum, aus mehreren definierten Dateien definierte intelligente Tabellen auszulesen.

Wie in dem Gesundheitsbeispiel - ich brauche in der Zusammenfassung eine Tabelle tbl_Ärzte mit den Ärzten aus den definierten Dateien und eine tbl_Krankheiten mit allen Krankheiten aus den definierten Dateien. Die anderen vorerst nicht, sollte aber bei Bedarf zu einem späteren Zeitpunkt einfach erweiterbar sein und eben auch einfach für eine Zusammenfassung der Auto-Dateien anpassbar sein.

Was dann hinterher draus gemacht wird, ist auch total unterschiedlich. Ob ich bei den Autodaten ein Diagramm erstelle, wo vielleicht steigende Werkstattkosten ersichtlich sind oder bei Gesundheitsdaten die Anzahl Erkältungen ermittle nebst Kosten für Pillen, das bekomme ich im Nachgang per Formel, VBA oder was auch immer gebacken. Wichtig ist eben erst mal, dass ich die Daten per PQ in jeweils eine Datei mit den strukturell identischen Tabellen bekomme - abgesehen von einer Spalte mit Quelldateinamen - ausreichend wäre auch ein Extrakt davon, z.B. vom letztem Underline bis zum "Extention-Dot".


Angehängte Dateien
.xlsx   cef - Parameter mit Liste als Quelle (PQ SCHAUAN-WS53).xlsx (Größe: 24,55 KB / Downloads: 5)
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#13
Hallo André,

wie du die Spalten dynamisch expandieren kannst, das zeigt Chandeep (goodly.co) recht gut. Geht es nur um die Spalten, dann genügt ein einfacher Table.Combine. Willst du aber bspw. auch die ursprünglichen Mappennamen im Ergebnis sehen, dann geht es mit einer Spaltenliste.

Ich habe seine Beispiele mal auf deine Tabellen angepasst. Damit sollte es für diesen Teil deiner Anforderung zufriedenstellende Lösungen geben.

Für den Import aus unterschiedlich vielen Mappen, die alle identisch aufgebaut sind, empfinde ich es allerdings als Quatsch, in die Parametertabelle auch jeweils alle Tabellennamen mit aufzunehmen. Das ergibt nur dann Sinn, wenn die Tabellen in den einzelnen Mappen unterschiedliche Namen haben. Insofern würde ich die Mappennamen in eine Tabelle packen und die jeweiligen Tabellennamen als Parameter definieren.

Wenn sich die zu importierenden Mappen alle  in einem Hauptverzeichnis befinden kannst du dieses importieren, um dann die benötigten Mappen zu filtern. Diese Methode habe ich in die Abfrage Folder Import_Expand_Col_Names eingefügt.


P.S.: Mich würde ja einmal brennend interessieren, ob die PQ-hochbegabten die 1-Schrittabfragen direkt so im Editor erfassen, oder zuerst eine ganz normale Abfrage erstellen, um diese dann aufwändig nachzubearbeiten? Auch frage ich mich, wie groß der Aufwand ist, wenn dann nachträglich eine 1-Schrittabfrage angepasst werden muss.

Solange mir dazu keiner der wenigen PQ-hochbegabten eine vernünftige Antwort geben kann, bin ich eigentlich froh, nicht zu den hochbegabten zu gehören!


Angehängte Dateien
.xlsx   cef - PQ - parametrisiert auf int. Tabellen (PQ).xlsx (Größe: 31,09 KB / Downloads: 8)
Antworten Top
#14
(24.04.2025, 11:23)ws-53 schrieb: wie du die Spalten dynamisch expandieren kannst, das zeigt Chandeep (goodly.co) recht gut....

was meinst Du denn genau, mit Spalten dynamisch expandieren? M. M. n. kann man darauf komplett verzichten. 
Folgendes Bsp. geht von folgenden Voraussetzugen aus:

- es gibt ein Parametertabelle Namens tblPara mit den Spalten Pfad, Datei und Tabelle, in denen in der 1, Zeile logischerweise) die entsprechenden Daten stehen. Die werden verarbeitet.
Entscheidend ist aber der Schritt LiesTabelle. Da wird komplett auf Table.ExpandColumns verzichtet, wo man ja die entsprechenden Spaltennamen angeben muss. Ich brauch die gar nicht....
Wenn ich jetzt die (bis kurz davor noch unbekannten) Spaltennamen brauche, kann ich sie jetzt ganz locker verwenden, weil sie ja nun in Anzahl und allen Namen bekannt sind.

Probiers mal aus... :)

PHP-Code:
let
    Quelle 
Excel.CurrentWorkbook(){[Name="tblPara"]}[Content],
    Pfad Quelle[Pfad]{0},
    Datei Quelle[Datei]{0},
    Tbl Quelle[Tabelle]{0},

    Dat Excel.Workbook(File.Contents(Pfad Datei), nulltrue),
    #"Gefilterte Zeilen" = Table.SelectRows(Dat, each ([Item] = Tbl)),
    LiesTabelle #"Gefilterte Zeilen"{[Item=#"Gefilterte Zeilen"[Item]{0},Kind=#"Gefilterte Zeilen"[Kind]{0}]}[Data],
    #"Höher gestufte Header" = Table.PromoteHeaders(LiesTabelle, [PromoteAllScalars=true])
in
    
#"Höher gestufte Header" 
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
#15
halle ws-53,

danke, das ist Spitze 18

Ja, ich war gerade unterwegs und habe mir das mit den Tabellennamen auch schon so gedacht. Es reicht eigentlich irgendwo eine Zelle pro Abfrage, wo der Name eingetragen ist. Ansonsten habe ich bei 10 Dateien unnützerweise 10x den Tabellennamen ... 15

Table.Combine und die andere auf dem Blatt sind ideal für die Flexibilität. Je nachdem, wo ich die Dateinamen brauche und wo nicht kann ich die dann einsetzen Smile Die Dateien werden dann aus den Unterverzeichnissen gezogen, egal, in welchem die liegen.

@Ralf, der Höher gestufte Header erzeugt eine Tabelle, wo die erste Datenzeile zum Header wird?
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#16
Zitat:Dateien werden dann aus den Unterverzeichnissen gezogen, egal, in welchem die liegen.

Hier musst du nur aufpassen, dass es keine Unterverzeichnisse mit namensgleichen Testdateien oder Sicherungskopien gibt, da du diese sonst mehrfach importieren würdest.
[-] Folgende(r) 1 Nutzer sagt Danke an ws-53 für diesen Beitrag:
  • schauan
Antworten Top
#17
Hallöchen,

der Vollständigkeit halber - eine Frage ergibt sich.

Ich habe in der Quelltabelle eine Spalte "Name"
Das beißt sich nun mit der Spalte Name für den Dateiname bzw. der Variable Name im Code - Abfrage für Expand Col_Names.

Versuch 1: Qellspalte in Nome geändert. Funktioniert.

Versuch 2: im code "Name" umbenannt in "FileName", aber das führt zu einem Fehler:

Expression.Error: Der Schlüssel entsprach keiner Zeile in der Tabelle.
Details:
Key=
FileName=P_Path
Table=[Table]

Die Abfrage Table.Combine funktioniert natürlich, da gibt es die Spalte für den Dateinamen nicht Wink
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#18
(27.04.2025, 11:50)schauan schrieb: Ich habe in der Quelltabelle eine Spalte "Name"
Das beißt sich nun mit der Spalte Name für den Dateiname bzw. der Variable Name im Code - Abfrage für Expand Col_Names.

Versuch 1: Qellspalte in Nome geändert. Funktioniert.


Moin,

Die beiden letzen Parameter von ExpandTableColumn sind:
1. eine Liste der Quellspaltennamen
2. eine Liste der Spaltennamen, wie die neuen, expandierten Spalten heißen sollen.

Bsp.:
Expand_Workbook_Col  = Table.ExpandTableColumn(Add_Workbook_Col, "Benutzerdefiniert", {"Name", "Data", "Item", "Kind", "Hidden"}, {"Name.1", "Daten", "Item2", "Kopie.Kind", "Hidden2"}),
Und wie Du siehst, kannst Du in der Anweisung die Benennung der 2. Liste vornehmen. Nicht in der 1., denn das sind ja die Namen, die tatsächlich in der Quelle vorhanden sein sollten. Die Anzahl der Spalten beider Listen muss identisch sein.
Bei der Vergabe der neuen Spaltenbezeichnungen bist Du weitgehend frei, solange es, wie Du ja schon bemerkt hast, keine Überschneidungen gibt.

Aber die Fehlermeldung bezieht sich ja auf etwas anderes:
Expression.Error: Der Schlüssel entsprach keiner Zeile in der Tabelle.
Details:
Key=
FileName=P_Path
Table=[Table]

Hast Du FileName als Liste, also in { } und in " " gesetzt?

Wenn Du aber die neue Namensliste vorher schon irgendwo als Liste namens Filename definiert hast, dann gehört die Liste natürlich nicht noch einmal in { } oder " ". Ist dann ja schon eine....
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
#19
Bei mir klappt das mit der Umbenennung problemlos.

Code:
// Abfrage   -   Folder Import_Expand_Col_Names

let
    wk_Path              = Excel.CurrentWorkbook(){[Name="P_Path"]}[Content]{0}[Column1],
    wk_tbl               = Excel.CurrentWorkbook(){[Name="P_tbl"]}[Content]{0}[Column1],
   
//  Source               = Folder.Files("D:\mof-Daten\mof-Automatisierte Tabelle"),
    Source               = Folder.Files(wk_Path),

    Remove_Other_Cols    = Table.SelectColumns(Source,{"Content", "Name"}),
    Filter_out_temp      = Table.SelectRows(Remove_Other_Cols, each not Text.StartsWith([Name], "~")),
    //  Filter_WBs           = Table.SelectRows(Filter_out_temp, each Text.StartsWith([Name], "Mappe1_")),
    Filter_WBs            = Table.SelectRows(Filter_out_temp, each List.Contains(Zu_importierende_Mappen, [Name])),   
   
    Add_Workbook_Col     = Table.AddColumn(Filter_WBs, "Benutzerdefiniert", each Excel.Workbook([Content])),
    Expand_Workbook_Col  = Table.ExpandTableColumn(Add_Workbook_Col, "Benutzerdefiniert", {"Name", "Data", "Item", "Kind", "Hidden"}, {"Name.1", "Data", "Item", "Kind", "Hidden"}),
    Remove_not_needed    = Table.RemoveColumns(Expand_Workbook_Col,{"Content", "Item", "Kind", "Hidden"}),
    Filter_wk_tbl        = Table.SelectRows(Remove_not_needed, each ([Name.1] = wk_tbl)),
    Col_Names            = Table.ColumnNames(Table.Combine(Filter_wk_tbl[Data])),
    Step_Filter_wk_tbl   = Filter_wk_tbl,

    Rename_Name          = Table.RenameColumns(Step_Filter_wk_tbl,{{"Name", "Filename"}}),
   
    Expand_Col_Names     = Table.ExpandTableColumn(Rename_Name, "Data", Col_Names)
in
    Expand_Col_Names
Antworten Top
#20
Hallo schauan

Sorry für die verspätete Rückantwort.
Anbei meine Version:
a) Zip entpacken wohin du möchtest
b) Beim erstmaligen öffnen der Import Datei achten auf das die Formel in Tabelle Path kein #Wert oder #NV ausgibt , sollte dies der Fall sein einfach Datei Import nochmals öffnen.
c) Der Ordner "Download" muss erhalten bleiben wichtig.
d) Handelt es sich um andere Tabellennamen als "tbl_Dat" oder "tbl_Grund" muss du diese im Erweiterten PQ-Editor einfach in der richtigen Abfrage zweimal abändern.
Viel Spaß wünsche ich dir beim Testen.


Angehängte Dateien
.zip   PQ-MultiDateiImport-Parametrisiert.zip (Größe: 38,79 KB / Downloads: 3)
Viele Grüße
PIVPQ
Antworten Top


Gehe zu:


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