Zdieľať cez


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/")

Tabuľka TripPin.

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. Tabuľka TripPin2.

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.

TripPin Navigator.

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.

TripPin Query.

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é).

Ďalšie kroky

TripPin Časť 4 – Cesty k zdroju údajov