Optimera frågor för virtuell Dataverse-tabell

Gäller dessa Dynamics 365-appar:
Human Resources

Anteckning

Gäller från november 2020:

  • Common Data Service har bytt namn till Microsoft Dataverse. Mer information finns i Power Automate-bloggen.
  • En del termer i Microsoft Dataverse har uppdaterats. Till exempel heter enhet numera tabell och fält heter numera kolumn. Mer information finns i terminologiuppdateringar.

Det här avsnittet kommer snart uppdateras utifrån den senaste terminologin.

Utleverans

Översikt

När virtuella Dataverse-register används för att utveckla integreringar och andra dataanslutningar med Dynamics 365 Human Resources kan du komma att uppleva prestandaproblem med frågor mot de virtuella registren. Den långsamma frågekörningen kan uppstå mellan olika klienter eller gränssnitt. Du kan till exempel komma att uppleva problemet under följande omständigheter:

  • Vid förfrågan till ett virtuellt register via webb-API för Dataverse
  • När du skapar en Power App mot ett virtuellt register
  • När du skapar en Power BI-rapport i ett virtuellt register

Samtliga dessa gränssnitt kan förorsaka prestandaproblemet.

En orsak till långsam prestanda med virtuella Dataverse-register för Personal är kolumnerna för sekundärnycklar i det virtuella registret som relaterar till registrets navigeringsegenskaper. När navigeringsegenskaper skapas för ett virtuellt register läggs en kolumn för sekundärnycklar automatiskt till i registret i syfte att representera värdet på nyckeln för det relaterade virtuella registrets nyckelkolumn. Kolumnen _mshr_fk_person_id_value läggs exempelvis till i entiteten mshr_hcmworkerbaseentity med egenskapen för sekundärnyckel tillhörande entiteten mshr_dirpersonentity. På grund av hur värdena för dessa kolumner med sekundärnycklar bibehålls i ett register kan hämtningen av värden påverka prestandan för en fråga negativt mot det virtuella registret.

Potentiella symptom

Ett exempel där denna effekt kan komma att uppstå är i frågor som gäller enheten Arbetare (mshr_hcmworkerentity) eller Grundarbetare (mshr_hcmworkerbaseentity). Prestandaproblemet kan manifesteras på några olika sätt:

  • Långsam frågekörning: Frågan mot det virtuella registret kan returnera förväntat resultat, men det tar längre tid än förväntat att köra frågan fullständigt.

  • Tidsgräns för fråga: Frågan kan överskrida tidsgränsen och returnera följande fel: "En token erhölls i syfte att anropa Finance and Operations, men Finance and Operations returnerade ett fel av typen InternalServerError."

  • Oväntat fel: Frågan kan komma att returnera feltypen 400 med följande meddelande: "Ett oväntat fel har inträffat."

    Feltyp 400 på HcmWorkerBaseEntity.

  • Begränsning: Frågan kan komma att överanvända serverresurser och drabbas av begränsningar. I det här fallet returnerar frågan följande felmeddelande: "En token anskaffades i syfte att anropa Finance and Operations, men Finance and Operations returnerade feltypen 429." Mer information om begränsning i Personal finns i Frågor och avar om begränsningar.

    Feltyp 429 på HcmWorkerBaseEntity.

Lösning

Begränsa antalet kolumner som ingår i datafrågan

Tillsammans med virtuella register är en av de metoder som har bäst potential att förbättra frågeprestandan att begränsa antalet kolumner som valts i frågan. Den allmänna vägledningen när du optimerar frågeprestandan är att begränsa kolumnerna som returneras i frågan till enbart de egenskaper du behöver. Detta gäller särskilt för kolumner med sekundärnycklar i virtuella register. Om du inte behöver värdena i sekundärnyckelkolumnerna för din integration eller rapport, strukturerar du frågan så att den bara väljer de kolumner du behöver, exklusive sekundärnyckelkolumnerna.

Välja kolumner i en OData-fråga

