Share via


Door de gebruiker gedefinieerde aggregaties

Aggregaties in Power BI kunnen de queryprestaties verbeteren ten opzichte van grote semantische DirectQuery-modellen. Door aggregaties te gebruiken, slaat u gegevens op het geaggregeerde niveau in het geheugen op. Aggregaties in Power BI kunnen handmatig worden geconfigureerd in het gegevensmodel, zoals beschreven in dit artikel. Voor Premium-abonnementen wordt de functie Automatische aggregaties automatisch ingeschakeld in model Instellingen.

Aggregatietabellen maken

Afhankelijk van het gegevensbrontype kan een aggregatietabel worden gemaakt in de gegevensbron als een tabel of weergave, systeemeigen query. Voor de beste prestaties maakt u een aggregatietabel als een importtabel die is gemaakt in Power Query. Vervolgens gebruikt u het dialoogvenster Aggregaties beheren in Power BI Desktop om aggregaties te definiëren voor aggregatiekolommen met samenvattings-, detailtabel- en detailkolomeigenschappen.

Dimensionale gegevensbronnen, zoals datawarehouses en datamarts, kunnen op relaties gebaseerde aggregaties gebruiken. Op Hadoop gebaseerde big data-bronnen baseren vaak aggregaties op GroupBy-kolommen. In dit artikel worden typische verschillen in Power BI-gegevensmodellering beschreven voor elk type gegevensbron.

Aggregaties beheren

Klik in het deelvenster Gegevens van een Power BI Desktop-weergave met de rechtermuisknop op de aggregatietabel en selecteer Aggregaties beheren.

Schermopname van het selecteren van aggregaties beheren.

In het dialoogvenster Aggregaties beheren ziet u een rij voor elke kolom in de tabel, waar u het aggregatiegedrag kunt opgeven. In het volgende voorbeeld worden query's naar de tabel Verkoopdetail intern omgeleid naar de aggregatietabel Sales Agg .

Schermopname van het dialoogvenster Aggregaties beheren.

In dit op relaties gebaseerde aggregatievoorbeeld zijn de GroupBy-vermeldingen optioneel. Met uitzondering van DISTINCTCOUNT hebben ze geen invloed op het aggregatiegedrag en zijn ze voornamelijk geschikt voor leesbaarheid. Zonder de GroupBy-vermeldingen worden de aggregaties nog steeds geraakt op basis van de relaties. Dit verschilt van het big data-voorbeeld verderop in dit artikel, waarbij de GroupBy-vermeldingen vereist zijn.

Validaties

Het dialoogvenster Aggregaties beheren dwingt validaties af:

  • De detailkolom moet hetzelfde gegevenstype hebben als de aggregatiekolom, met uitzondering van de tabelrijen Aantal en Aantal, samenvattingsfuncties. Tabelrijen tellen en tellen zijn alleen beschikbaar voor kolommen met gehele getallen en vereisen geen overeenkomend gegevenstype.
  • Gekoppelde aggregaties voor drie of meer tabellen zijn niet toegestaan. Aggregaties in tabel A kunnen bijvoorbeeld niet verwijzen naar een tabel B met aggregaties die verwijzen naar een tabel C.
  • Dubbele aggregaties, waarbij twee vermeldingen dezelfde samenvattingsfunctie gebruiken en verwijzen naar dezelfde detailtabel en detailkolom, zijn niet toegestaan.
  • De detailtabel moet de DirectQuery-opslagmodus gebruiken, niet importeren.
  • Groeperen op een refererende-sleutelkolom die wordt gebruikt door een inactieve relatie en afhankelijk zijn van de functie USERELATIONSHIP voor aggregatietreffers, wordt niet ondersteund.
  • Aggregaties op basis van GroupBy-kolommen kunnen relaties tussen aggregatietabellen gebruiken, maar het ontwerpen van relaties tussen aggregatietabellen wordt niet ondersteund in Power BI Desktop. Indien nodig kunt u relaties tussen aggregatietabellen maken met behulp van een hulpprogramma van derden of een scriptoplossing via XML for Analysis-eindpunten (XMLA).

De meeste validaties worden afgedwongen door vervolgkeuzelijstwaarden uit te schakelen en verklarende tekst in de knopinfo weer te geven.

Validaties die worden weergegeven met knopinfo

