Del via


Forbedre rapportydeevnen ved hjælp af filtre

 

Udgivet: januar 2017

Gælder for: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

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

Dette emne indeholder

Aktivere forudfiltrering af data i Fetch-baserede rapporter

Aktivering af data før filtrering i SQL-baserede rapporter (kun Dynamics 365 til det lokale miljø)

Videresende filtre i filteroversigten

Standardfiltre

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 Microsoft SQL Server-baserede rapport, fungerer denne parameter, som angives i FetchXML-forespørgslen, som en underforespørgsel i FetchXML-forespørgslen, og underforespørgslen er konstrueret med den værdi, som brugeren har angivet i området Avanceret søgning, mens rapporten blev kørt.

I følgende eksempel vises, 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>

På samme måde kan du aktivere forudfiltrering for det tilknyttede objekt. Du kan også angive en anden forudfiltreringsbetingelse for det tilknyttede objekt i FetchXML-forespørgslen ved at angive et andet, entydigt navn for parameteren i egenskaben prefilterparametername.

Hvis du redigerer en Fetch-baseret rapportdefinition manuelt uden at bruge Guiden Rapport i Microsoft Dynamics 365-webprogrammet eller SQL Server-dataværktøjer for at aktivere forudfiltrering for primære og tilknyttede objekter, skal du sørge for at:

  1. På samme måde kan du aktivere forudfiltrering for det tilknyttede objekt. Du kan også angive en anden forudfiltreringsbetingelse for det tilknyttede objekt i FetchXML-forespørgslen ved at angive et andet, entydigt navn for parameteren i egenskaben prefilterparametername.

    Hvis du redigerer en Fetch-baseret rapportdefinition manuelt uden at bruge Guiden Rapport i Microsoft Dynamics 365-webprogrammet eller SQL Server-dataværktøjer for 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" prefilterparametername="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 data før filtrering i SQL-baserede rapporter (kun Dynamics 365 til det lokale miljø)

Der er to måder, hvorpå du kan aktivere forudfiltrering af data på SQL-baserede Microsoft Dynamics 365SQL-baseret rapporter: automatisk og eksplicit.

Automatisk forudfiltrering

Automatisk forudfiltrering af data er velegnet for enkle forespørgsler. Hvis du vil aktivere automatisk data før filtrering i en rapport, kan du bruge aliaser for tabeller i forespørgsler. Du kan gøre dette ved hjælp af et aliasnavn, der begynder med CRMAF_.

Følgende tabel viser f.eks. en enkel forespørgsel, der er ændret, så forudfiltrering er aktiveret på objektet Account.

Forespørgsel uden forudfiltrering

Ændret forespørgsel med automatisk forudfiltrering aktiveret

```sql SELECT

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

Forespørgsel med automatisk forudfiltrering

Ændret af Microsoft Dynamics 365

```sql SELECT

Microsoft Dynamics 365 vil sende en forespørgsel til parameteren P1, afhængig af hvordan rapporten bliver filtreret. Med andre ord fungerer automatisk forudfiltrering af data som en underforespørgsel i den eksisterende forespørgsel.

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

Eksempel 1: Hvis du kun vil have vist aktive firmaer, vil den resulterende forespørgsel se sådan ud:

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

Eksempel 2: Hvis du er i et bestemt firma og kører rapporten, vil den resulterende forespørgsel se sådan ud:

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

Eksempel 3: Hvis du ser på en liste over tre udvalgte firmaer, og du vælger indstillingen for at køre rapporten i forhold til de valgte poster, vil den resulterende forespørgsel se sådan ud:

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

Hvis der anvendes aliaser for objekttabelnavne, er brugergrænsefladen til avanceret søgning automatisk inkluderet i den udrullede rapport, når den køres fra Microsoft Dynamics 365.