När du frågar ett virtuellt register via webb-API:t för Dataverse kan du begränsa antalet kolumner som ingår i frågan genom att använda frågealternativet $select och definiera de kolumner som du behöver returnera resultat för. Du maximerar prestandan genom att utesluta kolumner med sekundärnycklar (de med prefixet mshr_FK) från frågan.

Följande fråga mot entiteten mshr_hcmworkerbaseentity kommer exempelvis endast att omfatta de kolumner som inkluderas i frågealternativsatsen $select, och alltså exkludera värden för sekundärnycklar. Detta ger betydande prestandaförbättringar jämfört med en fråga som omfattar alla registerkolumner.

GET [Organization URI]/api/data/v9.1/mshr_hcmworkerbaseentities?$select=mshr_name, mshr_firstname, mshr_gender, mshr_partynumber, mshr_phoneticfirstname, mshr_deceaseddate, mshr_nationalitycountryregion, mshr_allowrehire, mshr_electroniclocationid, mshr_middlename, mshr_knownas, mshr_professionaltitle, mshr_nativelanguageid, mshr_disabledverificationdate, mshr_personalsuffix, mshr_lastnameprefix, mshr_personbirthcity, mshr_personaltitle, mshr_phoneticlastname, mshr_namesequencedisplayas, mshr_personbirthcountryregion, mshr_isdisabled, mshr_birthdate, mshr_professionalsuffix, mshr_isfulltimestudent, mshr_education, mshr_namealias, mshr_phoneticmiddlename, mshr_personnelnumber, mshr_hcmworkerbaseentityid, mshr_motherbirthcountryregion, mshr_fatherbirthcountryregion, mshr_lastname, mshr_languageid, mshr_partytype, mshr_ethnicoriginid, mshr_citizenshipcountryregion HTTP/1.1
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0

Rekommendationen att begränsa antalet kolumner som har valts gäller även när du använder frågealternativet $expand för att expandera frågan till relaterade virtuella register med navigeringsegenskaper. I följande fråga ingår till exempel kolumner från entiteten mshr_hcmworkerbaseentity med expanderade kolumner från entiteten mshr_dirpersonentity. Notera att frågealternativet $select också ingår i frågealternativsatsen $expand.

GET [Organization URI]/api/data/v9.1/mshr_hcmworkerbaseentities?$select=mshr_name, mshr_firstname, mshr_gender, mshr_partynumber, mshr_phoneticfirstname, mshr_deceaseddate, mshr_nationalitycountryregion, mshr_allowrehire, mshr_electroniclocationid, mshr_middlename, mshr_knownas&$expand=mshr_FK_Person_id($select=mshr_addressstreet, mshr_addresscity, mshr_addressstate, mshr_addresszipcode) HTTP/1.1
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0

När du använder denna metod för hämtning av data med frågealternativet $select i frågealternatiovsatsen $expand visas vanligtvis större prestandaförbättringar när navigeringsegenskapen mellan enheterna är en fler-till-en-relation. Du kanske inte ser samma minskning i frågekörningstiden när du utökar en en-till-många-relation. Mer information om relationsdefinitioner för virtuella Dataverse-register finns i Registerrelationer.

Mer information om hur du använder alternativen $select och $expand för systemfrågeställningar i webb-API för Dataverse finns i Hämta relaterade entitetsposter med en frågeställning.

Välja kolumner i Power BI

