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 mieć wiele zestawów danych i wiele zapytań FetchXML. Jeden zestaw danych obsługuje jedno zapytanie FetchXML. 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 , ten parametr określony w zapytaniu FetchXML działa jak podzapytanie w zapytaniu FetchXML, i podzapytanie jest tworzone z wartością określoną przez użytkownika w obszarze Szukanie zaawansowane podczas uruchamiania raportu.
Poniższy przykład wyświetla sposób włączania wstępnego filtrowania dla encji podstawowej w zapytaniu 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>
Podobnie można włączyć wstępne filtrowanie dla encji połączonej. Można także określić inny warunek wstępnego filtrowania dla encji połączonej w zapytaniu FetchXML określając inną i unikatową nazwę nazwy parametru we właściwości
prefilterparametername
.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">
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ę odCRM_
, aby określić go jako parametr ukryty.<QueryParameters> <QueryParameter Name="CRM_FilteredAccount"> <Value>=Parameters!CRM_FilteredAccount.Value</Value> </QueryParameter>
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:
Utwórz ukryty ciąg parametru o nazwie
CRM_FilterText
.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