Aggregatietabellen zijn verborgen

Gebruikers met alleen-lezentoegang tot het model kunnen geen query's uitvoeren op aggregatietabellen. Alleen-lezentoegang voorkomt beveiligingsproblemen bij gebruik met beveiliging op rijniveau (RLS). Consumenten en query's verwijzen naar de detailtabel, niet naar de aggregatietabel en hoeven niet te weten wat de aggregatietabel is.

Daarom zijn aggregatietabellen verborgen in de rapportweergave . Als de tabel nog niet is verborgen, wordt deze in het dialoogvenster Aggregaties beheren ingesteld op verborgen wanneer u Alles toepassen selecteert.

Opslagmodi

De aggregatiefunctie communiceert met opslagmodi op tabelniveau. Power BI-tabellen kunnen gebruikmaken van DirectQuery-, Import- of Dual-opslagmodi . DirectQuery voert rechtstreeks query's uit op de back-end, terwijl Gegevens in het geheugen worden opgeslagen in de cache en query's worden verzonden naar de gegevens in de cache. Alle Power BI-import- en niet-multidimensionale DirectQuery-gegevensbronnen kunnen werken met aggregaties.

Als u de opslagmodus van een geaggregeerde tabel wilt instellen op Importeren om query's sneller te maken, selecteert u de samengevoegde tabel in de modelweergave van Power BI Desktop. Vouw Geavanceerd uit in het deelvenster Eigenschappen, selecteer de selectie onder Opslagmodus en selecteer Importeren. Het wijzigen van importeren kan niet ongedaan worden.

Schermopname van het selecteren van de opslagmodus.

Zie Opslagmodus beheren in Power BI Desktop voor meer informatie over tabelopslagmodi.

Beveiliging op rijniveau voor aggregaties

Om correct te kunnen werken voor aggregaties, moeten RLS-expressies de aggregatietabel en de detailtabel filteren.

In het volgende voorbeeld werkt de RLS-expressie in de tabel Geografie voor aggregaties, omdat Geografie zich aan de filterzijde van relaties met de tabel Sales en de tabel Sales Agg bevindt. Query's die de aggregatietabel en query's hebben bereikt waarop geen RLS is toegepast.

Geslaagde beveiliging op rijniveau voor aggregaties

Een RLS-expressie in de tabel Product filtert alleen de detailtabel Sales , niet de geaggregeerde tabel Sales Agg . Omdat de aggregatietabel een andere weergave is van de gegevens in de detailtabel, is het onveilig om query's uit de aggregatietabel te beantwoorden als het RLS-filter niet kan worden toegepast. Het is niet raadzaam om alleen de detailtabel te filteren, omdat gebruikersquery's uit deze rol geen baat hebben bij aggregatietreffers.

Een RLS-expressie die alleen de aggregatietabel Sales Agg filtert en niet de detailtabel Sales is niet toegestaan.

RLS voor aggregatietabel is alleen niet toegestaan

Voor aggregaties op basis van GroupBy-kolommen kan een RLS-expressie die op de detailtabel wordt toegepast, worden gebruikt om de aggregatietabel te filteren, omdat alle GroupBy-kolommen in de aggregatietabel worden gedekt door de detailtabel. Aan de andere kant kan een RLS-filter op de aggregatietabel niet worden toegepast op de detailtabel, dus is dit niet toegestaan.

Aggregatie op basis van relaties

Dimensionale modellen maken doorgaans gebruik van aggregaties op basis van relaties. Power BI-modellen van datawarehouses en datamarts lijken op ster-/sneeuwvlokschema's, met relaties tussen dimensietabellen en feitentabellen.

In het volgende voorbeeld haalt het model gegevens op uit één gegevensbron. Tabellen maken gebruik van de DirectQuery-opslagmodus. De feitentabel Sales bevat miljarden rijen. Als u de opslagmodus van Verkoop instelt op Importeren voor opslaan in cache, verbruikt dit aanzienlijke geheugen- en resourcesoverhead.

Detailtabellen in een model

Maak in plaats daarvan de aggregatietabel Sales Agg . In de tabel Sales Agg is het aantal rijen gelijk aan de som van SalesAmount gegroepeerd op CustomerKey, DateKey en ProductSubcategoryKey. De tabel Sales Agg heeft een hogere granulariteit dan Sales, dus in plaats van miljarden kan deze miljoenen rijen bevatten, die gemakkelijker te beheren zijn.

