Del via


Forbedre rapportydeevnen ved hjælp af filtre

Rapporter, der returnerer store datasæt, kan være svære at bruge og kan medføre ydeevneproblemer. Hvis du vil begrænse de data, der vises i en rapport, skal du bruge datafiltre.

Udover at datafiltrering understøttes af Reporting Services, understøtter Microsoft Dynamics 365 Customer Engagement (on-premises) forudfiltrering af data. Du kan bruge forudfiltrering af data til at:

  • Gøre rapporter kontekstfølsomme ved at indsnævre omfanget af en rapport, så de data, der returneres, er mere relevante.

  • Hente og få vist et resultatsæt hurtigere, fordi det kun er relevante data, der returneres.

  • Gøre det muligt at filtrere rapporten ved hjælp af funktionen Avanceret søgning.

Vigtigt

Rapportforespørgsler med hierarkiske operatorer, f.eks. operatoren Under, kan i øjeblikket ikke bruges med rapportfiltrering. Når du forsøger at køre en rapport, der bruger en hierarkisk operator, gengives rapporten ikke.

Aktivere forudfiltrering af data i Fetch-baserede rapporter

Fetch-baserede rapporter understøtter kun automatisk forudfiltrering af data. En rapport kan have flere datasæt og flere FetchXML forespørgsler. Ét datasæt understøtter én FetchXML forespørgsel. Hvis du vil aktivere forudfiltrering for det primære eller tilknyttede objekt i en Fetch-baseret rapport, skal du angive værdien af parameteren enableprefiltering til "1" og angive et parameternavn i egenskaben prefilterparametername. Parameternavnet skal starte med "CRM_" for at angive den som en skjult parameter. Som med den SQL Server-baserede rapport fungerer denne parameter, der er angivet i FetchXML forespørgslen, som en underforespørgsel i FetchXML forespørgslen, og underforespørgslen oprettes med den værdi, der er angivet af brugeren i området Avanceret søgning , mens der køres en rapport.

Følgende eksempel viser, hvordan du aktiverer forudfiltrering for det primære objekt i FetchXML forespørgslen.

<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å samme måde kan du aktivere forudfiltrering for det tilknyttede objekt. Du kan også angive en anden betingelse for forudfiltrering for det sammenkædede objekt i forespørgslen FetchXML ved at angive et andet og entydigt navn til parameternavnet i egenskaben prefilterparametername .

    Hvis du redigerer en Fetch-baseret rapportdefinition manuelt uden at bruge Guiden Rapport eller SQL Server Data Tools til at aktivere forudfiltrering for primære og tilknyttede objekter, skal du sørge for at:

    <fetch distinct="false" mapping="logical">  
    <entity name="account" enableprefiltering="1" refilterparametername="CRM_FilteredAccount">  
    
  2. Oprette en tilsvarende forespørgselsparameter med samme navn, som er angivet for egenskaben prefilterparametername. Sørge for, at parameternavnet starter med CRM_ for at angive den som en skjult parameter.

    <QueryParameters>  
    <QueryParameter Name="CRM_FilteredAccount">  
    <Value>=Parameters!CRM_FilteredAccount.Value</Value>  
    </QueryParameter>  
    
  3. Oprette en tilsvarende rapportparameter med det samme navn.

    <ReportParameters>  
    <ReportParameter Name="CRM_FilteredAccount">  
    <DataType>String</DataType>  
    <Prompt>CRM Filtered Account</Prompt>        
    </ReportParameter>  
    </ReportParameters>    
    

Aktivering af dataforudfiltrering i SQL-baserede rapporter (kun Dynamics 365 On-premises)

Du kan aktivere dataforudfiltrering på Microsoft Dynamics 365 SQL-baserede rapporter på to måder: automatisk og eksplicit.

Automatisk forudfiltrering

Automatisk dataforudfiltrering er velegnet til simple forespørgsler. Hvis du vil aktivere automatisk forudfiltrering af data i en rapport, kan du bruge aliasser for objekttabeller i forespørgsler. Det gør du ved hjælp af et aliasnavn, der starter med CRMAF_.

