Îmbunătățiți performanța rapoartelor folosind filtre

Rapoartele care returnează seturi mari de date pot fi dificil de utilizat și pot provoca probleme de performanță. Pentru a limita datele prezentate într-un raport, utilizați filtrele de date.

Pe lângă filtrarea datelor susținută de Reporting Services, Microsoft Dynamics 365 Customer Engagement (on-premises) acceptă și prefiltrarea datelor. Puteți utiliza prefiltrarea datelor pentru:

  • A face rapoartele contextuale, prin îngustarea domeniului de aplicare al unui raport spre a returna date mai relevante.

  • A prelua și a afișa mai rapid un set de rezultate, deoarece doar datele mai relevante sunt returnate.

  • Permiteți ca raportul să fie filtrat folosind caracteristica Găsire complexă.

Wichtig

În prezent, interogările de raport cu operatori ierarhici, cum ar fi operatorul Under, nu pot fi utilizate cu filtrarea rapoartelor. Atunci când încercați să rulați un raport care utilizează un operator ierarhic, raportul nu se va reda.

Activarea prefiltrării datelor în rapoartele bazate pe Fetch

Rapoartele bazate pe fetch acceptă numai prefiltrarea automată a datelor. Un raport poate avea mai multe seturi de date și mai multe interogări FetchXML. Un set de date acceptă o interogare FetchXML. Pentru a permite prefiltrarea pentru entitatea primară sau legată într-un raport bazat pe Fetch, trebuie să setați valoarea parametrului enableprefiltering la „1” și să specificați un nume de parametru în proprietatea prefilterparametername. Numele parametrului ar trebui să înceapă cu „CRM_” pentru a-l specifica ca parametru ascuns. Ca și în raportul bazat pe SQL Server, acest parametru specificat în interogarea FetchXML acționează ca o subinterogare din interogarea FetchXML, iar subinterogarea este construită cu valoarea specificată de utilizator în zona Găsire complexă în timp ce rulează un raport.

Următorul exemplu arată cum se activează prefiltrarea pentru entitatea primară în interogarea FetchXML.

<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. În mod similar, puteți activa prefiltrarea pentru entitatea legată. De asemenea, puteți specifica o altă condiție prefiltrare pentru entitatea legată în interogarea FetchXML, specificând un nume diferit și unic pentru numele de parametru din proprietatea prefilterparametername.

    Dacă modificați manual o definiție de raport bazat pe Fetch fără a utiliza Asistentul de raport sau SQL Server Data Tools pentru a permite prefiltrarea pentru entitățile primare si legate, asigurați-vă că:

    <fetch distinct="false" mapping="logical">  
    <entity name="account" enableprefiltering="1" refilterparametername="CRM_FilteredAccount">  
    
  2. Creați un parametru de interogare corespunzător cu același nume ca acela specificat pentru proprietatea prefilterparametername. Asigurați-vă că numele parametrului începe cu CRM_ pentru a-l specifica drept parametru ascuns.

    <QueryParameters>  
    <QueryParameter Name="CRM_FilteredAccount">  
    <Value>=Parameters!CRM_FilteredAccount.Value</Value>  
    </QueryParameter>  
    
  3. Creați un parametru de raport corespunzător cu același nume.

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

Activarea prefiltrarii datelor în rapoartele bazate pe SQL (numai pentru Dynamics 365 local)

Există două moduri prin care puteți activa prefiltrarea datelor Microsoft Dynamics 365 Rapoarte bazate pe SQL: automate și explicite.

Prefiltrare automată

Prefiltrarea automată a datelor este potrivită pentru interogări simple. Pentru a activa prefiltrarea automată a datelor într-un raport, puteți utiliza aliasuri pentru tabelele de entități în interogări. Faceți acest lucru folosind un nume de alias care începe cu CRMAF_.

De exemplu, următoarele exemple arată două interogări simple, cu una modificată pentru a activa prefiltrarea pe entitatea Cont.

Interogare fără pre-filtrare.

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

Când activați funcționalitatea de prefiltrare automată a datelor utilizând funcțiaCRMAF_ prefix,Microsoft Dynamics 365 modifică interogarea pentru a include un parametru (de exemplu, P1) atunci când este încărcat în Dynamics 365, așa cum se arată în exemplele următoare.

Interogare cu prefiltrare automată.

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

Dynamics 365 va transmite o interogare la parametrul P1, în funcție de modul în care este filtrat raportul. Cu alte cuvinte, prefiltrarea automată a datelor acționează ca o subinterogare în cadrul interogării existente.

Următoarele exemple ilustrează modul în care Dynamics 365 transmite interogări la parametrul (P1) conform diferitelor cerințe de filtrare. În aceste exemple, se presupune că executați raportul de la Rapoarte din Dynamics 365 și folosesc opțiunea de filtrare a datelor.

Exemplul 1

Dacă doriți să vizualizați numai conturile active, interogarea rezultată ar fi următoarea:

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

Exemplul 2

Dacă vă aflați într-un anumit cont și rulați raportul, interogarea rezultată va fi după cum urmează:

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

Exemplul 3

Dacă aveți o listă cu trei conturi selectate și alegeți opțiunea de a rula raportul în raport cu înregistrările selectate, interogarea rezultată va fi următoarea:

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

Când orice nume de tabel de entități sunt alias, interfața de utilizator Advanced Find este inclusă automat în raportul implementat atunci când este rulat din Dynamics 365.

Pentru a alia un nume de tabel de entitate în Generatorul de interogări, faceți clic dreapta pe fiecare tabel din raport, selectați Proprietăți, apoi introduceți valoarea aliasului în formular CRMAF_FilteredEntity, de exemplu, CRMAF_Cont filtrat.

Limitarea prefiltrarii automate

Când utilizațiCRMAF_ prefix pentru a activa prefiltrarea automată, Dynamics 365 adaugă un parametru în interogare. Cu o interogare mai complexă, cum ar fi o interogare care utilizează instrucțiuni UNION, aceasta poate duce la rezultate neașteptate, deoarece Dynamics 365 ar putea adăuga parametrul doar la prima interogare.

De exemplu, luați în considerare următoarea interogare care conține instrucțiuni UNION:

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'

Când încărcați raportul, Dynamics 365 poate filtra numai prima interogare folosind parametrul. Acest lucru duce la ca filtrarea să nu fie aplicată la a doua interogare:

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'

În exemplul precedent, în timp ce rulați raportul din Rapoarte zonă din Dynamics 365 și alegând filtrul ca venit anual mai mare decât 1000000, Dynamics 365 va transmite o interogare la parametrul P1 după cum urmează:

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'

Aceasta implică faptul că interogarea ar returna numai acele conturi din Florida cu un venit anual mai mare decât $1000000 și toate conturile din California, ceea ce nu este ceea ce intenționați. Ați dorit să vedeți toate conturile din Florida și California cu venituri anuale mai mari decât $1000000.

Dacă descărcați raportul din Dynamics 365 și îl deschideți în Microsoft Visual Studio, veți vedea versiunea originală a raportului pe care l-ați încărcat în Dynamics 365. Dacă descărcați raportul direct de la Microsoft SQL Server Reporting Services, veți observa că Dynamics 365 a modificat interogarea, dar nu a plasat parametrul acolo unde doriți să existe.

Pentru interogări complexe ca aceasta, trebuie să utilizați prefiltrarea explicită.

Prefiltrare explicită

Pentru interogări complexe, cum ar fi interogări care utilizează instrucțiuni UNION, poate fi necesar să utilizați o prefiltrare explicită. Spre deosebire de prefiltrarea automată, Dynamics 365 nu rescrie interogarea raportului prin transmiterea de valori parametrilor în timpul prefiltrării explicite atunci când un astfel de raport este încărcat în Dynamics 365. Trebuie să faceți în mod explicit modificările necesare în raport adăugând parametrul de prefiltrare la raport și apoi făcând referire la parametrul în interogare. Apoi puteți executa interogarea utilizând SQL dinamic.

Când utilizați SQL dinamic, filtrarea prin Căutare avansată este activată prin crearea unui parametru ascuns numitCRM_FilteredEntity, de exemplu,CRM_FilteredAccount și prin utilizarea acestui parametru într-o expresie de interogare SQL dinamică. Acest parametru permite filtrarea datelor din tabel obținute din vizualizarea filtrată specificată.

Luând același exemplu ca cel discutat mai devreme pentru a evidenția limitarea prefiltrarii automate, următorul tabel arată o interogare cu prefiltrarea automată modificată pentru a utiliza prefiltrarea explicită prin utilizarea SQL dinamic. De asemenea, se presupune că în timpul rulării raportului de la Rapoarte din Dynamics 365, filtrul a fost aplicat ca venit anual mai mare decât 1000000.

Interogare cu prefiltrare automată.

   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'

Hinweis

Majoritatea rapoartelor standard Dynamics 365 bazate pe SQL utilizează opțiunea explicită de prefiltrare.

Transmiterea filtrelor în rezumatul de filtrare

Un rezumat de filtrare afișează valoarea filtrului care este utilizată atunci când se rulează un raport. În rapoarte se afișează ca un element de raport casetă text în antetul raportului care conține valoarea textului de filtru. Când utilizatorul rulează raportul, Vizualizatorul de rapoarte afișează un buton Editați filtrul. Atunci când se face clic pe buton, acest lucru îi permite utilizatorului să definească un filtru de date. Un exemplu de rezumat de filtru poate fi găsit în raportul Rezumat utilizator inclus cu Customer Engagement (on-premises).

Pentru a adăuga un rezumat de filtre la un raport, urmați acești pași:

  1. Creați un parametru șir ascuns numit CRM_FilterText.

  2. Adăugați un element de raport casetă text la raport și setați proprietatea Value după cum urmează:
    =Parameters!CRM_FilterText.Value.

    Când se rulează raportul, valoarea parametrului CRM_FilterText va fi setată de sistem la textul filtrului curent.

Filtre implicite

Atunci când publicați un raport, puteți seta un filtru implicit. Pentru toate rapoartele care au fost create utilizând Asistentul de rapoarte, dacă nu setați un filtru implicit, filtrul este setat automat la toate înregistrările entității modificate în ultimele 30 de zile. Pentru procedura de definire a unui filtru de raportare implicit, consultați Publicarea rapoartelor.

Consultați și

Ghid de raportare și analiză
Dynamics 365 for Customer Engagement (on-premises) Considerații de raportare

Hinweis

Ne puteți spune care preferințele dvs. lingvistice pentru documentație? Răspundeți la un chestionar scurt. (rețineți că acest chestionar este în limba engleză)

Chestionarul va dura aproximativ șapte minute. Nu sunt colectate date personale (angajament de respectare a confidențialității).