Om du upplever något av ovannämnda tecken på sämre prestanda när du skapar en Power BI-rapport för ett virtuellt Dataverse-register kan du förbättra prestandan genom att exkludera kolumner med sekundärnycklar från de kolumner som valts för rapporten i registret. Om du till exempel använder Power BI Desktop för att skapa en rapport för entiteten mshr_hcmworkerbaseentity kan du använda följande steg för att välja de kolumner som du vill inkludera i rapportfrågeställningen.

  1. I Power BI Desktop väljer du Mer... i listrutan Hämta data för åtgärdsmenyfliken.

  2. I fönstret Hämta data anger du Common Data Service i sökrutan, väljer kopplingen Common Data Service och sedan Anslut.

  3. I fältet Server-URL tillhörande fönstret Common Data Service anger du URI för din Dataverse-miljlö och sedan OK.

    Ange URI för din Dataverse-miljö.

  4. Expandera noden Entiteter i navigeringsfönstret.

  5. I sökrutan anger du mshr_hcmworkerbaseentity och väljer sedan entiteten.

  6. Välj Transformera data.

  7. Välj Avancerad redigerare i Power Query-redigeraren.

  8. I fönstret Avancerad redigerare uppdaterar du frågeställningen enligt nedan och lägger till eller tar bort kolumner i matrisen efter behov.

    let
      Source = Cds.Entities("[Your Organization URI]", [ReorderColumns=null, UseFormattedValue=null]),
      entities = Source{[Group="entities"]}[Data],
      mshr_hcmworkerbaseentities = entities{[EntitySetName="mshr_hcmworkerbaseentities"]}[Data],
      selectedWorkerBaseEntityColumns=Table.SelectColumns(mshr_hcmworkerbaseentities,{"mshr_name","mshr_partynumber", "mshr_professionaltitle","mshr_birthdate"})
    in
      selectedWorkerBaseEntityColumns
    

    Uppdatera frågeställningen i Advanced Editor för Power Query-redigeraren.

  9. Välj Klar.

    Anteckning

    Om du tidigare fått ett felmeddelande av typen 429 från frågeställningen före uppdatering kanske du måste vänta in en period för förnyat försök innan du uppdaterar frågeställningen så att den kan slutföras.

  10. Klicka på Stäng & använd i åtgärdsmenyfliken för Power Query-redigeraren.

Du kan sedan börja skapa din Power BI-rapport baserat på kolumnerna som markerats i det virtuella registret.

Välja kolumner i Power Apps

Du kan förbättra frågeställningsprestandan för Power Apps baserat på virtuella Dataverse-register genom att - liknande för webb-API-frågeställningar för Dataverse och Power BI - exkludera kolumner tillhörande relaterade register från din app. Om några kolumner från ett relaterat register har inkluderats på en sida kommer den URL-adress för begäran som skapas för att hämta data att innehålla egenskaper för sekundärnyckel för det relaterade registret. Detta sänker prestandan genom att förorsaka ytterligare datasökningar på samma sätt som i exemplen i Välja kolumner i en OData-frågeställning ovan.

För att kringgå detta kan du validera att inga datafält från relaterade register har inkluderats i några som helst dataformulär i ditt Power App.

  1. Välj dataformuläret för vyn i trädvisningsfönstret.
  2. I fönstret Egenskaper väljer du Redigera i egenskapen Fält.
  3. Se till att inga markerade fält tillhör datakällans virtuella register i fönstret Data.

Om till exempel ett av datafälten som finns på en sida i programmet refererar till ett annat register, till exempel ThisItem.Worker.Name, där Worker är associerat register, kan prestandan försämras i samband med datahämtningen.

Du kan använda Power Apps-övervakaren i syfte att säkerställa att bara de kolumner du behöver inkluderas i frågeställningen med avsikt att hämta data till Power App. Du kan visa den URL som skapats för åtgärden getRows i syfte att se till att de kolumner du har valt för programmet blir de optimala för hämtning av data.

Använd Power Apps-övervakaren när du vill analysera åtgärden getData.

Filtrera datafrågeställningen

En annan metod för att förbättra körningsprestandan i samband med frågeställningar är att begränsa antalet poster som returneras i frågeställningsresultaten. Detta gör du genom att filtrera resultaten så att du bara får de poster du behöver.

Se Filtrera resultat för mer information om hur du filtrerar frågeställningsdata.

Begränsa sidstorleken för frågeställningen

Om du arbetar med stora datauppsättningar kan du dela upp frågeställningsresultaten på flera sidor genom att lägga till preferensrubriken odata.maxpagesize i dataförfrågningar.

Mer information om sidnumrering finns i Ange antalet entiteter som ska returneras på en sida.

Se även