Varför körs min fråga flera gånger?
När du uppdaterar i Power Query görs mycket i bakgrunden för att försöka ge dig en smidig användarupplevelse och köra dina frågor effektivt och säkert. I vissa fall kan du dock märka att flera begäranden om datakällor utlöses av Power Query när data uppdateras. Ibland är dessa begäranden normala, men andra gånger kan de förhindras.
I följande avsnitt beskrivs några instanser när Power Query kan skicka flera begäranden till en datakälla.
Anslutningsappar kan göra flera anrop till en datakälla av olika skäl, till exempel metadata, cachelagring av resultat, sidnumrering och så vidare. Det här beteendet är normalt och är utformat för att fungera på det sättet.
Flera begäranden till samma datakälla kan inträffa om flera frågor hämtas från datakällan. Dessa begäranden kan inträffa även i ett fall där endast en fråga refererar till datakällan. Om en eller flera andra frågor refererar till den frågan utvärderas varje fråga, tillsammans med alla frågor som den är beroende av, oberoende av varandra.
I en skrivbordsmiljö körs en enda uppdatering av alla tabeller i datamodellen med en enda delad cache. Cachelagring kan minska sannolikheten för flera begäranden till samma datakälla, eftersom en fråga kan dra nytta av att samma begäran redan har körts och cachelagrats för en annan fråga. Även här kan du dock få flera begäranden eftersom:
- Datakällan cachelagras inte (till exempel lokala CSV-filer).
- Begäran till datakällan skiljer sig från en begäran som redan har cachelagrats på grund av nedströmsåtgärder (som kan ändra vikning).
- Cachen är för liten (vilket är relativt osannolikt).
- Frågorna körs ungefär samtidigt.
I en molnmiljö uppdateras varje fråga med sin egen separata cache. En fråga kan därför inte dra nytta av att samma begäran redan har cachelagrats för en annan fråga.
Ibland kan Power Querys vikningslager generera flera begäranden till en datakälla, baserat på de åtgärder som utförs nedströms. I sådana fall kan du undvika flera begäranden med hjälp Table.Buffer
av . Mer information: Buffera tabellen
I Power BI Desktop uppdaterar Analysis Services (AS) data med hjälp av två utvärderingar: en för att hämta schemat – vilket AS gör genom att be om noll rader – och en för att hämta data. Om databehandling av nollradsschemat kräver att data hämtas kan dubbletter av datakällans begäranden ske.
Datasekretess gör sina egna utvärderingar av varje fråga för att avgöra om frågorna är säkra att köra tillsammans. Den här utvärderingen kan ibland orsaka flera begäranden till en datakälla. Ett tecken på att en viss begäran kommer från datasekretessanalys är att den har ett "TOP 1000"-villkor (även om inte alla datakällor stöder ett sådant villkor). I allmänhet skulle inaktivering av datasekretess – förutsatt att det är acceptabelt – eliminera "TOP 1000" eller andra datasekretessrelaterade begäranden under uppdateringen. Mer information: Inaktivera brandväggen för datasekretess
På samma sätt som de utvärderingar som utförs för datasekretess laddar Power Query-redigeraren som standard ned en förhandsversion av de första 1 000 raderna i varje frågesteg. Genom att ladda ned dessa rader kan du se till att dataförhandsgranskningen är redo att visas så snart ett steg har valts, men det kan också orsaka duplicerade datakällans begäranden. Mer information: Inaktivera bakgrundsanalys
Olika bakgrundsaktiviteter i Power Query-redigeraren kan också utlösa extra datakällsbegäranden (till exempel frågedelegeringsanalys, kolumnprofilering, automatisk uppdatering av förhandsversionen på 1 000 rader som Power Query utlöser efter inläsning av resultat till Excel och så vidare).
Du kan isolera instanser av flera frågor genom att inaktivera specifika delar av frågeprocessen för att isolera var de duplicerade begärandena kommer från. Om du till exempel startar:
- I Power Query-redigeraren
- Med brandväggen inaktiverad
- Med bakgrundsanalys inaktiverad
- Med kolumnprofilering och andra bakgrundsaktiviteter inaktiverade
- [Valfritt] Göra en
Table.Buffer
I det här exemplet har du bara en enda M-utvärdering som inträffar när du uppdaterar förhandsversionen av Power Query-redigeraren. Om dubblettbegäranden inträffar nu är de på något sätt inbyggda i hur frågan skapas. Om inte, och om du aktiverar de tidigare beskrivna inställningarna en i taget, kan du se vid vilken tidpunkt de duplicerade begärandena börjar inträffa.
I följande avsnitt beskrivs de här stegen mer detaljerat.
Du behöver inte återansluta eller återskapa frågan. Öppna bara den fråga som du vill testa i Power Query-redigeraren. Du kan duplicera frågan i redigeraren om du inte vill bråka med den befintliga frågan.
Nästa steg är att inaktivera brandväggen för datasekretess. Det här steget förutsätter att du inte bryr dig om dataläckage mellan källor, så att inaktivera brandväggen för datasekretess kan göras med hjälp av inställningarna för Ignorera alltid sekretessnivå som beskrivs i alternativet Ange snabb kombination i Excel eller med hjälp av ignorera sekretessnivåerna och potentiellt förbättra prestandainställningen som beskrivs i Sekretessnivåer för Power BI Desktop i Power BI Desktop.
Se till att ångra det här steget innan du återupptar normal testning.
Nästa steg är att inaktivera bakgrundsanalys. Bakgrundsanalys styrs av inställningen Tillåt att data förhandsgranskning laddas ned i bakgrundsinställningen som beskrivs i Inaktivera Power Query-bakgrundsuppdatering för Power BI. Du kan också inaktivera det här alternativet i Excel.
Du kan också använda Table.Buffer
för att tvinga alla data att läsas, vilket imiterar vad som händer under en belastning. Så här använder Table.Buffer
du i Power Query-redigeraren:
I formelfältet för Power Query-redigeraren väljer du knappen fx för att lägga till ett nytt steg.
I formelfältet omger du namnet på föregående steg med Table.Buffer (<föregående stegnamn finns här>). Om det föregående steget till exempel fick namnet
Source
visar= Source
formelfältet . Redigera steget i formelfältet för att säga= Table.Buffer(Source)
.
Mer information: Table.Buffer
Gör en uppdatering i Power Query-redigeraren för att köra testet.