Følgende eksempler viser f.eks. to simple forespørgsler, hvor én er ændret for at aktivere forudfiltrering for objektet Konto.

Forespørgsel uden forudfiltrering.

   SELECT <column1>, <column2>, <columnN>
   FROM FilteredAccount; 

Når du aktiverer funktionaliteten til automatisk forudfiltrering af data ved hjælp af præfikset CRMAF_, ændrer Microsoft Dynamics 365 forespørgslen, så den inkluderer en parameter (f.eks. P1), når den overføres til Dynamics 365, som vist i følgende eksempler.

Forespørgsel med automatisk forudfiltrering.

   SELECT <column1>, <column2>, <columnN>
   FROM FilteredAccount AS CRMAF_FilteredAccount;

Dynamics 365 sender en forespørgsel til P1-parameteren, afhængigt af hvordan rapporten filtreres. Med andre ord fungerer automatisk dataforudfiltrering som en underforespørgsel i den eksisterende forespørgsel.

Følgende eksempler illustrerer, hvordan Dynamics 365 overfører forespørgsler til parameteren (P1) pr. forskellige filtreringskrav. I disse eksempler antages det, at du kører rapporten fra området Rapporter i Dynamics 365 og bruger indstillingen for datafiltrering.

Eksempel 1

Hvis du kun vil have vist aktive konti, vil den forespørgsel, der oprettes, være følgende:

SELECT <column1>, <column2>, <columnN>
FROM (SELECT FilteredAccount.* FROM FilteredAccount WHERE statecode = 0)
AS CRMAF_FilteredAccount

Eksempel 2

Hvis du arbejder i en bestemt konto og kører rapporten, vil den forespørgsel, der oprettes, være følgende:

SELECT <column1>, <column2>, <columnN>
FROM (SELECT FilteredAccount.* FROM FilteredAccount WHERE AccountId = '<CurrentAccountId>')
AS CRMAF_FilteredAccount

Eksempel 3

Hvis du har en liste over tre valgte konti, og du vælger at køre rapporten på de valgte poster, bliver forespørgslen som følger:

