Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1920to1924
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

PQ-Frage If then else Verzweigungen

PQ-Frage If then else Verzweigungen
01.03.2023 22:36:42
ralf_b
Hallo in die Runde,
ich bin bei meinen PowerQuery versuchen auf ein Problem gestoßen für das ich bisher keine gute Lösung gefunden habe. Wäre nett wenn da ein Auskenner mir mit einem Tip die richtige Richtung weist.
Ich bekomme als Ausgangsdateien mal eine csv und mal eine xlsx Datei zur Verfügung gestellt. Das kann ich nicht beeinflussen. Die Dateinamen kopiere ich in eine intelligente Tabelle und nutze sie um den Namen und Pfad in die Abfragen zu holen. Meine aktuelle Idee ist die Dateiendung zu prüfen und mit if-then-else entweder den nächsten Schritt für die csv-Datei oder die xlsx-Datei zu machen. Ich kenne nur die Möglichkeit je einen Verarbeitungsschritt im If und Else Zweig unterzubringen.
also z.b.
#"Schritt1" = if endung= "csv" then "tue dies" else "tue das"
#"Schritt2" = if endung= "csv" then "tue dies 2" else "tue das 2"
Um auf das Wunschergebnis zu kommen, sind aber unterschiedlich viele Schritte notwendig.
Frage: Wie kann man mehrere Schritte in einem if oder else Zweig unterbringen, oder ist das schon im Vorfeld anders zu lösen? Wenn ja, wie?

Vielen Dank schon mal für eure Zeit und evtl. gute Tips.
rb

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: PQ-Frage If then else Verzweigungen
01.03.2023 22:53:58
Yal
Hallo Ralf,
ich würde 2 Quellenverarbeitung in 2 Abfragen einrichten, eine für den Excel, eine für den CSV. Beide machen nur die minimal notwendige Behandlung um beide Quellen auf einen gemeinsamen Zustand zu bringen. Eine von beide wird immer fehlerhaft sein, sollte aber nicht stören (ungetestet).
Dann eine 3te Abfrage, deren erste Schritt wäre, die Quelle abhängig von der Endung aus der Abfrage für Excel oder aus der Abfrage für CSV.
Bei einzelnen Wert kannst Du ein benannte Bereich bzw. Zelle als Name in einem Excel.CurrentWorkbook verwenden:
= Excel.CurrentWorkbook(){[Name="SoHeisstMeineZelle"]}[Content]{0}[Column1]
VG
Yal
Anzeige
AW: PQ-Frage If then else Verzweigungen
02.03.2023 00:19:08
ralf_b
Hallo Yal,
danke für deine Idee.
Bzgl. der auftretenden Fehlermeldung einer dieser Abfragen habe ich so meine Bauchschmerzen. Mit Fehlerbehandlung in PQ habe ich mich noch nicht beschäftigt. Wenn Jemand Anderes diese Datei nutzt sollte da keine Fehlermeldung auftreten.
Aber ich werde deine Idee ausprobieren.
Die Abfrage eines benannten Bereiches habe ich erst kürzlich gesehen. Aber da war meine Pfadlösung per Parameterfunktion schon implementiert.
danke nochmal
rb
AW: PQ-Frage If then else Verzweigungen
02.03.2023 10:18:14
Yal
Hallo Ralf,
es ist mir noch eingefallen, dass die Behandlung der Datei in je einer Funktion abgelagert werden könnte: Excel, dann Fct xl, CSV, dann Fct CSV. Da die Funktion nur gerufen werden, wenn sie tatsächlich gebraucht werden (im ggt zu einer Abfrage, die grundsätzlich aktualisiert wird, wenn sie Teil einer Flow ist), wird die Fehlererzeugung vermieden.
VG
Yal
Anzeige
AW: PQ-Frage If then else Verzweigungen
02.03.2023 18:30:15
ralf_b
danke für den Nachtrag.
Ich vermute das du es so meinst wie Chris es gezeigt hat.
Ich werde mich da mal durcharbeiten. Leider habe ich noch ne Menge Informationsbedarf.
grüße
rb
AW: PQ-Frage If then else Verzweigungen
02.03.2023 11:35:38
ChrisL
Hi
Im Prinzip so, wie Yal es aufgezeigt hat. Nur habe ich mir nicht die Mühe gemacht, extra eine Funktion zu machen.
Die eine oder andere Abfrage läuft zwar auf einen Fehler, weil eine der beiden Dateien/Formate fehlt, aber deswegen wird keine Fehler-Nachricht (MsgBox) angezeigt.
Als Beispiel für einen individuellen Transformationsschritt (abhängig davon ob CSV oder XLSX) habe die Umbenennung von SpalteX auf SpalteB gewählt. Ausserdem wird die Datei mittels Ordnerabfrage automatisch ermittelt.
Abfrage "GetPfad" (nur Verbindung)
Es wird die neuste CSV oder XLSX Datei im Ordner ermittelt.
let
    Pfad = "C:\Ordner\Ordner",
    Quelle = Folder.Files(Pfad),
    #"Gefilterte Zeilen" = Table.SelectRows(Quelle, each [Extension] = ".csv" or [Extension] = ".xlsx"),
    #"Sortierte Zeilen" = Table.Sort(#"Gefilterte Zeilen",{{"Date modified", Order.Descending}}),
    Ergebnis = Pfad & "\" & List.First(#"Sortierte Zeilen"[Name])
