TripPin 3. rész – Navigációs táblák
Ez a többrészes oktatóanyag a Power Query új adatforrásbővítményének létrehozását ismerteti. Az oktatóanyagot egymás után kell elvégezni – minden lecke az előző leckékben létrehozott összekötőre épül, és növekményesen új képességeket ad hozzá az összekötőhöz.
Ebben a leckében a következőt fogja:
- Navigációs tábla létrehozása rögzített lekérdezéskészlethez
- A navigációs táblázat tesztelése a Power BI Desktopban
Ez a lecke egy navigációs táblát ad hozzá az előző leckében létrehozott TripPin-összekötőhöz. Amikor az összekötő használta a OData.Feed
függvényt (1. rész), az OData szolgáltatás $metadata dokumentumából származó "ingyen" navigációs táblázatot kapta. Amikor a Web.Contents
függvényre váltott (2. rész), elvesztette a beépített navigációs táblázatot. Ebben a leckében rögzített lekérdezéseket fog elvégezni, amelyeket a Power BI Desktopban hozott létre, és hozzáadja a Power Query megfelelő metaadatait az adatforrásfüggvény Kezelő párbeszédpaneljének előugró ablakához.
A navigációs táblák használatával kapcsolatos további információkért tekintse meg a navigációs táblázat dokumentációját .
Rögzített lekérdezések definiálása az összekötőben
A REST API egyszerű összekötője egy rögzített lekérdezéskészletnek tekinthető, amely mindegyike egy táblát ad vissza. Ezeket a táblákat az összekötő navigációs táblázatán keresztül lehet felderíteni. A kezelő minden eleme lényegében egy adott URL-címhez és átalakítások készletéhez van társítva.
Először másolja a Power BI Desktopban (az előző leckében) írt lekérdezéseket az összekötőfájlba. Nyissa meg a TripPin projektet a Visual Studio Code-ban, és illessze be a Légitársaságok és repülőterek lekérdezéseket a TripPin.pq fájlba. Ezeket a lekérdezéseket ezután olyan függvényekké alakíthatja, amelyek egyetlen szöveges paramétert vesznek igénybe:
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";
A következő lépésben importálja azt a navigációs tábla lekérdezést, amelyet írt, amely egy rögzített táblát hoz létre, amely az adatkészlet-lekérdezésekhez kapcsolódik. Hívja meg:TripPinNavTable
TripPinNavTable = (url as text) as table =>
let
source = #table({"Name", "Data"}, {
{ "Airlines", GetAirlinesTable(url) },
{ "Airports", GetAirportsTable(url) }
})
in
source;
Végül deklarál egy új megosztott függvényt, TripPin.Contents
amely a fő adatforrásfüggvényként használatos. Az értéket is eltávolítjaPublish
, hogy az többé ne jelenjön meg az Adatok lekérése párbeszédpanelen.TripPin.Feed
[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);
Feljegyzés
A bővítmény több függvényt shared
is megjelölhet egy DataSource.Kind
. Ha azonban egy függvényt egy adott DataSource.Kind
függvénnyel társít, minden függvénynek ugyanazzal a paraméterkészlettel kell rendelkeznie, ugyanazzal a névvel és típussal. Ennek az az oka, hogy az adatforrásfüggvény paraméterei össze vannak adva, hogy a gyorsítótárazott hitelesítő adatok keresésekor használjon egy "kulcsot".
Az összes módosítás véglegesítése után hozza létre az összekötőt, és tesztelje a függvényt TripPin.Contents
a TripPin.query.pq fájllal. Továbbra is használhatja a korábban létrehozott hitelesítő adatokat, vagy beállíthat egy újat, majd kiértékelheti az aktuális Power Query-fájlt.
TripPin.Contents("https://services.odata.org/v4/TripPinService/")
Navigációs tábla létrehozása
A praktikus Table.ToNavigationTable függvénnyel formázhatja a statikus táblát olyanra, amelyet a Power Query navigációs táblaként ismer fel. Mivel ez a függvény nem része a Power Query szabványos kódtárának, a forráskódot a .pq fájlba kell másolnia.
Ha ez a segédfüggvény működik, frissítse a függvényt TripPinNavTable
a navigációs tábla mezőinek hozzáadásához.
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;
A teszt lekérdezés ismételt futtatása az összekötő újbóli létrehozása után hasonló eredményt ad, mint a legutóbbi alkalommal – néhány további oszlop hozzáadásával.
Feljegyzés
A Kezelő ablak nem jelenik meg a Visual Studio Code PQTest eredményablakában. Az M Lekérdezés kimenete ablak mindig megjeleníti a mögöttes táblát.
Ha a bővítményt átmásolja a Power BI Desktop egyéni összekötőjéhez, és meghívja az új függvényt az Adatok lekérése párbeszédpanelen, megjelenik a kezelője.
Ha a navigációs fa gyökerében a Szerkesztés lehetőséget választja, ugyanazt a táblázatot látja, mint a Visual Studióban.
Összegzés
Ebben az oktatóanyagban egy navigációs táblázatot adott hozzá a bővítményhez. A navigációs táblák kulcsfontosságú funkciók, amelyek megkönnyítik az összekötők használatát. Ebben a példában a navigációs táblázat csak egy szinttel rendelkezik, de a Power Query felhasználói felülete támogatja a több dimenzióval rendelkező navigációs táblák megjelenítését (még akkor is, ha azok nincsenek megjelölve).