Udostępnij za pośrednictwem


Zwiększ wydajność raportów przy użyciu filtrów

Raporty, które zwracają duże zestawy danych mogą być trudne w użyciu i mogą powodować problemy z wydajnością. Aby ograniczyć dane znajdujące się w raporcie należy użyć filtrów danych.

Oprócz filtrowania danych obsługiwanego przez Reporting Services Microsoft Dynamics 365 Customer Engagement (on-premises) obsługuje wstępne filtrowanie danych. Można użyć wstępnego filtrowania danych, aby:

  • Tworzyć raporty kontekstowe przez zawężanie zakresu raportu, w celu zwracania bardziej odpowiednich danych.

  • Pobierać i wyświetlać zestaw wyników szybciej, ponieważ zwracane są tylko bardziej odpowiednie dane.

  • Zezwalaj na filtrowanie raportu używając funkcji Szukanie zaawansowane.

Ważne

Obecnie zapytania raportów z operatorami hierarchicznymi, takimi jak operator Under nie mogą być używane z filtrowaniem raportów. Podczas próby uruchomienia raportu, który używa operatora hierarchicznego, raport nie zostanie wyrenderowany.

Włączanie wstępnego filtrowania danych w raportach opartych na języku Fetch

Raporty oparte na języku Fetch obsługują tylko automatycznego wstępne filtrowanie danych. Raport może zawierać wiele zestawów danych i wiele FetchXML zapytań. Jeden zestaw danych obsługuje jedno FetchXML zapytanie. Aby umożliwić wstępne filtrowanie encji podstawowej lub połączonej w raporcie opartym na języku Fetch, należy ustawić wartość parametru enableprefiltering na "1" i określić nazwę parametru w właściwości prefilterparametername. Nazwa parametru powinna się zaczynać od "CRM_", aby określić go jako parametr ukryty. Podobnie jak w przypadku raportu opartego na programie SQL Server, ten parametr określony w FetchXML zapytaniu działa jako kwerenda podrzędna FetchXML w kwerendzie, a kwerenda podrzędna jest konstruowana przy użyciu wartości określonej przez użytkownika w obszarze Szukanie zaawansowane podczas uruchamiania raportu.

W poniższym przykładzie pokazano, jak włączyć filtrowanie wstępne dla encji podstawowej w FetchXML zapytaniu.

<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. Podobnie można włączyć wstępne filtrowanie dla encji połączonej. Można również określić inny warunek filtrowania wstępnego dla połączonej jednostki w FetchXML zapytaniu, określając inną i unikatową nazwę nazwy parametru we prefilterparametername właściwości.

    W przypadku ręcznego modyfikowania definicji raportu opartego na języku Fetch bez użycia Kreatora raportów lub SQL Server Data Tools , aby włączyć wstępne filtrowanie dla encji podstawowych i połączonych, upewnij się, że:

    <fetch distinct="false" mapping="logical">  
    <entity name="account" enableprefiltering="1" refilterparametername="CRM_FilteredAccount">  
    
  2. Utwórz odpowiedni parametr zapytania z taką samą nazwą, jak określona dla właściwości prefilterparametername. Upewnij się, że nazwa parametru zaczyna się od CRM_, aby określić go jako parametr ukryty.

    <QueryParameters>  
    <QueryParameter Name="CRM_FilteredAccount">  
    <Value>=Parameters!CRM_FilteredAccount.Value</Value>  
    </QueryParameter>  
    
  3. Utwórz odpowiedni parametr raportu o tej samej nazwie.

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

Włączanie wstępnego filtrowania danych w raportach opartych na języku SQL (tylko Dynamics 365 on-premises)

Istnieją dwa sposoby włączania wstępnego filtrowania danych w raportach Microsoft Dynamics 365 opartych na języku SQL: automatyczne i jawne.

Automatyczne wstępne filtrowanie

Automatyczne wstępne filtrowanie danych jest przystosowane do prostych kwerend. Aby włączyć automatyczne wstępne filtrowanie danych w raporcie, w zapytaniach można używać aliasów dla tabel encji. Robisz to używając aliasu, który rozpoczyna się od CRMAF_.

Na przykład w poniższych przykładach widać dwa proste zapytania, z których jedno zostało zmodyfikowane w celu włączenia wstępnego filtrowania dla obiektu Klient.

Kwerenda bez wstępnego filtrowania.

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

W przypadku włączenia funkcji automatycznego wstępnego filtrowania danych za pomocą prefiksu CRMAF_, Microsoft Dynamics 365 modyfikuje zapytanie, aby uwzględniało parametr (na przykład P1) podczas jego przekazywania do Dynamics 365, jak pokazano na poniższych przykładach.

Zapytanie z automatycznym wstępnym filtrowaniem.

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

Dynamics 365 przekaże zapytanie do parametru P1 w zależności od sposobu filtrowania raportu. Innymi słowy, automatyczne wstępne filtrowanie danych działa jako podzapytanie w istniejącym zapytaniu.

W poniższych przykładach pokazano, jak usługa Dynamics 365 przekazuje zapytania do parametru (P1) zgodnie z różnymi wymaganiami filtrowania. W tych przykładach zakładamy, że uruchamiasz raport z obszaru Raporty w Dynamics 365, i używasz opcji filtrowania danych.

Przykład 1

Aby wyświetlić tylko aktywnych klientów, wynikowe zapytanie będzie wyglądało następująco:

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

Przykład 2

Jeśli znajdujesz się na określonym koncie i uruchamiasz raport, wynikowe zapytanie będzie następujące:

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

Przykład 3

Jeśli masz listę trzech wybranych klientów i wybierzesz opcję uruchomienia raportu dla wybranych rekordów, wynikowe zapytanie będzie następujące:

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

Jeśli nazwy tabeli encji są aliasami, interfejs użytkownika szukania zaawansowanego jest automatycznie dołączany do wdrażanego raportu, gdy jest uruchamiany z Dynamics 365.

Aby aliasować nazwę tabeli encji w konstruktorze zapytań, kliknij prawym przyciskiem myszy każdą tabelę w raporcie, wybierz Właściwości, a następnie wpisz wartość aliasu w formularzu CRMAF_FilteredEntity, na przykład, CRMAF_FilteredAccount.

Ograniczenie automatycznego wstępnego filtrowania

Jeśli do włączania automatycznego wstępnego filtrowania używasz prefiksu CRMAF_, Dynamics 365 dodaje parametr w zapytaniu. W przypadku bardziej złożonego zapytania, na przykład zapytania, które korzysta z instrukcji UNION, może to doprowadzić do nieoczekiwanych rezultatów, ponieważ Dynamics 365 może dodać tylko parametr do pierwszego zapytania.

Rozważmy na przykład następujące zapytanie zawierające instrukcje 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'

Podczas przekazywania raportu Dynamics 365 może filtrować przy użyciu parametru tylko pierwsze zapytanie. Powoduje to, że filtrowanie nie jest stosowane do drugiego zapytania:

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'

W poprzednim przykładzie podczas uruchamiania raportu z obszaru Raporty w Dynamics 365 i wybierania filtru jako rocznego przychodu większego niż 1 000 000, Dynamics 365 przekaże zapytanie do parametru P1 w następujący sposób:

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'

Oznacza to, że zapytanie zwróci tylko te konta na Florydzie, dla których przychód roczny jest większy niż 1 000 000 USD i wszystkie konta w Kalifornii, co nie było Twoim zamiarem. Chciałeś wyświetlić wszystkie konta na Florydzie i w Kalifornii, dla których roczny przychód jest większy niż 1 000 000 USD.

Jeśli pobierzesz raport z Dynamics 365 i otworzysz go w Microsoft Visual Studio, zobaczysz oryginalną wersję raportu przekazanego do Dynamics 365. Jeśli pobierzesz raportu bezpośrednio z usług raportowania Microsoft SQL Server zauważysz, że usługa Dynamics 365 zmodyfikowała zapytanie, ale nie umieściła parametru, w miejscu, gdzie miał się on znaleźć.

W przypadku złożonych zapytań tego typu należy użyć jawnego wstępnego filtrowania.

Jawne wstępne filtrowanie

W przypadku złożonych zapytań, takich jak zapytania korzystające z instrukcji UNION, może być konieczne jawne wstępne filtrowanie. W przeciwieństwie do automatycznego wstępnego filtrowania, usługa Dynamics 365 nie zapisuje ponownie zapytania raportu przez przekazanie wartości do parametrów podczas jawnego wstępnego filtrowania podczas przekazywania takiego raportu do usługi Dynamics 365. Wymagane zmiany należy jawnie wprowadzić w raporcie, dodając do raportu parametr wstępnego filtrowania, a następnie odwołując się do parametru w zapytaniu. Zapytanie można następnie wykonać przy użyciu dynamicznego SQL.

W przypadku korzystania z dynamicznego SQL filtrowanie przy użyciu funkcji szukania zaawansowanego jest włączane przez utworzenie ukrytego parametru o nazwie CRM_FilteredEntity, na przykład, CRM_FilteredAccount, i przez używanie tego parametru w dynamicznym wyrażeniu zapytania SQL. Ten parametr umożliwia filtrowanie danych tabeli uzyskanych z określonego widoku filtrowanego.

W tym samym przykładzie, co omówiono wcześniej, aby wyróżnić ograniczenie automatycznego filtrowania wstępnego, w poniższej tabeli przedstawiono zapytanie z automatycznym wstępnym filtrowaniem zmodyfikowanym w celu użycia jawnego wstępnego filtrowania przy użyciu dynamicznego filtrowania SQL. Zakładamy również, że podczas uruchamiania raportu w obszarze Raporty w Dynamics 365 filtr był stosowany jako przychód roczny większy niż 1 000 000.

Zapytanie z automatycznym wstępnym filtrowaniem.

   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'

Uwaga

Większość standardowych raportów opartych na języku SQL Dynamics 365 używa opcji jawnego wstępnego filtrowania.

Przekazywanie filtrów w podsumowaniu filtrów

Podsumowanie filtru ukazuje wartość filtru, który jest używany podczas uruchamiania raportu. W raportach, jest wyświetlane jako elementu raportu pola tekstowego w nagłówku raportu, który zawiera wartość tekst filtru. Gdy użytkownik uruchomi raport, Przeglądarka raportów wyświetli przycisk Edytuj filtr. Po kliknięciu przycisku użytkownik będzie miał możliwość zdefiniować filtr danych. Przykład podsumowania filtru można znaleźć w raporcie Podsumowanie użytkownika, który jest dołączany do Customer Engagement (on-premises).

Aby dodać Podsumowanie filtru do raportu, wykonaj następujące kroki:

  1. Utwórz ukryty ciąg parametru o nazwie CRM_FilterText.

  2. Dodaj element raport pola tekstowego do raportu i ustawić jego właściwość Value w następujący sposób:
    =Parameters!CRM_FilterText.Value.

    Po uruchomieniu raportu, wartość parametru CRM_FilterText zostanie ustawiona przez system na tekst bieżącego filtru.

Filtry domyślne

Po opublikowaniu raportu, można ustawić filtr domyślny. Dla wszystkich raportów, które zostały utworzone przy użyciu Kreatora raportów, jeśli nie ustawisz filtra domyślnego, filtr zostanie automatycznie ustawiony dla wszystkich rekordów encji zmodyfikowanych w ciągu ostatnich 30 dni. Aby zapoznać się z procedurą definiowania domyślnego filtru raportów, zobacz Publikowanie raportów.

Zobacz też

Przewodnik po raportowaniu i analizach
Dynamics 365 for Customer Engagement (on-premises) Uwagi dotyczące raportowania