Als de volgende dimensietabellen het meest worden gebruikt voor de query's met een hoge bedrijfswaarde, kunnen ze Sales Agg filteren met behulp van een-op-veel- of veel-op-een-relaties.

  • Geografie
  • Customer
  • Datum
  • Productsubcategorie
  • Productcategorie

In de volgende afbeelding ziet u dit model.

Aggregatietabel in een model

In de volgende tabel ziet u de aggregaties voor de tabel Sales Agg .

Aggregaties voor de tabel Sales Agg

Notitie

De tabel Sales Agg , zoals elke tabel, heeft de flexibiliteit om op verschillende manieren te worden geladen. De aggregatie kan worden uitgevoerd in de brondatabase met ETL/ELT-processen of met de M-expressie voor de tabel. De samengevoegde tabel kan de opslagmodus Importeren gebruiken, met of zonder incrementeel vernieuwen voor semantische modellen, of kan DirectQuery gebruiken en worden geoptimaliseerd voor snelle query's met columnstore-indexen. Dankzij deze flexibiliteit kunnen architecturen met gelijke taakverdeling querybelastingen verspreiden om knelpunten te voorkomen.

Als u de opslagmodus van de geaggregeerde tabel Sales Agg wijzigt in Import , wordt een dialoogvenster geopend waarin staat dat de gerelateerde dimensietabellen kunnen worden ingesteld op opslagmodus Dual.

Dialoogvenster Opslagmodus

Als u de gerelateerde dimensietabellen instelt op Dual, kunnen ze fungeren als Importeren of DirectQuery, afhankelijk van de subquery. In het voorbeeld:

  • Query's die metrische gegevens uit de tabel Sales Agg in de importmodus aggregeren en groeperen op kenmerk(en) uit de gerelateerde Dual-tabellen, kunnen worden geretourneerd vanuit de cache in het geheugen.
  • Query's die metrische gegevens uit de tabel DirectQuery Sales aggregeren en groeperen op kenmerk(en) uit de gerelateerde Dual-tabellen, kunnen worden geretourneerd in de DirectQuery-modus. De querylogica, inclusief de GroupBy-bewerking, wordt doorgegeven aan de brondatabase.

Zie Opslagmodus beheren in Power BI Desktop voor meer informatie over de dual-opslagmodus.

Reguliere versus beperkte relaties

Aggregatietreffers op basis van relaties vereisen reguliere relaties.

Reguliere relaties omvatten de volgende combinaties van opslagmodus, waarbij beide tabellen afkomstig zijn van één bron:

Tabel aan de vele zijden Tabel aan de 1 kant
Dual Dual
Importeren Importeren of dual
DirectQuery DirectQuery of Dual

Het enige geval waarin een cross-source-relatie wordt beschouwd als normaal, is als beide tabellen zijn ingesteld op Importeren. Veel-op-veel-relaties worden altijd als beperkt beschouwd.

Zie Aggregaties op basis van GroupBy-kolommen voor aggregatietreffers die niet afhankelijk zijn van relaties.

Voorbeelden van aggregatiequery's op basis van relaties

De volgende query raakt de aggregatie, omdat kolommen in de tabel Date de granulariteit hebben die de aggregatie kan raken. De kolom SalesAmount maakt gebruik van de aggregatie Sum .

Geslaagde aggregatiequery op basis van relaties

De volgende query raakt de aggregatie niet. Ondanks het aanvragen van de som van SalesAmount, voert de query een GroupBy-bewerking uit op een kolom in de tabel Product , die niet bij de granulariteit ligt die de aggregatie kan raken. Als u de relaties in het model bekijkt, kan een productsubcategorie meerdere productrijen hebben. De query zou niet kunnen bepalen welk product moet worden samengevoegd. In dit geval wordt de query teruggezet naar DirectQuery en wordt een SQL-query naar de gegevensbron verzonden.

Query die de aggregatie niet kan gebruiken