Hvis du vil anvende et alias for et objekttabelnavn i Forespørgselsgenerator, skal du højreklikke på hver 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 Microsoft Dynamics 365 en parameter i forespørgslen. Med en mere avanceret forespørgsel, f.eks en forespørgsel, der bruger UNION-sætninger, kan dette medføre uventede resultater, fordi Microsoft Dynamics 365 måske kun føjer parameteren til den første forespørgsel.

Du kan f.eks. overveje følgende forespørgsel, som 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 har overført rapporten, filtrerer Microsoft Dynamics 365 måske kun den første forespørgsel ved hjælp af parameteren. Dette medfører, at filtreringen ikke bliver anvendt for 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'

Mens du kører rapporten fra området Rapporter i Microsoft Dynamics 365 og vælger filteret årsomsætning større end 1.000.000, sender Microsoft Dynamics 365 i foregående eksempel en forespørgsel til parameteren P1 på følgende måde:

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 indikerer, at forespørgslen kun vil returnere de firmaer i Florida, der har en årlig omsætning på over kr. 1.000.000 og alle firmaer i Californien, hvilket ikke er, hvad du forventede. Du ønskede at få vist alle firmaerne i Florida og Californien med årsomsætning på over kr. 1.000.000.

Hvis du henter rapporten fra Microsoft Dynamics 365 og åbner den i Microsoft Visual Studio, får du vist den oprindelige version af den rapport, du overførte til Microsoft Dynamics 365. Hvis du henter rapporten direkte fra Microsoft SQL Server Reporting Services, vil du se, at Microsoft Dynamics 365 har ændret forespørgslen men ikke har placeret parameteren der, hvor du ønskede, den skulle være.

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

Eksplicit forudfiltrering

For komplekse forespørgsler, f.eks forespørgsler med UNION-sætninger, skal du muligvis bruge eksplicit forudfiltrering. I modsætning til automatisk forudfiltrering, genskriver Microsoft Dynamics 365 ikke rapportforespørgslen ved at videresende værdier til parametrene under eksplicit forudfiltrering, når sådan en rapport overføres til Microsoft Dynamics 365. Du skal eksplicit foretage de nødvendige ændringe til rapporten ved at føje forudfiltreringsparameteren til rapporten og derefter henvise 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 filtrering via avanceret søgning ved at oprette en skjult parameter med navnet CRM_FilteredEntity, f.eks, CRM_FilteredAccount, og bruge denne parameter i et dynamisk SQL-forespørgseludtryk. Denne parameter muliggør filtrering på tabeldata, der er hentet fra den angivne filtrerede visning.

Hvis vi bruger det samme eksempel som vist tidligere til at illustrere begrænsningen for automatisk forudfiltrering, viser nedenstående tabel en forespørgsel med automatisk forudfiltrering, som er ændret, så den bruger eksplicit forudfiltrering ved hjælp af dynamisk SQL. Det antages også, at mens rapporten køres fra området Rapporter i Microsoft Dynamics 365, er filteret anvendt som årsomsætning større end 1.000.000.

Forespørgsel med automatisk forudfiltrering

Forespørgsel ændret, så den bruger eksplicit forudfiltrering

```sql SELECT

Bemærk

De fleste Microsoft Dynamics 365SQL-baseret standardrapporter bruger eksplicit forudfiltrering.

Videresende filtre i filteroversigten

En filteroversigt viser værdien for filteret, der bruges, når en rapport køres. I Microsoft Dynamics 365-rapporter, vises den som et tekstfeltrapportelement i rapportens sidehoved, som indeholder filteret tekstværdi. Når brugeren kører rapporten, vises knappen Rediger filter i Rapportfremviser. 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 Microsoft Dynamics 365.

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 Udgivelse af rapporter.

Se også

Rapportering og analyser med Dynamics 365
Overvejelser i forbindelse med Microsoft Dynamics 365 (online)-rapportering

© 2017 Microsoft. Alle rettigheder forbeholdes. Ophavsret