Sdílet prostřednictvím


TripPin část 3 - Navigační tabulky

Tento vícedílný kurz popisuje vytvoření nového rozšíření zdroje dat pro Power Query. Tento kurz se má provést postupně – každá lekce vychází z konektoru vytvořeného v předchozích lekcích a postupně přidává do konektoru nové funkce.

V této lekci:

  • Vytvoření navigační tabulky pro pevnou sadu dotazů
  • Testování navigační tabulky v Power BI Desktopu

Tato lekce přidá navigační tabulku ke konektoru TripPin vytvořenému v předchozí lekci. Když konektor použil OData.Feed funkci (část 1), obdrželi jste navigační tabulku "zdarma", jak je odvozeno z $metadata dokumentu služby OData. Když jste přešli na Web.Contents funkci (část 2), ztratili jste předdefinované navigační tabulky. V této lekci vezmete sadu pevných dotazů, které jste vytvořili v Power BI Desktopu, a přidáte příslušná metadata pro Power Query, aby se otevře dialogové okno Navigátor pro funkci zdroje dat.

Další informace o používání navigačních tabulek najdete v dokumentaci k navigační tabulce.

Definování pevných dotazů v konektoru

Jednoduchý konektor pro rozhraní REST API si můžete představit jako pevnou sadu dotazů, z nichž každá vrací tabulku. Tyto tabulky jsou zjistitelné prostřednictvím navigační tabulky konektoru. Každá položka v navigátoru je v podstatě přidružená ke konkrétní adrese URL a sadě transformací.

Začnete zkopírováním dotazů, které jste napsali v Power BI Desktopu (v předchozí lekci) do souboru konektoru. Otevřete projekt TripPin v editoru Visual Studio Code a vložte dotazy Airlines and Airport do souboru TripPin.pq. Tyto dotazy pak můžete převést na funkce, které přebírají jeden textový parametr:

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";

Dále naimportujete dotaz na napodobenou navigační tabulku, kterou jste napsali, která vytvoří pevné propojení tabulek s těmito dotazy sady dat. Zavolejte ho TripPinNavTable:

TripPinNavTable = (url as text) as table =>
    let
        source = #table({"Name", "Data"}, {
            { "Airlines", GetAirlinesTable(url) },
            { "Airports", GetAirportsTable(url) }
        })
    in
        source;

Nakonec deklarujete novou sdílenou funkci, TripPin.Contentskterá se používá jako hlavní funkce zdroje dat. Odeberete také Publish hodnotu, TripPin.Feed aby se už nezobradila v dialogovém okně Získat data .

[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šíření může označit více funkcí jako shared, s nebo bez jejich přidružení k DataSource.Kind. Pokud ale přidružíte funkci ke konkrétnímu DataSource.Kind, každá funkce musí mít stejnou sadu požadovaných parametrů se stejným názvem a typem. Důvodem je to, že se parametry funkce zdroje dat zkombinují, aby se pro vyhledávání přihlašovacích údajů uložených v mezipaměti použil klíč.

Po dokončení všech změn vytvořte konektor a otestujte funkci TripPin.Contents pomocí souboru TripPin.query.pq. Můžete dál používat dříve vytvořené přihlašovací údaje, nebo můžete nastavit nový a pak vyhodnotit aktuální soubor Power Query.

TripPin.Contents("https://services.odata.org/v4/TripPinService/")

TripPin Table.

Vytvoření navigační tabulky

Pomocí užitečné funkce Table.ToNavigationTable naformátujte statickou tabulku do něčeho, co Power Query rozpozná jako navigační tabulku. Vzhledem k tomu, že tato funkce není součástí standardní knihovny Power Query, musíte zkopírovat zdrojový kód do souboru .pq.

Když tuto pomocnou funkci nasadíte, aktualizujte TripPinNavTable svoji funkci a přidejte pole navigační tabulky.

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;

Opětovné spuštění testovacího dotazu po opětovném sestavení konektoru vám poskytne podobný výsledek jako při posledním přidání několika dalších sloupců. TripPin Table2.

Poznámka:

V okně výsledku PQTest editoru Visual Studio Code se nezobrazuje okno Navigátor . V okně Výstup dotazu M se vždy zobrazí podkladová tabulka.

Pokud rozšíření zkopírujete do vlastního konektoru Power BI Desktopu a vyvoláte novou funkci z dialogového okna Získat data , zobrazí se navigátor.

TripPin Navigator.

Pokud v kořenovém adresáři navigačního stromu vyberete pravým tlačítkem myši a vyberete Upravit, zobrazí se stejná tabulka jako v sadě Visual Studio.

TripPin Query.

Závěr

V tomto kurzu jste do rozšíření přidali navigační tabulku . Navigační tabulky jsou klíčovou funkcí, která usnadňuje používání konektorů. V tomto příkladu má navigační tabulka jenom jednu úroveň, ale uživatelské rozhraní Power Query podporuje zobrazení navigačních tabulek, které mají více dimenzí (i když jsou nepravidelné).

Další kroky

TripPin – část 4 – cesty ke zdroji dat