TripPin Deel 1- Gegevensconnector voor een OData-service

In deze meerdelige zelfstudie wordt het maken van een nieuwe gegevensbronextensie voor Power Query. De zelfstudie is bedoeld om opeenvolgend te worden uitgevoerd voor elke les die is gebaseerd op de connector die in de vorige lessen is gemaakt, en incrementeel nieuwe mogelijkheden toe te voegen — aan uw connector.

In deze les gaat u het volgende doen:

  • Een nieuw gegevensconnectorproject maken met de Visual Studio-SDK
  • Een basisfunctie maken om gegevens op te halen uit een bron
  • Uw connector testen in Visual Studio
  • Uw connector registreren in Power BI Desktop

Een eenvoudige OData-connector maken

In deze sectie maakt u een nieuw gegevensconnectorproject, geeft u basisinformatie op en test u deze in Visual Studio.

Open Visual Studio en maak een nieuw Project. Selecteer onder Power Query map data connector het project Gegevensconnector. Stel voor dit voorbeeld de projectnaam in op TripPin .

VSProject.

Open het bestand TripPin.pq en plak de volgende connectordefinitie.

section TripPin;

[DataSource.Kind="TripPin", Publish="TripPin.Publish"]
shared TripPin.Feed = Value.ReplaceType(TripPinImpl, type function (url as Uri.Type) as any);

TripPinImpl = (url as text) =>
    let
        source = OData.Feed(url)
    in
        source;

// Data Source Kind description
TripPin = [
    Authentication = [
        Anonymous = []
    ],
    Label = "TripPin Part 1 - OData"
];

// Data Source UI publishing description
TripPin.Publish = [
    Beta = true,
    Category = "Other",
    ButtonText = { "TripPin OData", "TripPin OData" }
];

Deze connectordefinitie bevat:

  • Een gegevensbrondefinitierecord voor de TripPin-connector
  • Een declaratie dat Impliciet (Anoniem) het enige verificatietype voor deze bron is
  • Een functie ( TripPinImpl ) met een implementatie die OData.Feed aanroept
  • Een gedeelde functie ( TripPin.Feed ) die het parametertype in stelt op Uri.Type
  • Een publicatierecord van de gegevensbron waarmee de connector kan worden weergegeven in Power BI dialoogvenster Gegevens op halen

Open het bestand TripPin.query.pq. Vervang de huidige inhoud door een aanroep van de geëxporteerde functie.

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

Selecteer de knop Start om het hulpprogramma M Query te starten.

Het bestand .query.pq wordt gebruikt om uw extensie te testen zonder dat u deze in de bin-map Power BI Desktop van uw <project> Power BI Desktop moet implementeren. Als u de knop Start selecteert (of op F5 drukt), wordt de extensie automatisch ge compileerd en wordt het hulpprogramma M Query start.

Het voor de eerste keer uitvoeren van uw query resulteert in een referentiefout. In Power Query zou de hostingtoepassing deze fout converteren naar een referentieprompt. In Visual Studio ziet u een vergelijkbare prompt waarin wordt aanroept welke gegevensbron referenties en het pad naar de gegevensbron ontbreken. Selecteer de kortste van de gegevensbronpaden ( ), hiermee wordt uw referentie toegepast https://services.odata.org/ — op alle URL's onder dit pad.

Selecteer het type Anonieme referentie en selecteer vervolgens Referentie instellen.

Afbeelding van het dialoogvenster Uitvoer van M-query, met het tabblad Fouten geselecteerd, en het gegevensbronpad ingevuld en het referentietype ingesteld op Anoniem.

Selecteer OK om het dialoogvenster te sluiten en selecteer vervolgens opnieuw de knop Start. U ziet een dialoogvenster met de uitvoeringsstatus van de query en ten slotte een tabel Queryresultaat met de gegevens die zijn geretourneerd door uw query.

Queryresultaten.

U kunt een aantal verschillende OData-URL's in het testbestand uitproberen om te zien hoe verschillende resultaten worden geretourneerd. Bijvoorbeeld:

  • https://services.odata.org/v4/TripPinService/Me
  • https://services.odata.org/v4/TripPinService/GetPersonWithMostFriends()
  • https://services.odata.org/v4/TripPinService/People

Het bestand TripPin.query.pq kan enkele instructies, let-instructies of volledige sectiedocumenten bevatten.

let
    Source = TripPin.Feed("https://services.odata.org/v4/TripPinService/"),
    People = Source{[Name="People"]}[Data],
    SelectColumns = Table.SelectColumns(People, {"UserName", "FirstName", "LastName"})
in
    SelectColumns

Open Fiddler om HTTP-verkeer vast te leggen en voer de query uit. Als het goed is, ziet u een aantal verschillende services.odata.org, gegenereerd door het mashup-containerproces. U kunt zien dat het openen van de hoofd-URL van de service resulteert in een 302-status en een omleiding naar de langere versie van de URL. De volgende omleidingen zijn een ander gedrag dat u 'gratis' krijgt van de basisbibliotheekfuncties.

