Power Query, Parameter Tabelle, fnGetParameter
Anbei ein Beispiel, wie man über einen Parameter die Anbindung einer Access Datenbank
parametrisieren kann. Dies ist immer dann sinnvoll, wenn die Dateien von einem System auf ein anderes übertragen werden sollen, ohne dass die relevante Code Zeile in der Abfrage manuell angepasst werden soll.
Wenn sowohl die Excel Datei mit Power Query Abfragen als auch die Access Datenbank in ein
und demselben Ordner liegen funktioniert die Anbindung mittels folgender Methode:
(Dieses Beispiel kann analog auch für andere Datenquellentypen angepasst werden.)
1 Neue Abfrage erstellen, folgenden Code einfügen (vorher alles entfernen)
---SCHNIPP ---
(ParameterName as text) =>
let
ParamSource = Excel.CurrentWorkbook(){[Name="Parameter"]}[Content],
ParamRow = Table.SelectRows(ParamSource, each ([Parameter] = ParameterName)),
Value=
if Table.IsEmpty(ParamRow)=true
then null
else Record.Field(ParamRow{0},"Value")
in
Value
---SCHNAPP---
2 Funktion in fnGetParameter umbenennen
3 Tabelle Parameter erstellen, 2 Spalten [Parameter], [Value]
--- SCHNAPP ---
Datenquelle Excel Datei
Um zB Excel Dateien anzubinden kann ein weiterer Parameter eingetragen werden
Datenquelle Text / CSV Datei
Exkurs: Parameter Csv.Document Language M Funktion
Eine Text Datei kann folgendermaßen angebunden werden
(im gewählten Beispiel Tabstop getrennte Felder, 4 Quell Spalten)
--- SCHNIPP
let
SolutionPath = fnGetParameter("File Path Text"),
Quelle = Csv.Document(File.Contents(SolutionPath & "Name_Text_Datei_einsetzen.txt"),[Delimiter="#(tab)", Columns=4, Encoding=1252, QuoteStyle=QuoteStyle.None])
in
Quelle
--- SCHNAPP
Datenquelle Text Datei
falls es notwendig ist, einen Import als Text-Datei zu erzwingen (eine Spalte, keine Aufteilung auf Spalten anhand Trennzeichen), kann alternativ folgende benutzerdefinierte Funktion verwendet werden
(in neue Arbeitsmappenabfrage kopieren, Name [fxRawFileContents])
--- SCHNIPP
/* Hole Rohdaten Zeile für Zeile, ohne dass Power Query diese interpretiert */
/*Ergebnis ist eine Spalte ohne Aufteilung der Daten auf Spalten */
let
fxRawFileContents = (fullpath as text) as table =>
let
Value = Table.FromList(Lines.FromBinary(File.Contents(fullpath)),Splitter.SplitByNothing())
in
Value
in
fxRawFileContents
--- SCHNAPP
für Details siehe folgenden Blog Beitrag
Datenquelle Sharepoint
Anbindung Excel Datei bereitgestellt in Sharepoint Bibliothek (über URL) siehe hier
#Table Objekt
wie man alternativ eine gekapselte (Parameter) Tabelle (#table) erstellen kann siehe hier
weiterführende Informationen bei Ken Puls
https://www.excelguru.ca/blog/2014/11/26/building-a-parameter-table-for-power-query/
parametrisieren kann. Dies ist immer dann sinnvoll, wenn die Dateien von einem System auf ein anderes übertragen werden sollen, ohne dass die relevante Code Zeile in der Abfrage manuell angepasst werden soll.
Wenn sowohl die Excel Datei mit Power Query Abfragen als auch die Access Datenbank in ein
und demselben Ordner liegen funktioniert die Anbindung mittels folgender Methode:
(Dieses Beispiel kann analog auch für andere Datenquellentypen angepasst werden.)
1 Neue Abfrage erstellen, folgenden Code einfügen (vorher alles entfernen)
---SCHNIPP ---
(ParameterName as text) =>
let
ParamSource = Excel.CurrentWorkbook(){[Name="Parameter"]}[Content],
ParamRow = Table.SelectRows(ParamSource, each ([Parameter] = ParameterName)),
Value=
if Table.IsEmpty(ParamRow)=true
then null
else Record.Field(ParamRow{0},"Value")
in
Value
---SCHNAPP---
2 Funktion in fnGetParameter umbenennen
3 Tabelle Parameter erstellen, 2 Spalten [Parameter], [Value]
Formel Spalte [Value] :=
Ordnerpfad
=LINKS(ZELLE("dateiname";B6);FINDEN("[";ZELLE("dateiname";B6);1)-1)
Dateipfad bis zum Dateinamen ohne [eckige Klammern]
=WECHSELN(LINKS(ZELLE("Dateiname";$A$1);-1+FINDEN("]";ZELLE("Dateiname";$A$1)));"[";"")
Tabelle über
Entwurf -> Tabellenname in
Parameter
umbenennen
Tabelle als Abfrage in Power Query abbilden (Reiter Daten -> aus Tabelle)
Exkurs
alternativ kann eine Tabelle direkt über das #table Objekt in einer Arbeitsmappenabfrage
definiert / erstellt werden
Beispiel:
= #table({"Parameter","Value"},{{"Parameter1","Value1"},{"Parameter2","Value2"}})
4 Neue Abfrage erstellen und Code anpassen
Datenquellen (Typen)
Datenquelle Access Datenbank
--- SCHNIPP ---
let
SolutionPath = fnGetParameter("File Path Access"),
Quelle = Access.Database(File.Contents(SolutionPath & "Name_AccessDB_einsetzen.accdb"), [CreateNavigationProperties=true]),
_Tabelle1 = Quelle{[Schema="",Item="Tabelle1"]}[Data]
in
_Tabelle1
--- SCHNAPP ---
Datenquelle Excel Datei
Um zB Excel Dateien anzubinden kann ein weiterer Parameter eingetragen werden
--- SCHNIPP
let
SolutionPath = fnGetParameter("File Path Excel"),
Quelle = Excel.Workbook(File.Contents(SolutionPath & "Name_Exceldatei_einsetzen.xlsx"), null, true),
Navigation = Quelle{[Item="Tabelle1",Kind="Sheet"]}[Data],
#"Höher gestufte Header" = Table.PromoteHeaders(Navigation, [PromoteAllScalars=true])
in
#"Höher gestufte Header"
--- SCHNAPP
Datenquelle Text / CSV Datei
Exkurs: Parameter Csv.Document Language M Funktion
Eine Text Datei kann folgendermaßen angebunden werden
(im gewählten Beispiel Tabstop getrennte Felder, 4 Quell Spalten)
--- SCHNIPP
let
SolutionPath = fnGetParameter("File Path Text"),
Quelle = Csv.Document(File.Contents(SolutionPath & "Name_Text_Datei_einsetzen.txt"),[Delimiter="#(tab)", Columns=4, Encoding=1252, QuoteStyle=QuoteStyle.None])
in
Quelle
--- SCHNAPP
Datenquelle Text Datei
falls es notwendig ist, einen Import als Text-Datei zu erzwingen (eine Spalte, keine Aufteilung auf Spalten anhand Trennzeichen), kann alternativ folgende benutzerdefinierte Funktion verwendet werden
(in neue Arbeitsmappenabfrage kopieren, Name [fxRawFileContents])
--- SCHNIPP
/* Hole Rohdaten Zeile für Zeile, ohne dass Power Query diese interpretiert */
/*Ergebnis ist eine Spalte ohne Aufteilung der Daten auf Spalten */
let
fxRawFileContents = (fullpath as text) as table =>
let
Value = Table.FromList(Lines.FromBinary(File.Contents(fullpath)),Splitter.SplitByNothing())
in
Value
in
fxRawFileContents
--- SCHNAPP
für Details siehe folgenden Blog Beitrag
Datenquelle Sharepoint
Anbindung Excel Datei bereitgestellt in Sharepoint Bibliothek (über URL) siehe hier
#Table Objekt
wie man alternativ eine gekapselte (Parameter) Tabelle (#table) erstellen kann siehe hier
weiterführende Informationen bei Ken Puls
https://www.excelguru.ca/blog/2014/11/26/building-a-parameter-table-for-power-query/
Lern Video
Hallo Böns,
AntwortenLöschengibt es diese Möglichkeit auch bei einem ganzen Ordner (mit CSV oder excel-Dateien).
Bei meinem Kollegen liegt das zum Teil auf anderen Ressourcen und anderen gemappten Laufwerken, so dass auch hier eine Anpassung über Paramter notwendig wäre.