Rapportprestaties verbeteren door filters te gebruiken
Rapporten die grote gegevenssets retourneren kunnen moeilijk zijn om te gebruiken en kunnen prestatieproblemen veroorzaken. Gebruik gegevensfilters om de gegevens te beperken die in a rapport worden weergegeven.
Naast het filteren van gegevens dat wordt ondersteund door Reporting Services, ondersteunt Microsoft Dynamics 365 Customer Engagement (on-premises) voorfilteren van gegevens. U kunt gegevens voorfilteren om:
Rapporten contextafhankelijk te maken door het bereik van een rapport te beperken om meer relevante gegevens te vinden.
Een resultatenreeks sneller op te halen en weer te geven omdat er slechts meer relevante gegevens zijn geretourneerd.
Sta het rapport toe te worden gefilterd met de functie Geavanceerd zoeken.
Belangrijk
Momenteel kunnen rapportquery's met hiërarchische operatoren, zoals de operator Under
, niet worden gebruikt met rapportfiltering. Wanneer u een rapport probeert uit te voeren dat een hiërarchische operator gebruikt, wordt het rapport niet weergegeven.
Voorfilteren van gegevens in op Fetch gebaseerde rapporten inschakelen
Op Fetch gebaseerde rapporten ondersteunen alleen automatisch voorfilteren van gegevens. Een rapport kan meerdere gegevenssets en meerdere FetchXML-querys hebben. Één gegevensreeks ondersteunt een FetchXML-query. Om vooraf filteren voor de primaire of gekoppelde entiteit in een op Fetch gebaseerd rapport in te schakelen, moet u de waarde van de parameter enableprefiltering
worden ingesteld op '1', en een parameternaam prefilterparametername
in de eigenschap worden opgegeven. De parameternaam moet beginnen met 'CRM_' om de verborgen als parameter op te geven. Net als met het op SQL Server gebaseerde rapport moet de parameter die in de FetchXML-query is opgegeven als subquery fungeren in de FetchXML-query en wordt de subquery opgebouwd met de waarde die door de gebruiker in het gebied Geavanceerd zoeken is opgegeven tijdens de uitvoering van een rapport.
Het volgende voorbeeld toont hoe u voorfilteren voor de primaire entiteit in de FetchXML-query kunt inschakelen.
<CommandText
<fetch distinct="false" mapping="logical">
<entity name="account" enableprefiltering="1" prefilterparametername="CRM_FilteredAccount">
<attribute name="name" />
<attribute name="accountid" />
</entity>
</fetch>
</CommandText>
<DataSourceName>CRM</DataSourceName>
U kunt zo ook voorfilteren voor de gekoppelde entiteit inschakelen. U kunt ook een andere voorwaarde voor voofilteren opgeven voor de gekoppelde entiteit in de FetchXML-query door een andere en unieke naam voor de parameternaam in de eigenschap
prefilterparametername
te specificeren.Als u handmatig een op Fetch gebaseerde rapportdefinitie wijzigt zonder de wizard Rapport of SQL Server Data Tools te gebruiken om voorfilteren voor primaire en gekoppelde entiteiten in te schakelen, moet u:
<fetch distinct="false" mapping="logical"> <entity name="account" enableprefiltering="1" refilterparametername="CRM_FilteredAccount">
Maak een overeenkomstige queryparameter met dezelfde naam als die voor de eigenschap is gespecificeerd
prefilterparametername
. Zorg dat de parameternaam begint metCRM_
om de verborgen parameter op te geven.<QueryParameters> <QueryParameter Name="CRM_FilteredAccount"> <Value>=Parameters!CRM_FilteredAccount.Value</Value> </QueryParameter>
Maak een overeenkomstige rapportparameter met dezelfde naam.
<ReportParameters> <ReportParameter Name="CRM_FilteredAccount"> <DataType>String</DataType> <Prompt>CRM Filtered Account</Prompt> </ReportParameter> </ReportParameters>
Voorfiltering van gegevens inschakelen in op SQL gebaseerde rapporten (alleen Dynamics 365 on-premises)
Er zijn twee manieren waarop u voorfiltering van gegevens kunt inschakelen in op SQL gebaseerde rapporten in Microsoft Dynamics 365: automatisch en expliciet.
Automatische voorfiltering
Automatische voorfiltering van gegevens is geschikt voor eenvoudige query´s. Als u automatische voorfiltering van gegevens in een rapport wilt inschakelen, kunt u aliassen gebruiken voor entiteitstabellen in query's. U doet dit door een aliasnaam te gebruiken die begint met CRMAF_.
In de volgende voorbeelden worden bijvoorbeeld twee eenvoudige query's weergegeven, waarvan er één is aangepast om voorfiltering in te schakelen voor de entiteit Account.
Query zonder voorfiltering.
SELECT <column1>, <column2>, <columnN>
FROM FilteredAccount;
Wanneer u de functie voor automatische voorfiltering van gegevens inschakelt met behulp van het voorvoegsel CRMAF_
, wordt de query met Microsoft Dynamics 365 gewijzigd om een parameter (bijvoorbeeld P1) op te nemen wanneer deze wordt geüpload naar Dynamics 365, zoals weergegeven in de volgende voorbeelden.
Query met automatische voorfiltering.
SELECT <column1>, <column2>, <columnN>
FROM FilteredAccount AS CRMAF_FilteredAccount;
Dynamics 365 geeft een query door aan de P1-parameter, afhankelijk van hoe het rapport wordt gefilterd. Met andere woorden: automatische voorfiltering van gegevens fungeert als een subquery binnen de bestaande query.
De volgende voorbeelden illustreren hoe Dynamics 365 query's doorgeeft aan de parameter (P1) volgens verschillende filtervereisten. In deze voorbeelden wordt aangenomen dat u het rapport uitvoert vanuit het gebied Rapporten in Dynamics 365 en dat u de optie voor gegevensfiltering gebruikt.
Voorbeeld 1
Als u alleen actieve accounts wilt bekijken, is de resulterende query als volgt:
SELECT <column1>, <column2>, <columnN>
FROM (SELECT FilteredAccount.* FROM FilteredAccount WHERE statecode = 0)
AS CRMAF_FilteredAccount
Voorbeeld 2
Als u zich binnen een specifiek account bevindt en het rapport uitvoert, is de resulterende query als volgt:
SELECT <column1>, <column2>, <columnN>
FROM (SELECT FilteredAccount.* FROM FilteredAccount WHERE AccountId = '<CurrentAccountId>')
AS CRMAF_FilteredAccount
Voorbeeld 3
Als u een lijst met drie geselecteerde accounts hebt en u kiest de optie om het rapport uit te voeren op de geselecteerde records, is de resulterende query als volgt:
SELECT <column1>, <column2>, <columnN>
FROM (SELECT FilteredAccount.* FROM FilteredAccount WHERE AccountId in ('<1stAccountId>', '<2ndAccountId>', '<3rdAccountId>')
AS CRMAF_FilteredAccount
Wanneer entiteitstabelnamen een alias hebben, wordt de gebruikersinterface Geavanceerd zoeken automatisch opgenomen in het geïmplementeerde rapport wanneer het wordt uitgevoerd vanuit Dynamics 365.
Als u de naam van een entiteitstabel in de queryopbouwfunctie een alias wilt geven, klikt u met de rechtermuisknop op elke tabel in uw rapport, selecteert u Eigenschappen en voert u vervolgens de aliaswaarde in het formulier CRMAF_FilteredEntity in, bijvoorbeeld CRMAF_FilteredAccount.
Beperking van automatische voorfiltering
Als u het voorvoegsel CRMAF_
gebruikt om automatische voorfiltering in te schakelen, voegt Dynamics 365 een parameter toe in de query. Bij een complexere query, zoals een query die gebruikmaakt van UNION-instructies, kan dit tot onverwachte resultaten leiden, omdat Dynamics 365 de parameter mogelijk alleen aan de eerste query toevoegt.
Kijk bijvoorbeeld naar de volgende query met UNION-instructies:
SELECT <column1>, <column2>, <columnN>
FROM FilteredAccount AS CRMAF_FilteredAccount
WHERE address1_stateorprovince = ‘FL'
UNION
SELECT <column1>, <column2>, <columnN>
FROM FilteredAccount AS CRMAF_FilteredAccount
WHERE address1_stateorprovince = 'CA'
Wanneer u het rapport uploadt, filtert Dynamics 365 mogelijk alleen de eerste query met behulp van de parameter. Dit leidt ertoe dat de filtering niet wordt toegepast op de tweede query:
SELECT <column1>, <column2>, <columnN>
FROM (@P1) AS CRMAF_FilteredAccount WHERE address1_stateorprovince = 'FL'
UNION
SELECT <column1>, <column2>, <columnN>
FROM FilteredAccount AS CRMAF_FilteredAccount
WHERE address1_stateorprovince = 'CA'
In het voorgaande voorbeeld geeft Dynamics 365 terwijl het rapport wordt uitgevoerd vanuit het gebied Rapporten in Dynamics 365 en het filter als jaarlijkse omzet groter dan 1.000.000 wordt gekozen, een query door aan de parameter P1:
SELECT <column1>, <column2>, <columnN>
FROM (SELECT FilteredAccount.* from FilteredAccount where AnnualRevenue > 1000000) AS CRMAF_FilteredAccount
WHERE address1_stateorprovince = 'FL'
UNION
SELECT <column1>, <column2>, <columnN>
FROM FilteredAccount AS CRMAF_FilteredAccount
WHERE address1_stateorprovince = 'CA'
Dit houdt in dat de query alleen die accounts in Florida retourneert die een jaarlijkse omzet van meer dan $1.000.000 hebben en alle accounts in Californië. Dit is niet wat u bedoelde. U wilde alle accounts in Florida en Californië weergeven met een jaaromzet groter dan $1.000.000.
Als u het rapport downloadt van Dynamics 365 en het opent in Microsoft Visual Studio, ziet u de oorspronkelijke versie van het rapport dat u naar Dynamics 365 hebt geüpload. Als u het rapport rechtstreeks downloadt van Microsoft SQL Server Reporting Services, ziet u dat Dynamics 365 de query heeft gewijzigd, maar de parameter niet heeft geplaatst waar u deze wilt hebben.
Voor dergelijke complexe query's moet u expliciete voorfiltering gebruiken.
Expliciete voorfiltering
Voor complexe query's, zoals query's met UNION-instructies, moet u mogelijk expliciete voorfiltering gebruiken. In tegenstelling tot automatische voorfiltering herschrijft Dynamics 365 de rapportquery niet door waarden door te geven aan de parameters tijdens expliciete voorfiltering wanneer een dergelijk rapport wordt geüpload naar Dynamics 365. U moet de vereiste wijzigingen expliciet in het rapport aanbrengen door de voorfilteringsparameter aan het rapport toe te voegen en vervolgens naar de parameter in de query te verwijzen. U kunt de query vervolgens uitvoeren met behulp van dynamische SQL.
Wanneer u dynamische SQL gebruikt, wordt filteren via Geavanceerd zoeken ingeschakeld door een verborgen parameter met de naam CRM_FilteredEntity
te maken, bijvoorbeeld CRM_FilteredAccount
, en door deze parameter te gebruiken in een dynamische SQL-queryexpressie. Met deze parameter kunt u filteren op de tabelgegevens die zijn verkregen van de opgegeven gefilterde weergave.
Uitgaande van hetzelfde eerder besproken voorbeeld om de beperking van automatische voorfiltering te benadrukken, toont de volgende tabel een query met automatische voorfiltering die is aangepast om expliciete voorfiltering te gebruiken met behulp van dynamische SQL. Er wordt ook vanuit gegaan dat tijdens het uitvoeren van het rapport via het gebied Rapporten in Dynamics 365, het filter is toegepast als jaarlijkse omzet hoger dan 1.000.000.
Query met automatische voorfiltering.
SELECT <column1>, <column2>, <columnN>
FROM FilteredAccount AS CRMAF_FilteredAccount
WHERE address1_stateorprovince = ‘FL'
UNION
SELECT <column1>, <column2>, <columnN>
FROM FilteredAccount AS CRMAF_FilteredAccount
WHERE address1_stateorprovince = 'CA'
Notitie
De meeste standaard op Dynamics 365 SQL gebaseerde rapporten gebruiken de optie van expliciete voorfiltering.
Filters doorgeven in het filteroverzicht
Een filtersamenvatting toont de waarde van het filter dat wordt gebruikt als een rapport wordt uitgevoerd. In rapporten wordt het weergegeven als een item van het tekstvakrapport in de rapportkoptekst die de waarde van de filtertekst bevat. Wanneer de gebruiker het rapport uitvoert, wordt in de rapportviewer een knop Filter bewerken weergegeven. Wanneer op de knop wordt geklikt, heeft de gebruiker de mogelijkheid om een gegevensfilter te bepalen. Een voorbeeld van een filtersamenvatting kan in het rapport Gebruikersoverzicht worden gevonden dat wordt meegeleverd met Customer Engagement (on-premises).
Als u een aan filteroverzicht aan een rapport wilt toevoegen, voer de volgende stappen uit:
Maak een verborgen tekenreeksparameter genoemd
CRM_FilterText
.Voeg een rapportitem van het tekstvak aan het rapport toe en stel de eigenschap
Value
als volgt in:
=Parameters!CRM_FilterText.Value.
Als het rapport wordt uitgevoerd, wordt de waarde van de parameter
CRM_FilterText
door het systeem ingesteld aan de tekst van het huidige filter.
Standaardfilters
Wanneer u een rapport publiceert, kunt u een standaardfilter instellen. Voor alle rapporten die met de rapportwizard zijn gemaakt, als u geen standaardfilter instelt, wordt de filter automatisch ingesteld naar alle records van de entiteit die in de afgelopen 30 dagen zijn gewijzigd. Voor de procedure om een standaardrapportfilter te bepalen, raadpleegt u Rapporten publiceren.
Zie ook
Handleiding voor rapporten en analyses
Overwegingen voor rapportage in Dynamics 365 for Customer Engagement (on-premises)