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]


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




Kommentare

  1. Hallo Böns,

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

    AntwortenLöschen

Kommentar veröffentlichen

Beliebte Posts aus diesem Blog

Vergleich mit 2 Bedingungen, INDEX(), VERGLEICH()

Dropdown Liste mit Mehrfachauswahl

nützliche Text Funktionen in Power Query