PowerQuery_ Variabler Pfad _ Rechts()
#1
Hallo Gemeinde 

Ich bräuchte mal Rat: 

Ich wähle in einer Pivot  Mittels Slicer einen Unterordner (Name + Jahr) aus 
Diesen schreibe ich mit VBA in eine Zelle 
 
Code:
Tabelle3.Cells(3, 5).Value = ThisWorkbook.SlicerCaches(3).SlicerCacheLevels.Item(1).SlicerItems.Item(1).Caption


Diesen Pfad nutze ich dann (als Parameter)

Code:
https://xxxx.sharepoint.com/sites/xxx/xxx/xxx/xxx/xxx/NAME/JAHR/

um mir variabel verschiedene Dateien in PowerQuery zu laden. 
Code:
let
    Quelle = Excel.CurrentWorkbook(){[Name="Tabelle2"]}[Content]{0}[Link]
in
    Quelle


klappt auch super 

jetzt wollte ich diesen Parameter (parPfad) "Missbrauchen" um mir noch einen Filter in einer Abfrage zu setzen. (Jahr) 
Wenn ich nun die Tabelle mit 

Code:
= Table.SelectRows(HeadsUp, each ([JAHR] = Text.Start(Text.End(parPfad,5),4)))
versuchezu Filtern kommt ein "leerer Filter" bzw- 0 Zeilen


Wo hab ich denn einen Denkfehler? 

Grüße und Danke für eure Ideen =)

Jack
Antworten Top
#2
(27.10.2025, 15:54)Jack_d schrieb:
Code:
= Table.SelectRows(HeadsUp, each ([JAHR] = Text.Start(Text.End(parPfad,5),4)))
versuchezu Filtern kommt ein "leerer Filter" bzw- 0 Zeilen
a) Es ist besser nur einmal das Jahr zu erzeugen:

MyYear =  Text.Start(Text.End(parPfad,5),4,
= Table.SelectRows(HeadsUp, each ([JAHR] = MyYear))

Und so kannst Du auch direkt sehen was da in MyYear wirklich drinsteht.

b) Außerdem musst Du zwingend den Datentyp beachtet, [JAHR] läßt vermuten das die Spalte eine Zahl enthält. 2025 <> "2025"! So was geht nur in Excelformeln.

Andreas.

(27.10.2025, 17:28)Andreas Killer schrieb: a) Es ist besser nur einmal das Jahr zu erzeugen:

MyYear =  Text.Start(Text.End(parPfad,5),4),
Whatever = Table.SelectRows(HeadsUp, each ([JAHR] = MyYear))

Und so kannst Du auch direkt sehen was da in MyYear wirklich drinsteht.

b) Außerdem musst Du zwingend den Datentyp beachtet, [JAHR] läßt vermuten das die Spalte eine Zahl enthält. 2025 <> "2025"! So was geht nur in Excelformeln.

Andreas.
Antworten Top
#3
(27.10.2025, 15:54)Jack_d schrieb: ...jetzt wollte ich diesen Parameter (parPfad) "Missbrauchen" um mir noch einen Filter in einer Abfrage zu setzen. (Jahr) 
Wenn ich nun die Tabelle mit 

Code:
= Table.SelectRows(HeadsUp, each ([JAHR] = Text.Start(Text.End(parPfad,5),4)))
versuchezu Filtern kommt ein "leerer Filter" bzw- 0 Zeilen

Moin,

...wenn Du schon PQ nutzt, dann bleib dabei. Das geht auch ohne VBA. 
Du brauchst eine formatierte Tabelle, die Dir alle notwendigen Infos liefert.
Die erstellst Du über folgende Abfrage:

let
    Quelle = Folder.Files("C:\Users\User\OneDrive\Dokumente\All_PQ"), // (Pfad anpassen, kannst ja den Deiner VBA Abfrage nutzen...)
    Unterordner = Table.AddColumn(Quelle, "Unterordner", each Text.AfterDelimiter([Folder Path], "\"), type text),
    #"Andere entfernte Spalten" = Table.SelectColumns(Unterordner,{"Name", "Folder Path", "Unterordner"}),
    #"Neu angeordnete Spalten" = Table.ReorderColumns(#"Andere entfernte Spalten",{"Folder Path", "Unterordner", "Name"}),
    #"Gefilterte Zeilen" = Table.SelectRows(#"Neu angeordnete Spalten", each true)
in
    #"Gefilterte Zeilen"

Nenne die Abfrage AllSubfolders

Daraus erstellst Du eine Pivottable mit Slicern für Unterordner und Name (in Zeilen).
Berichtslayout: Tabellenformat
2 Spalten neben der 1. Pivotdatenzeile (nehmen wir an, der Dateiname der Pivot steht in B13) Schreibst Du = B13
Das Schöne bei Pivotfiltern  ist nämlich, auch wenn der Wert ursprünglich in Zeile 1001 stand, der 1. gefundendene Wert steht dann immer in B13.
Schreibe darüber: Dateiauswahl, formatiere diesen Bereich als Tabelle, bennen die Tabelle um in tblAuswahl und erstelle eine neue Abfrage mit diesem Code:

let
    Position = List.PositionOf(All_PQ[Name],  Excel.CurrentWorkbook(){[Name="tblAuswahl"]}[Content][Dateiauswahl]{0}),
    Folder = All_PQ[Folder Path]{Position},
    SubFolder = All_PQ[Unterordner]{Position},
    Datei = All_PQ[Name]{Position}
in
    Folder & SubFolder & Datei

Und schon kannst Du nach Herzenslust filtern und Dich auf den Pfad dieser Abfrage beziehen.

Mal schauen, ob es diesmal Feedback und im günstigsten Fall sogar ein Danke gibt... 91
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
#4
Eigentlich sollte:

= Table.SelectRows(HeadsUp, each ([JAHR] = Number.From(Text.Start(Text.End(parPfad,5),4))))

genügen.
Antworten Top
#5
Guten Morgen ihr Zwei

Vielen Dank für Eure Hinweise und Anregungen.


(27.10.2025, 17:28)Andreas Killer schrieb: b) Außerdem musst Du zwingend den Datentyp beachtet, [JAHR] läßt vermuten das die Spalte eine Zahl enthält. 2025 <> "2025"! So was geht nur in Excelformeln.

Andreas.

Das war tatsächlich der entscheidende Hinweis.
Ich hole mir die (Jahres) Zahl ja aus einem String mit einer Textfunktion - somit gibt PQ erwartungsgemäß einen String zurück.
In der FilterTabelle war die zu filternde Tabelle hingegen nicht definiert (ABC123) mit diesem Variant? kam er dann nicht zurecht.
Wenn ich es sauber zu einem String machen (ABC) Filtert er korrekt.

(27.10.2025, 19:34)Ralf A schrieb: Moin,

...wenn Du schon PQ nutzt, dann bleib dabei. Das geht auch ohne VBA. 
Du brauchst eine formatierte Tabelle, die Dir alle notwendigen Infos liefert.
Die erstellst Du über folgende Abfrage:

Das stimmt generell schon. Daher hatte ich letztens unter "VBA /CubeWert/Combobox" danach gefragt .. warst du ja dabei -
Ist aber unterm Strich nicht so wild. da ich hier gleich das PQ.Refresh mit anstossen kann und wahrscheinlich noch mehr im weiteren.

(27.10.2025, 19:34)Ralf A schrieb: let
    Quelle = Folder.Files("C:\Users\User\OneDrive\Dokumente\All_PQ"), // (Pfad anpassen, kannst ja den Deiner VBA Abfrage nutzen...)
    Unterordner = Table.AddColumn(Quelle, "Unterordner", each Text.AfterDelimiter([Folder Path], "\"), type text),
    #"Andere entfernte Spalten" = Table.SelectColumns(Unterordner,{"Name", "Folder Path", "Unterordner"}),
    #"Neu angeordnete Spalten" = Table.ReorderColumns(#"Andere entfernte Spalten",{"Folder Path", "Unterordner", "Name"}),
    #"Gefilterte Zeilen" = Table.SelectRows(#"Neu angeordnete Spalten", each true)
in
    #"Gefilterte Zeilen"

Nenne die Abfrage AllSubfolders

Daraus erstellst Du eine Pivottable mit Slicern für Unterordner und Name (in Zeilen).
Berichtslayout: Tabellenformat
2 Spalten neben der 1. Pivotdatenzeile (nehmen wir an, der Dateiname der Pivot steht in B13) Schreibst Du = B13
Das Schöne bei Pivotfiltern  ist nämlich, auch wenn der Wert ursprünglich in Zeile 1001 stand, der 1. gefundendene Wert steht dann immer in B13.
Schreibe darüber: Dateiauswahl, formatiere diesen Bereich als Tabelle, bennen die Tabelle um in tblAuswahl und erstelle eine neue Abfrage mit diesem Code:

let
    Position = List.PositionOf(All_PQ[Name],  Excel.CurrentWorkbook(){[Name="tblAuswahl"]}[Content][Dateiauswahl]{0}),
    Folder = All_PQ[Folder Path]{Position},
    SubFolder = All_PQ[Unterordner]{Position},
    Datei = All_PQ[Name]{Position}
in
    Folder & SubFolder & Datei

Und schon kannst Du nach Herzenslust filtern und Dich auf den Pfad dieser Abfrage beziehen.

Das klappt. Logisch - aber letztlich mach ich es bereits so, nur mit dem Unterschied dass ich mir das umständlicher über VBA über die SlicerItems hole.



(27.10.2025, 19:34)Ralf A schrieb: Mal schauen, ob es diesmal Feedback und im günstigsten Fall sogar ein Danke gibt... 91

Was meinst du? Soweit ich mich erinnere habe ich mich immer für deine Beiträge bedankt. Habe ich dich irgendwo vergessen?

Grüße Jack
Antworten Top


Gehe zu:


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