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.Contents
která 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/")
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ů.
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.
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.
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é).