Als u naar de URL's kijkt, is het belangrijk om te weten dat u de query folding kunt zien die is uitgevoerd met de SelectColumns instructie . https://services.odata.org/v4/TripPinService/People?$select=UserName%2CFirstName%2CLastName

Als u meer transformaties aan uw query toevoegt, kunt u zien hoe deze van invloed zijn op de gegenereerde URL.

Dit gedrag is belangrijk om op te merken. Hoewel u geen expliciete vouwlogica hebt geïmplementeerd, neemt de connector deze mogelijkheden over van de functie OData.Feed. M-instructies zijn filtercontexten die samen kunnen worden gebruikt, waar mogelijk van de ene functie naar — de andere. Dit is in concept vergelijkbaar met de manier waarop gegevensbronfuncties die in uw connector worden gebruikt, hun verificatiecontext en referenties overnemen. In latere lessen vervangt u het gebruik van OData.Feed,dat mogelijkheden voor native vouwen heeft, door Web.Contents,wat dat niet doet. Om hetzelfde niveau van mogelijkheden te krijgen, moet u de interface gebruiken en uw eigen Table.View expliciete vouwlogica implementeren.

Uw extensie laden in Power BI Desktop

Als u de extensie in Power BI Desktop wilt gebruiken, moet u het uitvoerbestand van uw connectorproject (TripPin.mez) kopiëren naar de map Aangepaste connectors.

  1. Selecteer Visual Studio in | Bouw Oplossing (F6) in de menubalk. Hiermee wordt het MEZ-bestand voor uw project gegenereerd. Standaard wordt dit in de map bin\Debug van uw project geplaatst.
  2. Maak een [My Documents]\Power BI Desktop\Custom Connectors map.
  3. Kopieer het extensiebestand naar deze map.
  4. Controleer de optie (Niet aanbevolen) Toestaan dat een extensie wordt geladen zonder validatie of waarschuwing in Power BI Desktop (onder Bestandsopties en instellingen > > Opties > Beveiligingsgegevensextensies). >
  5. Start Power BI Desktop opnieuw.
  6. Selecteer Gegevens > meer om het dialoogvenster Gegevens op te halen.

U kunt uw extensie vinden door de naam ervan in het zoekvak te typen.

Dialoogvenster Gegevens op halen.

Selecteer de functienaam en selecteer Verbinding maken. Er wordt een bericht van derden — weergegeven. Selecteer Doorgaan om door te gaan. Het dialoogvenster voor functie-aanroepen wordt nu weergegeven. Voer de hoofd-URL van de service ( https://services.odata.org/v4/TripPinService/ ) in en selecteer OK.

Functie aanroepen.

Omdat dit de eerste keer is dat u toegang hebt tot deze gegevensbron, ontvangt u een prompt voor referenties. Controleer of de kortste URL is geselecteerd en selecteer vervolgens Verbinding maken.

Afbeelding van referentieprompt ingesteld op Anoniem en de niveauinstelling ingesteld op de kortste URL.

U ziet dat in plaats van een eenvoudige tabel met gegevens, de navigator wordt weergegeven. Dit komt doordat de functie OData.Feed een tabel met speciale metagegevens retourneert die de Power Query-ervaring weet om weer te geven als een navigatietabel. In dit scenario wordt belijst hoe u in een toekomstige les uw eigen navigatietabel kunt maken en aanpassen.

Navigatietabel.

Selecteer de tabel Me en selecteer vervolgens Gegevens transformeren. U ziet dat aan de kolommen al typen zijn toegewezen (de meeste). Dit is een andere functie van de onderliggende OData.Feed-functie. Als u de aanvragen in Fiddler bekijkt,ziet u dat u het document met $metadata service hebt opgehaald. De OData-implementatie van de engine doet dit automatisch om het schema, de gegevenstypen en de relaties van de service te bepalen.

Me Record.

Conclusie

In deze les hebt u gezien hoe u een eenvoudige connector maakt op basis van de bibliotheekfunctie OData.Feed. Zoals u hebt gezien, is er weinig logica nodig om een volledig functionele connector via de OData basisfunctie in te stellen. Andere functies die zijn ingeschakeld voor extensibility, zoals ODBC. DataSourcebiedt vergelijkbare mogelijkheden.

In de volgende les vervangt u het gebruik van OData.Feed door een minder geschikte functie — Web.Contents. In elke les worden meer connectorfuncties geïmplementeerd, zoals paginering, detectie van metagegevens/schema's en het vouwen van query's naar de OData-querysyntaxis, totdat uw aangepaste connector dezelfde reeks mogelijkheden ondersteunt als OData.Feed.

Volgende stappen

TripPin deel 2: gegevensconnector voor een REST-service