TripPin 4. rész – Adatforrás elérési útjai
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:
- Az összekötő kapcsolati logikájának egyszerűsítése
- A navigációs tábla felhasználói élményének javítása
Ez a lecke leegyszerűsíti az előző leckében létrehozott összekötőt a szükséges függvényparaméterek eltávolításával, valamint a felhasználói élmény növelésével egy dinamikusan létrehozott navigációs táblára való áttéréssel.
A hitelesítő adatok azonosításának részletes ismertetését a hitelesítés kezelésének adatforrásútvonalai című szakaszában találja.
Adatforrás elérési útjai
Adatforrásfüggvények invokálásakor az M motor az adatforrás típusa és az adatforrás elérési útja értékek alapján végzett kereséssel azonosítja a kiértékelés során használni kívánt hitelesítő adatokat.
Az előző leckében két adatforrásfüggvényt osztott meg, mindkettő egyetlen Uri.Type paraméterrel.
[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);
Amikor először futtat egy olyan lekérdezést, amely az egyik függvényt használja, egy hitelesítőadat-kérés jelenik meg legördülő listával, amely lehetővé teszi egy elérési út és egy hitelesítési típus kiválasztását.
Ha ismét ugyanazt a lekérdezést futtatja ugyanazokkal a paraméterekkel, az M motor képes megtalálni a gyorsítótárazott hitelesítő adatokat, és nem jelenik meg hitelesítő adatokra vonatkozó kérés. Ha úgy módosítja az url
argumentumot a függvényben, hogy az alap elérési út már ne egyezzen meg, új hitelesítőadat-kérés jelenik meg az új elérési úthoz.
A gyorsítótárazott hitelesítő adatok az M Lekérdezés kimenete ablakban, a Hitelesítő adatok táblában láthatók.
A változás típusától függően a függvény paramétereinek módosítása valószínűleg hitelesítőadat-hibát eredményez.
Az összekötő egyszerűsítése
Mostantól egyszerűsítheti az összekötőt az adatforrásfüggvény (TripPin.Contents
) paramétereinek eltávolításával. A minősítőt TripPin.Feed
is eltávolítjashared
, és csak belső függvényként hagyja.
A Power Query egyik tervezési filozófiája, hogy a kezdeti adatforrás párbeszédpanelje a lehető legegyszerűbb legyen. Ha egyáltalán lehetséges, a felhasználónak a navigátor szintjén kell választási lehetőségeket megadnia, nem pedig a kapcsolati párbeszédpanelen. Ha egy felhasználó által megadott érték programozott módon határozható meg, fontolja meg, hogy a navigációs tábla legfelső szintjeként adja hozzá a függvényparaméter helyett.
Ha például relációs adatbázishoz csatlakozik, szükség lehet kiszolgáló-, adatbázis- és táblanevekre.
Miután megismerte a kiszolgálót, amelyhez csatlakozni szeretne, és megadta a hitelesítő adatokat, az adatbázis API-jával lekérheti az adatbázisok listáját és az egyes adatbázisokban található táblák listáját.
Ebben az esetben, ha a kezdeti csatlakozási párbeszédpanelt a lehető legegyszerűbben szeretné megtartani, csak a kiszolgáló nevének kell megadnia a szükséges paramétert,Database
és Table
a navigációs táblázat szintjei lesznek.
Mivel a TripPin szolgáltatás rögzített URL-végponttal rendelkezik, nem kell értékeket kérnie a felhasználótól. Eltávolítja az URL-paramétert a függvényből, és definiál egy BaseUrl-változót az összekötőben.
BaseUrl = "https://services.odata.org/v4/TripPinService/";
[DataSource.Kind="TripPin", Publish="TripPin.Publish"]
shared TripPin.Contents = () => TripPinNavTable(BaseUrl) as table;
Megtartja a függvényt TripPin.Feed
, de többé nem osztja meg, nem társítja adatforrástípushoz, és egyszerűsíti a deklarációját. Ettől a ponttól kezdve csak a szakaszdokumentumon belül fogja használni.
TripPin.Feed = (url as text) =>
let
source = Web.Contents(url, [ Headers = DefaultRequestHeaders ]),
json = Json.Document(source)
in
json;
Ha frissíti a hívást a TripPin.Contents()
TripPin.query.pq
fájlban, és a Visual Studio Code-ban futtatja, egy új hitelesítőadat-kérés jelenik meg. Vegye figyelembe, hogy mostantól egyetlen adatforrás elérési útja van – TripPin.
A navigációs táblázat fejlesztése
Az első oktatóanyagban a beépített OData
függvényekkel kapcsolódott a TripPin szolgáltatáshoz.
Ez egy szép megjelenésű navigációs táblázatot adott a TripPin szolgáltatásdokumentum alapján, és nincs több kód az ön oldalán.
Az OData.Feed függvény automatikusan megtette a kemény munkát.
Mivel az OData.Feed helyett a Web.Contents használatával "csiszolja", ezt a navigációs táblázatot saját maga kell létrehoznia.
A következő módosításokat fogja végrehajtani:
- Megjelenítendő elemek listájának definiálása a navigációs táblában
- Ne használja az entitásspecifikus függvényeket (
GetAirlineTables
ésGetAirportsTable
)
Navigációs tábla létrehozása listából
Felsorolja a navigációs táblázatban megjeleníteni kívánt entitásokat, és létrehozza a megfelelő URL-címet a hozzáféréshez. Mivel az összes entitás ugyanazon gyökérútvonal alatt található, ezeket az URL-címeket dinamikusan hozhatja létre.
A példa egyszerűsítése érdekében csak a három entitáskészletet (Légitársaságok, Repülőterek, Személyek) fogja elérhetővé tenni, amelyek az M-táblákként lesznek közzétéve, és kihagyja a rekordként közzéteendő önálló (Me) halmazt. Egy későbbi leckéig kihagyja a függvények hozzáadását.
RootEntities = {
"Airlines",
"Airports",
"People"
};
Ezután frissíti a függvényt TripPinNavTable
, hogy egyszerre egy oszlopot hozzon létre a táblában.
Az egyes entitások [Data] oszlopát az entitás teljes URL-címének meghívásával TripPin.Feed
kéri le a rendszer.
TripPinNavTable = (url as text) as table =>
let
entitiesAsTable = Table.FromList(RootEntities, Splitter.SplitByNothing()),
rename = Table.RenameColumns(entitiesAsTable, {{"Column1", "Name"}}),
// Add Data as a calculated column
withData = Table.AddColumn(rename, "Data", each TripPin.Feed(Uri.Combine(url, [Name])), Uri.Type),
// Add ItemKind and ItemName as fixed text values
withItemKind = Table.AddColumn(withData, "ItemKind", each "Table", type text),
withItemName = Table.AddColumn(withItemKind, "ItemName", each "Table", type text),
// Indicate that the node should not be expandable
withIsLeaf = Table.AddColumn(withItemName, "IsLeaf", each true, type logical),
// Generate the nav table
navTable = Table.ToNavigationTable(withIsLeaf, {"Name"}, "Name", "Data", "ItemKind", "ItemName", "IsLeaf")
in
navTable;
Az URL-útvonalak dinamikus létrehozásakor győződjön meg arról, hogy a perjelek (/) hol találhatók! Vegye figyelembe, hogy az Uri.Combine az alábbi szabályokat használja az útvonalak kombinálásakor:
- Amikor a
relativeUri
paraméter egy /-val kezdődik, az a paraméter teljes elérési útját lecserélibaseUri
- Ha a
relativeUri
paraméter nem egy /-val kezdődik, ésbaseUri
/-val végződik, az elérési út hozzá lesz fűzve - Ha a
relativeUri
paraméter nem /-val kezdődik, ésbaseUri
nem végződik /-val, az elérési út utolsó szegmense lesz lecserélve
Az alábbi képen példák láthatók erre:
Az entitásspecifikus függvények eltávolítása
Az összekötő könnyebb karbantartása érdekében eltávolítja az előző leckében használt entitásspecifikus formázási függvényeket–GetAirlineTables
és GetAirportsTable
.
Ehelyett frissítenie TripPin.Feed
kell a JSON-választ úgy, hogy az az összes entitás esetében működjön.
Pontosabban a value
visszaadott OData JSON hasznos adatok mezőjét veszi fel, és egy rekordlistából táblázattá konvertálja.
TripPin.Feed = (url as text) =>
let
source = Web.Contents(url, [ Headers = DefaultRequestHeaders ]),
json = Json.Document(source),
// The response is a JSON record - the data we want is a list of records in the "value" field
value = json[value],
asTable = Table.FromList(value, Splitter.SplitByNothing()),
// expand all columns from the record
fields = Record.FieldNames(Table.FirstValue(asTable, [Empty = null])),
expandAll = Table.ExpandRecordColumn(asTable, "Column1", fields)
in
expandAll;
Feljegyzés
Az entitások feldolgozására szolgáló általános megközelítés használatának hátránya, hogy elveszíti az entitások formázási és típusadatait. Az oktatóanyag egy későbbi szakasza bemutatja, hogyan kényszerítheti ki a sémát REST API-hívásokon.
Összegzés
Ebben az oktatóanyagban az adatforrás elérési útjának értékének javításával és a navigációs táblázat rugalmasabb formátumára való áttéréssel megtisztította és egyszerűsítette az összekötőt. A lépések elvégzése (vagy a könyvtárban található mintakód használata) után a TripPin.Contents
függvény egy navigációs táblát ad vissza a Power BI Desktopban.