in
    Ergebnis
Abfrage "QuelleXLSX" (nur Verbindung)
let
    Quelle = Excel.Workbook(File.Contents(GetPfad), null, true),
    Tabelle1_Sheet = Quelle{[Item="Tabelle1",Kind="Sheet"]}[Data],
    #"Höher gestufte Header" = Table.PromoteHeaders(Tabelle1_Sheet, [PromoteAllScalars=true])
in
    #"Höher gestufte Header"
Abfrage "QuelleCSV" (nur Verbindung)
Beispielhaft wird eine Spalte umbenannt
let
    Quelle = Csv.Document(File.Contents(GetPfad),[Delimiter=";", Columns=2, Encoding=65001, QuoteStyle=QuoteStyle.None]),
    #"Höher gestufte Header" = Table.PromoteHeaders(Quelle, [PromoteAllScalars=true]),
    #"Umbenannte Spalten" = Table.RenameColumns(#"Höher gestufte Header",{{"SpalteX", "SpalteB"}})
in
    #"Umbenannte Spalten"
Hauptabfrage
let
    Quelle = try QuelleXLSX otherwise QuelleCSV
in
    Quelle
cu
Chris
Anzeige
AW: PQ-Frage If then else Verzweigungen
02.03.2023 18:26:19
ralf_b
Hallo Chris,
auch dir vielen Dank für deinen Beitrag.
Die Idee mit der jüngsten Datei ist schon sehr nice.
Und die Hauptabfrage sieht mal richtig aufgeräumt aus. try ..otherwise kenne ich noch nicht. Scheint aber hier die Lösung zu sein.
Du hast mehrfach doppelte geschweifte Klammern ( {{"Date modified", Order.Descending}} ) verwendet. Was genau bewirken die Doppelten?
Ich danke dir für deine Mühe.
AW: PQ-Frage If then else Verzweigungen
02.03.2023 18:51:05
ChrisL
Hi
Danke für die Rückmeldung.
Die doppelten Klammern hat der Standard-Editor so gemacht. Wahrscheinlich könnte man eine Klammer entfernen.
Einmal beim Sortieren. Zwar sortiere ich nur eine Spalte, aber man könnte im gleichen Schritt auch mehrere Spalten sortieren
{{Spalte, Reihenfolge},{Spalte, Reihenfolge}}
Dito für Umbenennen. Würde man gleich mehrere Spalten umbenennen, ergibt die äussere Klammer Sinn.
{{SpalteVorher, SpalteNeu},{SpalteVorher, SpalteNeu}}
Allgemein gesehen assoziiere ich die geschweiften Klammern eher mit dem Datentyp list (=1 spaltiges Array) im Gegensatz zu Typ table (= 1 bis n Spalten). Z.B.
={1..3}
ergibt Typ list, Liste mit Werten von 1 bis 3
cu
Chris
Anzeige
List of List
02.03.2023 19:48:02
Yal
die aussere Liste gibt eine Sammlung von einzelne Anweisung, die innere Liste ist die jeweilige Anweisung, die hier aus 2 Elemente besteht.
Die innere muss als Liste übergeben werden, weil die Einzelteile der Anweisung zusammenhängen.
Ich gehe nicht davon aus, dass man eine Klammerebene weglassen kann.
VG
Yal
AW: List of List
02.03.2023 22:51:11
ralf_b
Danke euch Beiden,
ich mache zwar schon so Einiges mit PQ aber nur eher einfache Dinge ohne diese kryptische Listenjongliererei.
AW: List of List
03.03.2023 08:44:25
ChrisL
Gute Erklärung Yal
Die zweite Klammer braucht es nicht zwingend. Beide Varianten funktionieren:
let
    Quelle = Table.FromRecords({[SpalteA = "b", SpalteX = 2],[SpalteA = "a", SpalteX = 1]}),
    #"Sortierte Zeilen" = Table.Sort(Quelle,{{"SpalteX", Order.Ascending}}),
    #"Umbenannte Spalten" = Table.RenameColumns(#"Sortierte Zeilen",{{"SpalteX", "SpalteB"}}),
    #"Gruppierte Zeilen" = Table.Group(#"Umbenannte Spalten", {"SpalteA"}, {{"Anzahl", each Table.RowCount(_), Int64.Type}})
in
    #"Gruppierte Zeilen"
let
    Quelle = Table.FromRecords({[SpalteA = "b", SpalteX = 2],[SpalteA = "a", SpalteX = 1]}),
    #"Sortierte Zeilen" = Table.Sort(Quelle,{"SpalteX", Order.Ascending}),
    #"Umbenannte Spalten" = Table.RenameColumns(#"Sortierte Zeilen",{"SpalteX", "SpalteB"}),
    #"Gruppierte Zeilen" = Table.Group(#"Umbenannte Spalten", {"SpalteA"}, {"Anzahl", each Table.RowCount(_), Int64.Type})
in
    #"Gruppierte Zeilen"
cu
Chris
Anzeige
AW: List of List
03.03.2023 08:59:16
Yal
Hallo Chris,
vielen Dank für den Test. Ich war an der Stelle ... ein bisschen faul :-)
Die dopppelte wird erst zwingend, wenn mehr als eine Spalte als Parameter eingesetzt werden sollen, was bei Sort und Group vorkommt.
Schönes Wochenende
VG
Yal

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige