TripPin časť 3 – Navigačné tabuľky
Tento kurz s viacerými časťami sa zaoberá vytváraním nového rozšírenia zdroja údajov pre Power Query. Tento kurz sa má uskutočniť postupne – každá lekcia vychádza z konektora vytvoreného v predchádzajúcich lekciách a postupne pridáva nové možnosti do konektora.
V tejto lekcii:
- Vytvorenie navigačnej tabuľky pre pevnú množinu dotazov
- Testovanie tabuľky navigácie v aplikácii Power BI Desktop
V tejto lekcii sa pridá navigačná tabuľka do konektora TripPin, ktorý sme vytvorili v predchádzajúcej lekcii. Keď váš konektor použil OData.Feed
funkciu (časť 1), dostali ste tabuľku navigácie "zdarma", ako je to odvodené od dokumentu $metadata služby OData. Pri premiestnení Web.Contents
do funkcie (2. časť) ste stratili vstavanú navigačnú tabuľku. V tejto lekcii si vyberiete súbor pevných dotazov, ktoré ste vytvorili v aplikácii Power BI Desktop, a pridáte príslušné metaúdaje pre Power Query, aby sa zobrazili dialógové okno Navigátor pre funkciu zdroja údajov.
Ďalšie informácie o používaní navigačných tabuliek nájdete v dokumentácii k tabuľke navigácie.
Definovanie pevných dotazov v konektore
Jednoduchý konektor pre rozhranie REST API možno považovať za pevnú množinu dotazov, pričom každý z nich vracia tabuľku. Tieto tabuľky sa dajú zistiť prostredníctvom navigačnej tabuľky konektora. V podstate je každá položka v navigátore priradená ku konkrétnej URL adrese a množine transformácií.
Začnite skopírovaním dotazov, ktoré ste napísali v aplikácii Power BI Desktop (v predchádzajúcej lekcii) do súboru konektora. Otvorte projekt TripPin v programe Visual Studio Code a prilepte dotazy Airlines and Airports do súboru TripPin.pq. Potom môžete tieto dotazy zmeniť na funkcie, ktoré vezmú jeden textový parameter:
GetAirlinesTable = (url as text) as table =>
let
source = TripPin.Feed(url & "Airlines"),
value = source[value],
toTable = Table.FromList(value, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
expand = Table.ExpandRecordColumn(toTable, "Column1", {"AirlineCode", "Name"}, {"AirlineCode", "Name"})
in
expand;
GetAirportsTable = (url as text) as table =>
let
source = TripPin.Feed(url & "Airports"),
value = source[value],
#"Converted to Table" = Table.FromList(value, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"Name", "IcaoCode", "IataCode", "Location"}, {"Name", "IcaoCode", "IataCode", "Location"}),
#"Expanded Location" = Table.ExpandRecordColumn(#"Expanded Column1", "Location", {"Address", "Loc", "City"}, {"Address", "Loc", "City"}),
#"Expanded City" = Table.ExpandRecordColumn(#"Expanded Location", "City", {"Name", "CountryRegion", "Region"}, {"Name.1", "CountryRegion", "Region"}),
#"Renamed Columns" = Table.RenameColumns(#"Expanded City",{{"Name.1", "City"}}),
#"Expanded Loc" = Table.ExpandRecordColumn(#"Renamed Columns", "Loc", {"coordinates"}, {"coordinates"}),
#"Added Custom" = Table.AddColumn(#"Expanded Loc", "Latitude", each [coordinates]{1}),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "Longitude", each [coordinates]{0}),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom1",{"coordinates"}),
#"Changed Type" = Table.TransformColumnTypes(#"Removed Columns",{{"Name", type text}, {"IcaoCode", type text}, {"IataCode", type text}, {"Address", type text}, {"City", type text}, {"CountryRegion", type text}, {"Region", type text}, {"Latitude", type number}, {"Longitude", type number}})
in
#"Changed Type";
Následne importujete dotaz maketovej navigačnej tabuľky, ktorý vytvára pevnú tabuľku s prepojením na tieto dotazy množiny údajov. Nazvime to TripPinNavTable
:
TripPinNavTable = (url as text) as table =>
let
source = #table({"Name", "Data"}, {
{ "Airlines", GetAirlinesTable(url) },
{ "Airports", GetAirportsTable(url) }
})
in
source;
Nakoniec deklarujete novú zdieľanú funkciu TripPin.Contents
, ktorá sa používa ako funkcia hlavného zdroja údajov. Odstránite tiež Publish
hodnotu z TripPin.Feed
, aby sa už neznázorňuje v dialógovom okne Získať údaje .
[DataSource.Kind="TripPin"]
shared TripPin.Feed = Value.ReplaceType(TripPinImpl, type function (url as Uri.Type) as any);
[DataSource.Kind="TripPin", Publish="TripPin.Publish"]
shared TripPin.Contents = Value.ReplaceType(TripPinNavTable, type function (url as Uri.Type) as any);
Poznámka
Vaše rozšírenie môže označiť viaceré funkcie ako shared
, s alebo bez ich priradenia k DataSource.Kind
. Ak však priradíte funkciu ku konkrétnemu DataSource.Kind
, každá funkcia musí mať rovnakú množinu požadovaných parametrov s rovnakým názvom a typom. Dôvodom je, že parametre funkcie zdroja údajov sa skombinujú, aby sa na vyhľadávanie poverení vo vyrovnávacej pamäti použil kľúč.
Vytvorte konektor po finalizácii všetkých zmien a otestujte funkciu TripPin.Contents
pomocou súboru TripPin.query.pq. Môžete naďalej používať predtým vytvorené prihlasovacie údaje alebo môžete nastaviť nové a potom vyhodnotiť aktuálny súbor Power Query.
TripPin.Contents("https://services.odata.org/v4/TripPinService/")
Vytvorenie navigačnej tabuľky
Pomocou užitočnej funkcie Table.ToNavigationTable naformátujte statickú tabuľku do niečoho, čo Power Query rozpozná ako navigačnú tabuľku. Keďže táto funkcia nie je súčasťou štandardnej knižnice Power Query, musíte skopírovať jej zdrojový kód do súboru .pq.
Po na mieste tejto pomocnej funkcie aktualizujte TripPinNavTable
funkciu a pridajte polia navigačnej tabuľky.
TripPinNavTable = (url as text) as table =>
let
source = #table({"Name", "Data", "ItemKind", "ItemName", "IsLeaf"}, {
{ "Airlines", GetAirlinesTable(url), "Table", "Table", true },
{ "Airports", GetAirportsTable(url), "Table", "Table", true }
}),
navTable = Table.ToNavigationTable(source, {"Name"}, "Name", "Data", "ItemKind", "ItemName", "IsLeaf")
in
navTable;
Po opätovnom spustení testovacieho dotazu získate po opätovnom vytvorení konektora podobný výsledok ako posledný, keďže bolo pridaných ešte niekoľko stĺpcov.
Poznámka
Okno Navigátor sa nezobrazuje v okne výsledku PQTest v programe Visual Studio Code. Okno Výstup dotazu jazyka M vždy zobrazuje základnú tabuľku.
Ak skopírujete rozšírenie do vlastného konektora aplikácie Power BI Desktop a vyvoláte novú funkciu z dialógového okna Získať údaje , zobrazí sa navigátor.
Ak vyberiete vpravo v koreni navigačného stromu a vyberiete položku Upraviť, zobrazí sa tá istá tabuľka ako v rámci Visual Studia.
Záver
V tomto kurze ste k svojmu rozšíreniu pridali tabuľku Navigácia. Tabuľky navigácie sú kľúčovou funkciou, ktorá uľahčuje používanie konektorov. V tomto príklade má tabuľka navigácie iba jednu úroveň, ale používateľské rozhranie Power Query podporuje zobrazovanie navigačných tabuliek, ktoré majú viacero dimenzií (aj keď sú otrhané).