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>  
  1. 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">  
    
  2. Skapa en motsvarande frågeparameter med samma namn som anges för prefilterparametername-egenskapen. Se till att parameternamnet börjar med CRM_ för att ange den som en dold parameter.

    <QueryParameters>  
    <QueryParameter Name="CRM_FilteredAccount">  
    <Value>=Parameters!CRM_FilteredAccount.Value</Value>  
    </QueryParameter>  
    
  3. 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.

  1. Skapa en dold strängparameter med namnet CRM_FilterText.

  2. 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