Aggregaties zijn niet alleen bedoeld voor eenvoudige berekeningen die een eenvoudige som uitvoeren. Complexe berekeningen kunnen ook voordeel hebben. Conceptueel wordt een complexe berekening onderverdeeld in subquery's voor elke SOM, MIN, MAX en COUNT. Elke subquery wordt geëvalueerd om te bepalen of deze de aggregatie kan raken. Deze logica geldt niet in alle gevallen vanwege optimalisatie van queryplannen, maar in het algemeen moet deze van toepassing zijn. In het volgende voorbeeld wordt de aggregatie bereikt:

Complexe aggregatiequery

De functie COUNTROWS kan profiteren van aggregaties. De volgende query raakt de aggregatie omdat er een aggregatie aantal tabelrijen is gedefinieerd voor de tabel Sales .

COUNTROWS-aggregatiequery

De functie AVERAGE kan profiteren van aggregaties. De volgende query raakt de aggregatie omdat AVERAGE intern wordt gevouwen tot een SOM gedeeld door een COUNT. Omdat de kolom Prijs per eenheid aggregaties heeft gedefinieerd voor zowel SUM als COUNT, wordt de aggregatie bereikt.

GEMIDDELDE aggregatiequery

In sommige gevallen kan de functie DISTINCTCOUNT profiteren van aggregaties. De volgende query raakt de aggregatie omdat er een GroupBy-vermelding is voor CustomerKey, die de uniekheid van CustomerKey in de aggregatietabel behoudt. Deze techniek bereikt mogelijk nog steeds de prestatiedrempel, waarbij meer dan twee tot vijf miljoen afzonderlijke waarden van invloed kunnen zijn op de queryprestaties. Het kan echter handig zijn in scenario's waarin er miljarden rijen in de detailtabel staan, maar twee tot vijf miljoen afzonderlijke waarden in de kolom. In dit geval kan DISTINCTCOUNT sneller presteren dan het scannen van de tabel met miljarden rijen, zelfs als deze in het cachegeheugen zijn opgeslagen.

Aggregatiequery DISTINCTCOUNT

Time intelligence-functies (Data Analysis Expressions) (DAX) zijn aggregatiebewust. De volgende query raakt de aggregatie omdat de functie DATESYTD een tabel met CalendarDay-waarden genereert en de aggregatietabel een granulariteit heeft die wordt gedekt door kolommen in de tabel Datum . Dit is een voorbeeld van een tabelwaardefilter voor de functie CALCULATE, die kan werken met aggregaties.

SUMMARIZECOLUMNS-aggregatiequery

Aggregatie op basis van GroupBy-kolommen

Op Hadoop gebaseerde big data-modellen hebben verschillende kenmerken dan dimensionale modellen. Om samenvoegingen tussen grote tabellen te voorkomen, gebruiken big data-modellen vaak geen relaties, maar denormaliseren dimensiekenmerken voor feitentabellen. U kunt dergelijke big data-modellen ontgrendelen voor interactieve analyse met behulp van aggregaties op basis van GroupBy-kolommen.

De volgende tabel bevat de numerieke kolom Movement die moet worden samengevoegd. Alle andere kolommen zijn kenmerken om op te groeperen. De tabel bevat IoT-gegevens en een groot aantal rijen. De opslagmodus is DirectQuery. Query's op de gegevensbron die worden geaggregeerd in het hele model is traag vanwege het enorme volume.

Een IoT-tabel

Als u interactieve analyses voor dit model wilt inschakelen, kunt u een aggregatietabel toevoegen die wordt gegroepeerd op de meeste kenmerken, maar de kenmerken met een hoge kardinaliteit, zoals lengtegraad en breedtegraad, uitsluiten. Dit vermindert het aantal rijen aanzienlijk en is klein genoeg om comfortabel in een in-memory cache te passen.

Tabel Driver Activity Agg

U definieert de aggregatietoewijzingen voor de tabel Driver Activity Agg in het dialoogvenster Aggregaties beheren.

Dialoogvenster Aggregaties beheren voor de tabel Driver Activity Agg

In aggregaties op basis van GroupBy-kolommen zijn de GroupBy-vermeldingen niet optioneel. Zonder deze worden de aggregaties niet geraakt. Dit verschilt van het gebruik van aggregaties op basis van relaties, waarbij de GroupBy-vermeldingen optioneel zijn.

In de volgende tabel ziet u de aggregaties voor de tabel Driver Activity Agg .

Aggregatiestabel driver activity Agg