SELECT <column1>, <column2>, <columnN>
FROM  (SELECT FilteredAccount.* FROM FilteredAccount WHERE AccountId in ('<1stAccountId>', '<2ndAccountId>', '<3rdAccountId>') 
AS CRMAF_FilteredAccount

Når et objekttabelnavn er alias, medtages brugergrænsefladen Avanceret søgning automatisk i den udrullede rapport, når den køres fra Dynamics 365.

Hvis du vil bruge aliasnavnet på en objekttabel i Forespørgselsgenerator, skal du højreklikke på hver enkelt tabel i rapporten, vælge Egenskaber og derefter angive aliasværdien i formularen CRMAF_FilteredEntity, f.eks. CRMAF_FilteredAccount.

Begrænsning af automatisk forudfiltrering

Når du bruger præfikset CRMAF_ til at aktivere automatisk forudfiltrering, tilføjer Dynamics 365 en parameter i forespørgslen. Med en mere kompleks forespørgsel, f.eks. en forespørgsel, der bruger UNION-sætninger, kan det medføre uventede resultater, da Dynamics 365 måske kun føjer parameteren til den første forespørgsel.

Overvej f.eks. følgende forespørgsel, der indeholder UNION-sætninger:

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 uploader rapporten, filtrerer Dynamics 365 måske kun den første forespørgsel ved hjælp af parameteren. Det medfører, at filtreringen ikke anvendes på den anden forespørgsel:

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 foregående eksempel sender Dynamics 365 en forespørgsel til P1-parameteren på følgende måde, når du kører rapporten fra området Rapporter i Dynamics 365 og vælger filteret som årsomsætning, der er større end 1.000.000:

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'

Dette betyder, at forespørgslen kun returnerer konti i Florida med en årsomsætning, der er større end $ 1.000.000, og alle konti i Californien, hvilket ikke er dit mål. Du vil have vist alle firmaer i Florida og Californien med en årsomsætning, der er større end $ 1.000.000.

Hvis du henter rapporten fra Dynamics 365 og åbner den i Microsoft Visual Studio, kan du se den oprindelige version af den rapport, du har overført til Dynamics 365. Hvis du henter rapporten direkte fra Microsoft SQL Server Reporting Services, vil du se, at Dynamics 365 har ændret forespørgslen, men ikke har placeret parameteren, hvor du ville have den.

Hvis du har komplekse forespørgsler som denne, skal du bruge eksplicit forudfiltrering.

Eksplicit forudfiltrering

Hvis du har komplekse forespørgsler, der f.eks. bruger UNION-sætninger, skal du muligvis bruge eksplicit forudfiltrering. I modsætning til automatisk forudfiltrering overskriver Dynamics 365 ikke rapportforespørgslen ved at sende værdier til parametrene under eksplicit forudfiltrering, når en sådan rapport overføres til Dynamics 365. Du skal eksplicit foretage de nødvendige ændringer af rapporten ved at føje parameteren for forudfiltrering til rapporten og derefter referere til parameteren i forespørgslen. Du kan derefter udføre forespørgslen ved hjælp af dynamisk SQL.

Når du bruger dynamisk SQL, aktiveres filtreringen via Avanceret søgning ved at oprette en skjult parameter, der kaldes CRM_FilteredEntity, f.eks. CRM_FilteredAccount, og ved at bruge denne parameter i et dynamisk SQL-forespørgselsudtryk. Denne parameter aktiverer filtrering på de tabeldata, der er hentet fra den angivne filtrerede visning.

Hvis du tager det samme eksempel som beskrevet tidligere for at fremhæve begrænsningen af automatisk forudfiltrering, vises der i følgende tabel en forespørgsel med automatisk forudfiltrering, der er ændret til at bruge eksplicit forudfiltrering ved hjælp af dynamisk SQL. Det antages også, at filteret er anvendt som årsomsætning, der er større end 1.000.000, når rapporten køres fra området Rapporter i Dynamics 365.

Forespørgsel med automatisk forudfiltrering.

   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'

Bemærk

De fleste SQL-standardrapporter i Dynamics 365 bruger den eksplicitte indstilling for forudfiltrering.

Videresende filtre i filteroversigten

En filteroversigt viser værdien for filteret, der bruges, når en rapport køres. I rapporter vises den som et tekstfeltrapportelement i rapportens sidehoved, som indeholder filtertekstværdien. Når brugeren kører rapporten, vises knappen Rediger filter i Report Viewer. Når der klikkes på knappen, får brugeren mulighed for at definere et datafilter. Et eksempel på en filteroversigt findes i rapporten Brugeroversigt, der leveres sammen med Customer Engagement (on-premises).

Hvis du vil tilføje en filteroversigt i en rapport, skal du benytte nedenstående fremgangsmåde:

  1. Opret en skjult strengparameter, der kaldes CRM_FilterText.

  2. Tilføj et tekstfeltrapportelement i rapporten, og angiv egenskaben Value på følgende måde:
    =Parameters!CRM_FilterText.Value.

    Når rapporten køres, bliver værdien af parameteren CRM_FilterText angivet af systemet til teksten i det aktuelle filter.

Standardfiltre

Når du publicerer en rapport, kan du angive et standardfilter. For alle de rapporter, der er oprettet ved hjælp af Guiden Rapport, angives filteret automatisk til alle de poster for objektet, der er ændret inden for de seneste 30 dage, hvis du ikke angiver et standardfilter. Du finder oplysninger om proceduren til definition af et standardrapportfilter i Udgive rapporter.

Se også

Vejledning til rapportering og analyser
Dynamics 365 for Customer Engagement (on-premises) Overvejelser i forbindelse med rapportering