Del via


TripPin del 3 – navigasjonstabeller

Denne flerdelte opplæringen dekker opprettelsen av en ny datakildeutvidelse for Power Query. Opplæringen er ment å gjøres sekvensielt – hver leksjon bygger på koblingen som er opprettet i tidligere leksjoner, og legger trinnvis til nye funksjoner i koblingen.

I denne leksjonen vil du:

  • Opprette en navigasjonstabell for et fast sett med spørringer
  • Teste navigasjonstabellen i Power BI Desktop

Denne leksjonen legger til en navigasjonstabell i TripPin-koblingen som ble opprettet i forrige leksjon. Da koblingen brukte OData.Feed funksjonen (del 1), mottok du navigasjonstabellen «gratis», som avledet fra OData-tjenestens $metadata dokument. Da du flyttet til Web.Contents funksjonen (del 2), mistet du den innebygde navigasjonstabellen. I denne leksjonen tar du et sett med faste spørringer du opprettet i Power BI Desktop, og legger til de riktige metadataene for Power Query for å åpne dialogboksen Navigator for datakildefunksjonen.

Se dokumentasjonen for navigasjonstabellen hvis du vil ha mer informasjon om hvordan du bruker navigasjonstabeller.

Definere faste spørringer i koblingen

En enkel kobling for en REST-API kan betraktes som et fast sett med spørringer, og hver av dem returnerer en tabell. Disse tabellene gjøres synlige gjennom navigasjonstabellen for koblingen. I hovedsak er hvert element i navigatøren knyttet til en bestemt nettadresse og et sett med transformasjoner.

Du starter med å kopiere spørringene du skrev i Power BI Desktop (i forrige leksjon) til koblingsfilen. Åpne TripPin-prosjektet i Visual Studio Code, og lim inn Airlines- og Airports-spørringene i TripPin.pq-filen. Deretter kan du gjøre disse spørringene om til funksjoner som tar én enkelt tekstparameter:

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

Deretter importerer du spørringen for mock-navigasjonstabellen du skrev, som oppretter en fast tabellkobling til disse datasettspørringene. Kall det TripPinNavTable:

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

Til slutt erklærer du en ny delt funksjon, TripPin.Contentssom brukes som hoveddatakildefunksjon. Du fjerner også verdien fra, slik at den Publish ikke lenger vises i dialogboksen Hent data.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);

Merk

Utvidelsen kan merke flere funksjoner som shared, med eller uten å knytte dem til en DataSource.Kind. Når du imidlertid knytter en funksjon til en bestemt DataSource.Kindfunksjon, må hver funksjon ha samme sett med nødvendige parametere, med samme navn og type. Dette er fordi parameterne for datakildefunksjonen kombineres for å lage en «nøkkel» som brukes til å slå opp bufret legitimasjon.

Bygg koblingen etter at du har fullført alle endringene, og test TripPin.Contents funksjonen ved hjelp av TripPin.query.pq-filen. Du kan fortsette å bruke den tidligere opprettede legitimasjonen, eller du kan angi en ny og deretter evaluere gjeldende Power Query-fil.

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

TripPin Table.

Opprette en navigasjonstabell

Bruk den praktiske Table.ToNavigationTable-funksjonen til å formatere den statiske tabellen til noe som Power Query gjenkjenner som en navigasjonstabell. Siden denne funksjonen ikke er en del av Power Querys standardbibliotek, må du kopiere kildekoden til PQ-filen.

Når denne hjelpefunksjonen er på plass, oppdaterer du TripPinNavTable neste funksjon for å legge til navigasjonstabellfeltene.

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;

Hvis du kjører testspørringen på nytt etter at du har bygget koblingen på nytt, får du et lignende resultat som sist, med noen flere kolonner lagt til. TripPin Table2.

Merk

Navigator-vinduet vises ikke i PQTest-resultatvinduet i Visual Studio Code. Utdatavinduet for M-spørring viser alltid den underliggende tabellen.

Hvis du kopierer utvidelsen over til den egendefinerte Power BI Desktop-koblingen og aktiverer den nye funksjonen fra dialogboksen Hent data , vises navigatøren.

TripPin Navigator.

Hvis du høyreklikker på roten av navigasjonstreet og velger Rediger, ser du den samme tabellen som du gjorde i Visual Studio.

TripPin Query.

Konklusjon

I denne opplæringen har du lagt til en navigasjonstabell i utvidelsen. Navigasjonstabeller er en viktig funksjon som gjør koblinger enklere å bruke. I dette eksemplet har navigasjonstabellen bare ett enkelt nivå, men Brukergrensesnittet for Power Query støtter visning av navigasjonstabeller som har flere dimensjoner (selv når de er fillete).

Neste trinn

TripPin Del 4 – Datakildebaner