U kunt de opslagmodus van de geaggregeerde tabel Driver Activity Agg instellen op Importeren.

Voorbeeld van aggregatiequery GroupBy

De volgende query raakt de aggregatie, omdat de kolom Activiteitsdatum wordt gedekt door de aggregatietabel. De functie COUNTROWS maakt gebruik van de aggregatie van tabelrijen geteld.

Geslaagde GroupBy-aggregatiequery

Met name voor modellen die filterkenmerken in feitentabellen bevatten, is het een goed idee om aggregaties voor tabelrijen tellen te gebruiken. Power BI kan query's verzenden naar het model met behulp van COUNTROWS in gevallen waarin dit niet expliciet door de gebruiker wordt aangevraagd. In het filterdialoogvenster ziet u bijvoorbeeld het aantal rijen voor elke waarde.

Dialoogvenster Filter

Gecombineerde aggregatietechnieken

U kunt de relaties en groupBy-kolomtechnieken voor aggregaties combineren. Aggregaties op basis van relaties kunnen vereisen dat de gedenormaliseerde dimensietabellen worden gesplitst in meerdere tabellen. Als dit kostbaar of onpraktisch is voor bepaalde dimensietabellen, kunt u de benodigde kenmerken in de aggregatietabel repliceren voor deze dimensies en relaties voor anderen gebruiken.

Het volgende model repliceert bijvoorbeeld Month, Quarter, Semester en Year in de tabel Sales Agg . Er is geen relatie tussen Sales Agg en de tabel Date , maar er zijn relaties met klant - en productsubcategorie. De opslagmodus van Sales Agg is Importeren.

Gecombineerde aggregatietechnieken

In de volgende tabel ziet u de vermeldingen die zijn ingesteld in het dialoogvenster Aggregaties beheren voor de tabel Sales Agg . De GroupBy-vermeldingen waarbij Datum de detailtabel is, zijn verplicht om aggregaties te bereiken voor query's die worden gegroepeerd op de datumkenmerken . Net als in het vorige voorbeeld hebben de GroupBy-vermeldingen voor CustomerKey en ProductSubcategoryKey geen invloed op aggregatietreffers, met uitzondering van DISTINCTCOUNT, vanwege de aanwezigheid van relaties.

Vermeldingen voor de tabel Sales Agg-aggregaties

Voorbeelden van gecombineerde aggregatiequery's

De volgende query raakt de aggregatie, omdat de aggregatietabel CalendarMonth omvat en CategoryName toegankelijk is via een-op-veel-relaties. SalesAmount maakt gebruik van de SOM-aggregatie .

Queryvoorbeeld dat de aggregatie raakt

De volgende query raakt de aggregatie niet, omdat de aggregatietabel geen betrekking heeft op CalendarDay.

Schermopname van de tekst van een query met CalendarDay.

De volgende time intelligence-query raakt de aggregatie niet, omdat de functie DATESYTD een tabel met CalendarDay-waarden genereert en de aggregatietabel geen betrekking heeft op CalendarDay.

Schermopname van tekst van een query met de functie DATESYTD.

Aggregatieprioriteit

Met aggregatieprioriteit kunnen meerdere aggregatietabellen worden overwogen door één subquery.

Het volgende voorbeeld is een samengesteld model met meerdere bronnen:

  • De DirectQuery-tabel Driver Activity bevat meer dan een biljoen rijen ioT-gegevens die afkomstig zijn van een big data-systeem. Het biedt drillthrough-query's om afzonderlijke IoT-metingen weer te geven in gecontroleerde filtercontexten.
  • De tabel Driver Activity Agg is een tussenliggende aggregatietabel in de DirectQuery-modus. Het bevat meer dan een miljard rijen in Azure Synapse Analytics (voorheen SQL Data Warehouse) en is geoptimaliseerd voor de bron met behulp van columnstore-indexen.
  • De tabel Driver Activity Agg2 Import heeft een hoge granulariteit, omdat de group-by-kenmerken weinig en lage kardinaliteit zijn. Het aantal rijen kan zo laag zijn als duizenden, zodat het gemakkelijk in een cache in het geheugen past. Deze kenmerken worden gebruikt door een leidinggevend dashboard met een hoog profiel, zodat query's die ernaar verwijzen, zo snel mogelijk moeten zijn.

