Tabelweergave gebruiken om Query Folding te implementeren
Deze inhoud is nog in ontwikkeling. Vermeldingen kunnen gedeeltelijke inhoud bevatten.
Een van de krachtigste mogelijkheden van Power Query en de M-taal is Query Folding (ook wel aangeduid als querydelegering en push-down predicate). Met Query Folding kan de M-engine de transformaties die worden uitgedrukt in een M-query naar de bron pushen, in de systeemeigen querytaal van de bron, wat resulteert in efficiëntere gegevensverwerking.
Gegevensbronnen ondersteunen verschillende niveaus van querymogelijkheden. Om een consistente ervaring voor gegevenstransformatie te bieden, compenseert de M-engine (dat wil zeggen de lokale verwerking) voor transformaties die niet naar de bron kunnen worden verzonden. Het is de verantwoordelijkheid van de gegevensconnector om de mogelijkheden ervan aan de engine te rapporteren, de transformaties af te handelen die de connector kan verwerken, de juiste querysyntaxis te genereren en de M Engine het resterende werk te laten verwerken. Gegevensconnectoren kunnen gedrag voor het vouwen van query's implementeren via de Table.View functie .
Table.View wordt gebruikt om standaard-handlers voor querybewerkingen te overschrijven. De meeste handlers zijn optioneel, waardoor een bron vouwen kan implementeren voor de bewerkingen die worden ondersteund. Als een handler een queryexpressie tegenkomt die niet kan worden verwerkt, kan deze een foutmelding geven om de M-engine terug te laten vallen op de standaardbewerkings-handler.
In de onderstaande secties worden de handlers beschreven die worden ondersteund door Table.View .
Vereiste handlers
De volgende handlers zijn vereist voor elke implementatie van Table.View .
| Handler | Functiehandtekening | Samenvatting |
|---|---|---|
| Getrows | () as table |
(Vereist) Retourneert het tabelresultaat. Altijd de laatste handler met de naam . |
| GetType | () as type |
(Vereist) Retourneert de M type van de tabel die wordt verwacht van GetRows . |
Getrows
De GetRows handler retourneert het resultaat van uw gegevensbronfunctie (dat wil zeggen een tabel). Het is de laatste handler die wordt aangeroepen en moet rekening houden met alle query-statusgegevens die door de andere handlers zijn ingesteld.
GetType
De GetType handler retourneert het type M-tabel van het resultaat van de aanroep naar GetRows . In de meest eenvoudige implementatie roept deze handler Value.Type() aan voor het resultaat van GetRows .
Bronnen die het schema van het resultaat kunnen bepalen zonder de query te evalueren (door vaste metagegevens te gebruiken of een query uit te voeren op een service voor metagegevens/schema) zouden deze bewerkingen in deze handler uitvoeren.
Houd er rekening mee
Value.Type(GetRows())dat het retournerenGetRows()tweemaal tot gevolg heeft dat deze twee keer wordt aangeroepen. Als het type niet kan worden bepaald zonder aan teroepen, wordt het aanbevolen de resultaten op te slaanGetRows()in een gemeenschappelijke variabele. Zie het voorbeeld hieronder voor een voorbeeld.
Basis-handlers
De volgende handlers kunnen worden geïmplementeerd zonder M-waarden te verwerken en zijn over het algemeen eenvoudiger voor het implementeren RowExpression van een extensie.
| Handler | Functiehandtekening | Samenvatting |
|---|---|---|
| GetRowCount | () as number |
Retourneert een number . Wordt gebruikt als optimalisatie waarbij het aantal kan worden bepaald zonder een aanroep naar GetRows . |
| OnDistinct | (columns as list) |
Aangeroepen wanneer als resultaat van Table.Distinct . |
| OnRenameColumns | (renames as list) |
Aangeroepen bij het wijzigen van de naam van kolommen ( Table.RenameColumns ). |
| OnSelectColumns | (columns as list) |
Aangeroepen bij het selecteren van specifieke kolommen. |
| OnSkip | (count as number) |
Aangeroepen bij het gebruik Table.Skip van . |
| OnSort | (order as list) |
Aangeroepen wanneer tabel wordt gesorteerd ( Table.Sort ). |
| OnTake | (count as number) |
Aangeroepen bij het beperken van het aantal rijen dat wordt opgehaald ( Table.FirstN ). |
GetRowCount
Retourneert een getal. De standaard-handler voor de GetRowCount bewerking is om aan te roepen via Table.RowCount GetRows . Overschrijven deze handler als uw bron het totale aantal rijen kan berekenen zonder de query te evalueren.
OnDistinct
Ontvangt een lijst met kolomnamen. De handler moet ervoor zorgen dat rijen met dubbele waarden voor de opgegeven kolommen worden verwijderd (dat wil zeggen dat de resterende rijen verschillend zijn). Zie Table.Distinct.
OnRenameColumns
Ontvangt een lijst met lijsten, hetzelfde als de argumenten voor Table.RenameColumns . Elke interne lijst heeft twee leden: het eerste lid is de oude kolomnaam en het tweede lid text is de nieuwe kolomnaam.
OnSelectColumns
Ontvangt een lijst met kolomnamen die de gebruiker heeft geselecteerd. Zie Table.SelectColumns.
OnSkip
Ontvangt een getal dat het aantal rijen aangeeft dat moet worden overgeslagen uit de resultatenset. Zie Table.Skip.
OnSort
Ontvangt een lijst met records van het type:
type [ Name = text, Order = Int16.Type ]
Waarbij Name de naam van de kolom is en gelijk is aan of Order Order.Ascending Order.Descending . Zie Table.Sort.
OnTake
Ontvangt een getal dat het maximum aantal rijen aangeeft dat moet worden geretourneerd door GetRows . Zie Table.FirstN.
Expressie-handlers
Voor de volgende handlers moeten M-waarden worden RowExpression verwerkt.
| Handler | Functiehandtekening | Samenvatting |
|---|---|---|
| OnAddColumns | (constructors) |
Aangeroepen bij het toevoegen van een berekende kolom ( Table.AddColumn ). |
| OnGroup | (keys, aggregates) |
Aangeroepen voor verschillende aggregatietransformaties. |
| OnJoin | (joinSide, leftTable, rightTable, joinKeys, joinKind) |
Aangeroepen bij het uitvoeren van een join van twee tabellen. |
| OnSelectRows | (selector) |
Wordt aangeroepen bij het selecteren van rijen op basis van een expressie ( Table.SelectRows ). |
DirectQuery-handlers
De volgende handlers zijn vereist voor het inschakelen van Direct Query-mogelijkheden vanuit een extensie. Houd er rekening mee dat een extensie query folding kan implementeren zonder volledige Ondersteuning voor Direct Query te declareren. Direct Query-ondersteuning moet alleen worden ingeschakeld als het merendeel van de Table.View-handlers is geïmplementeerd.
| Handler | Functiehandtekening | Samenvatting |
|---|---|---|
| GetExpression | () as record |
|
| OnInvoke | (function, arguments, index) |
Aangeroepen om de mogelijkheden van Direct Query te bepalen. |