Förbättra rapportprestanda med hjälp av filter
Rapporter som returnerar stora datamängder kan vara svårt att använda och kan orsaka prestandaproblem. Om du vill begränsa data som presenteras i en rapport genom att använda datafilter.
Förutom datafiltrering stöds av Reporting Services Microsoft Dynamics 365 Customer Engagement (on-premises) stöder data förfiltrering. Du kan använda data förfiltrering till:
Göra rapporter kontextkänsliga genom att begränsa omfattningen av en rapport som visar så relevanta data.
Hämta och visa resultatet snabbare eftersom endast så relevanta data som returneras.
Låt rapporten ska filtreras med hjälp av funktionen avancerad sökning.
Viktigt!
Rapport för tillfället frågor med hierarkiska operatorer som Under
kan inte användas med rapportfiltrering. När du försöker köra en rapport som använder en hierarkisk operator kan återges inte i rapporten.
Aktivera data före filtrering i Fetch-baserade rapporter
Endast automatisk filtrering före stöd för Fetch-baserade rapporter. En rapport kan ha flera datauppsättningar och flera FetchXML-frågor. En datauppsättning stöder en FetchXML-fråga. Om du vill aktivera förfiltrering för primära eller länkade entiteten i en Fetch-baserad rapport, måste du ange värdet för enableprefiltering
-parametern till "1" och ange namnet på en parameter i egenskapen prefilterparametername
. Parameternamnet ska börja med "CRM_" för att ange den som en dold parameter. Precis som med SQL Server-baserad rapport fungerar den här parametern som anges i FetchXML-fråga som en underfråga i FetchXML-fråga och underfrågan skapas med värdet som anges av användaren i området avancerad sökning när du kör en rapport.
Följande exempel visar hur du aktiverar förfiltrering för den primära entiteten i FetchXML-fråga.
<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>
På samma sätt kan du aktivera förfiltrering för länkade entiteten. Du kan också ange ett annat förfiltervillkor för den länkade entiteten i FetchXML-fråga som anger ett annat och unikt namn för parameternamn i
prefilterparametername
-egenskapen.Om du manuellt ändrar en definition för Fetch-baserad rapport med Rapportguiden eller SQL Server Data Tools för att aktivera förfiltrering för primära och länkade entiteter, bör du kontrollera att du:
<fetch distinct="false" mapping="logical"> <entity name="account" enableprefiltering="1" refilterparametername="CRM_FilteredAccount">
Skapa en motsvarande frågeparameter med samma namn som anges för
prefilterparametername
-egenskapen. Se till att parameternamnet börjar medCRM_
för att ange den som en dold parameter.<QueryParameters> <QueryParameter Name="CRM_FilteredAccount"> <Value>=Parameters!CRM_FilteredAccount.Value</Value> </QueryParameter>
Skapa en motsvarande rapportparameter med samma namn.
<ReportParameters> <ReportParameter Name="CRM_FilteredAccount"> <DataType>String</DataType> <Prompt>CRM Filtered Account</Prompt> </ReportParameter> </ReportParameters>
Aktivera förfiltrering av data i SQL-baserade rapporter (endast Dynamics 365 on-premises)
Du kan aktivera förfiltrering av data på två sätt i Microsoft Dynamics 365 SQL-baserade rapporter: automatisk och explicit.
Aktivera förfiltrering
Automatisk förfiltrering av data passar för enkla frågor. Om du vill aktivera automatisk dataförfiltrering för en rapport kan du använda alias för entitetstabeller i frågor. Det gör du med hjälp av ett aliasnamn som börjar CRMAF_.
I följande exempel visas till exempel två enkla frågor, med en som har ändrats för att aktivera förfiltrering för kontoentiteten.
Fråga utan förfiltrering.
SELECT <column1>, <column2>, <columnN>
FROM FilteredAccount;
När du aktiverar automatisk förfiltrering av data genom att använda CRMAF_
prefix, Microsoft Dynamics 365 ändrar frågan så att den inkluderar en parameter (till exempel P1) när den laddas upp till Dynamics 365, som visas i följande exempel.
Fråga med automatisk förfiltrering.
SELECT <column1>, <column2>, <columnN>
FROM FilteredAccount AS CRMAF_FilteredAccount;
Dynamics 365 skickar en fråga till P1-parametern beroende på hur rapporten filtreras. Med andra ord fungerar automatisk förfiltrering av data som en underfråga i den befintliga frågan.
Följande exempel illustrerar hur Dynamics 365 skickar frågor till parametern (P1) enligt olika filtreringskrav. I de här exemplen beror det på att du kör rapporten från området Rapporter i Dynamics 365 och använder alternativet för datafiltrering.
Exempel 1
Om du bara vill visa aktiva konton blir frågan följande:
SELECT <column1>, <column2>, <columnN>
FROM (SELECT FilteredAccount.* FROM FilteredAccount WHERE statecode = 0)
AS CRMAF_FilteredAccount
Exempel 2
Om du arbetar inom ett specifikt konto och kör rapporten blir frågan följande:
SELECT <column1>, <column2>, <columnN>
FROM (SELECT FilteredAccount.* FROM FilteredAccount WHERE AccountId = '<CurrentAccountId>')
AS CRMAF_FilteredAccount
Exempel 3
Om du har en lista med tre valda konton och väljer alternativet att köra rapporten för de valda posterna blir frågan följande:
SELECT <column1>, <column2>, <columnN>
FROM (SELECT FilteredAccount.* FROM FilteredAccount WHERE AccountId in ('<1stAccountId>', '<2ndAccountId>', '<3rdAccountId>')
AS CRMAF_FilteredAccount
När några entitetstabellnamn aliasas inkluderas användargränssnittet för Avancerad sökning automatiskt i den distribuerade rapporten när de körs från Dynamics 365.
För att alias ett enhetstabellnamn i Query Builder, högerklicka på varje tabell i rapporten, välj Egenskaper och anger sedan aliasvärdet i formuläret CRMAF_FilteredEntity, till exempel, CRMAF_FilteredAccount.
Begränsning för automatisk förfiltrering
När du aktiverar CRMAF_
automatisk förfiltrering med prefixet lägger Dynamics 365 till en parameter i frågan. Med en mer komplex fråga, till exempel en fråga som använder ETT-uttryck, kan det leda till oväntade resultat eftersom Dynamics 365 endast kan lägga till parametern i den första frågan.
Du kan till exempel överväga följande fråga som innehåller UNION-satser:
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'
När du överför rapporten kan Dynamics 365 endast filtrera den första frågan med hjälp av parametern. Detta leder till att filtreringen inte tillämpas på den andra frågan:
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'
I det föregående exemplet, medan du kör rapporten från Rapporter området i Dynamics 365 och väljer filtret som årlig intäkt större än 1 000 000, kommer Dynamics 365 att skicka en fråga till P1-parametern enligt följande:
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'
Detta innebär att frågan endast skulle returnera de konton i Florida med en årlig intäkt som är större än 1 000 000 USD och alla konton i Kalifornien, vilket inte är vad du tänkt dig. Du vill visa alla konton i Kalifornien och Kalifornien med en årlig omsättning som är större än $ 1 000 000.
Om du hämtar rapporten från Dynamics 365 och öppnar den i Microsoft Visual Studio visas den ursprungliga versionen av rapporten som du överfört till Dynamics 365. Om du hämtar rapporten direkt från Microsoft SQL Server Reporting Services kommer du att märka att Dynamics 365 har ändrat frågan men inte placerar parametern där du vill att den ska finnas.
För komplexa frågor som detta måste du använda explicit förfiltrering.
Explicit förfiltrering
För komplexa frågor som frågor med UNION-uttryck kan du behöva använda explicit förfiltrering. Till skillnad från automatisk förfiltrering skriver Dynamics 365 inte om rapportfrågan genom att skicka värden till parametrarna vid explicit förfiltrering när en sådan rapport överförs till Dynamics 365. Du måste uttryckligen göra de nödvändiga ändringarna i rapporten genom att lägga till förfiltreringsparametern i rapporten och sedan referera till parametern i frågan. Du kan sedan köra frågan med hjälp av dynamisk SQL.
När du använder dynamisk SQL aktiveras filtrering genom Avancerad sökning genom att skapa en dold parameter med namnet CRM_FilteredEntity
, till exempel, CRM_FilteredAccount
och genom att använda den här parametern i ett dynamiskt SQL-frågeuttryck. Den här parametern aktiverar filtrering på tabelldata från den angivna filtrerad vy.
I samma exempel som vi nämnt tidigare för att markera begränsningen för automatisk förfiltrering visas en fråga med automatisk förfiltrering som har ändrats till att använda explicit förfiltrering med hjälp av dynamisk SQL. När rapporten körs från området Rapporter i Dynamics 365 används filtret som en årlig omsättning som är större än 1 000 000.
Fråga med automatisk förfiltrering.
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'
Kommentar
De flesta av de SQL-baserade standardrapporterna för Dynamics 365 använder det explicita förfiltreringsalternativen.
Skicka filter i filtersammanfattning
En filtersammanfattning visar värdet för filtret som används när en rapport körs. I rapporter, visas den som ett textboxrapportobjekt i rapportsidhuvudet som innehåller textvärdet för filtret. När användaren kör rapporten visar rapportvisningsprogrammet knappen Redigera Filter. När du klickar på knappen blir det möjligt för användaren att definiera ett datafilter. Ett exempel på en filtersammanfattning finns i användarens översiktsrapport för Customer Engagement (on-premises).
Lägg till en sammanfattning av filter i en rapport genom att följa stegen nedan.
Skapa en dold strängparameter med namnet
CRM_FilterText
.Lägg till ett textbokrapportobjekt i rapporten och ange dess
Value
-egenskap enligt följande:
=Parameters!CRM_FilterText.Value.
När rapporten har körts visas värdet för
CRM_FilterText
-parametern anges av systemet till texten för det aktuella filtret.
Standardfilter
När du publicerar en rapport kan du ange ett standardfilter. För alla rapporter som har skapats med hjälp av rapportguiden, om du inte anger ett standardfilter, anges filtret automatiskt till alla poster för entiteten som har ändrats under de senaste 30 dagarna. Information om hur du definierar ett standardrapportfilter finns i publicera rapporter.
Se även
Guide för rapportering och analys
Dynamics 365 for Customer Engagement (on-premises) Att tänka på rapportering