Notitie

DirectQuery-aggregatietabellen die gebruikmaken van een andere gegevensbron uit de detailtabel, worden alleen ondersteund als de aggregatietabel afkomstig is van een SQL Server-, Azure SQL- of Azure Synapse Analytics-bron (voorheen SQL Data Warehouse).

De geheugenvoetafdruk van dit model is relatief klein, maar het ontgrendelt een enorm model. Het vertegenwoordigt een evenwichtige architectuur omdat de querybelasting wordt verdeeld over onderdelen van de architectuur, waarbij deze worden gebruikt op basis van hun sterke punten.

Tabellen voor een model met een kleine footprint waarmee een groot model wordt ontgrendeld

Het dialoogvenster Beheerde aggregaties voor Driver Activity Agg2 stelt het veld Prioriteit in op 10, wat hoger is dan voor Driver Activity Agg. De hogere prioriteitsinstelling betekent dat query's die gebruikmaken van aggregaties eerst Driver Activity Agg2 overwegen. Subquery's die niet de granulariteit hebben die kunnen worden beantwoord door Driver Activity Agg2, kunnen in plaats daarvan Driver Activity Agg overwegen. Detailquery's die niet kunnen worden beantwoord door een van beide aggregatietabellen, kunnen rechtstreeks naar Driver Activity worden verzonden.

De tabel die is opgegeven in de kolom Detailtabel is Driver Activity, niet Driver Activity Agg, omdat gekoppelde aggregaties niet zijn toegestaan.

Schermopname van het dialoogvenster Aggregaties beheren met Prioriteit gemarkeerd.

In de volgende tabel ziet u de aggregaties voor de tabel Driver Activity Agg2 .

Tabel met aggregaties van stuurprogrammaactiviteit Agg2

Detecteren of query's aggregaties raken of missen

SQL Profiler kan detecteren of query's worden geretourneerd vanuit de cacheopslagengine in het geheugen of worden gepusht naar de gegevensbron door DirectQuery. U kunt hetzelfde proces gebruiken om te detecteren of aggregaties worden geraakt. Zie Query's die de cache raken of missen voor meer informatie.

SQL Profiler biedt ook de Query Processing\Aggregate Table Rewrite Query uitgebreide gebeurtenis.

In het volgende JSON-fragment ziet u een voorbeeld van de uitvoer van de gebeurtenis wanneer een aggregatie wordt gebruikt.

  • matchingResult laat zien dat de subquery een aggregatie heeft gebruikt.
  • dataRequest toont de GroupBy-kolom(en) en geaggregeerde kolom(en) die door de subquery worden gebruikt.
  • toewijzing toont de kolommen in de aggregatietabel waaraan is toegewezen.

Uitvoer van een gebeurtenis wanneer aggregatie wordt gebruikt

Caches gesynchroniseerd houden

Aggregaties die DirectQuery-, Import- en/of Dual-opslagmodi combineren, kunnen verschillende gegevens retourneren, tenzij de cache in het geheugen synchroon blijft met de brongegevens. Query-uitvoering probeert bijvoorbeeld geen gegevensproblemen te maskeren door DirectQuery-resultaten te filteren op overeenkomende waarden in de cache. Er zijn vastgestelde technieken voor het afhandelen van dergelijke problemen bij de bron, indien nodig. Prestatieoptimalisaties moeten alleen worden gebruikt op manieren die uw vermogen om te voldoen aan bedrijfsvereisten niet in gevaar kunnen komen. Het is uw verantwoordelijkheid om uw gegevensstromen te kennen en dienovereenkomstig te ontwerpen.

Overwegingen en beperkingen

  • Aggregaties bieden geen ondersteuning voor dynamische M-queryparameters.

  • Vanaf augustus 2022 negeert Power BI aggregatietabellen in de importmodus met gegevensbronnen met eenmalige aanmelding (SSO) vanwege mogelijke beveiligingsrisico's. Om optimale queryprestaties met aggregaties te garanderen, is het raadzaam eenmalige aanmelding voor deze gegevensbronnen uit te schakelen.

Community

Power BI heeft een levendige community waar MVP's, BI-professionals en peers expertise delen in discussiegroepen, video's, blogs en meer. Als u meer wilt weten over aggregaties, bekijkt u deze aanvullende resources: