Zvýšení výkonu sestav pomocí filtrů

Sestavy, které vracejí velké datové sady, může být obtížné používat a mohou způsobovat problémy s výkonem. Chcete-li omezit data, která jsou zobrazena v sestavě, použijte filtry dat.

Kromě filtrování dat podporovaného službou Reporting Services podporuje aplikace Microsoft Dynamics 365 Customer Engagement (on-premises) předběžné filtrování dat. Předběžné filtrování dat můžete použít pro:

  • Vytváření kontextových sestav zúžením rozsahu sestavy za účelem vrácení relevantnějších dat.

  • Získání a zobrazení sady výsledků rychleji, protože jsou vrácena pouze relevantnější data.

  • Umožnění filtrování sestavy pomocí funkce Rozšířené hledání.

Důležité

V současné době nelze dotazy sestav s hierarchickými operátory, jako je například operátor Under, používat s filtrováním sestav. Při pokusu o spuštění sestavy, která používá hierarchický operátor, se sestava nezobrazí.

Povolení předběžného filtrování dat v sestavách založených na jazyku Fetch

Sestavy založené na jazyku Fetch podporují pouze automatické předběžné filtrování dat. Sestava může mít více datových sad a více dotazů FetchXML. Jedna datová sada podporuje jeden dotaz FetchXML. Chcete-li povolit předběžné filtrování pro primární nebo propojenou entitu v sestavě založené na jazyku Fetch, musíte nastavit hodnotu parametru enableprefiltering na “1” a zadat název parametru ve vlastnosti prefilterparametername. Název parametru musí začínat "CRM_", aby byl specifikován jako skrytý parametr. Stejně jako v případě sestav založených na SQL Server funguje tento parametr zadaný v dotazu FetchXML jako dílčí dotaz v rámci dotazu FetchXML a dílčí dotaz je vytvořen s hodnotou zadanou uživatelem v oblasti Rozšířené hledání při spuštění sestavy.

Následující příklad uvádí, jak povolit předběžné filtrování pro primární entitu v dotazu 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. Podobně můžete povolit předběžné filtrování pro propojenou entitu. Můžete také určit jinou podmínku předběžného filtrování pro propojenou entitu v dotazu FetchXML zadáním jiného a jedinečného názvu pro název parametru ve vlastnosti prefilterparametername.

    Pokud ručně upravujete definici sestavy založené na jazyku Fetch bez použití Průvodce sestavou nebo SQL Server Data Tools za účelem povolení předběžného filtrování pro primární a propojené entity, mějte na paměti následující:

    <fetch distinct="false" mapping="logical">  
    <entity name="account" enableprefiltering="1" refilterparametername="CRM_FilteredAccount">  
    
  2. Vytvořte odpovídající parametr dotazu se stejným názvem jako název zadaný pro vlastnost prefilterparametername. Ujistěte se, že název parametru začíná CRM_, aby byl specifikován jako skrytý parametr.

    <QueryParameters>  
    <QueryParameter Name="CRM_FilteredAccount">  
    <Value>=Parameters!CRM_FilteredAccount.Value</Value>  
    </QueryParameter>  
    
  3. Vytvořte odpovídající parametr sestavy se stejným názvem.

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

Povolení předběžného filtrování dat v sestavách založených na SQL (pouze Dynamics 365 on-premises)

Předběžné filtrování dat v sestavách Microsoft Dynamics 365 založených na SQL můžete povolit dvěma způsoby: automaticky a explicitně.

Automatické předběžné filtrování

Automatické předběžné filtrování dat je vhodné pro jednoduché dotazy. Chcete-li v sestavě povolit automatické předběžné filtrování dat, můžete v dotazech použít aliasy pro tabulky entit. To provedete použitím názvu aliasu, který začíná CRMAF_.

Následující příklady znázorňují dva jednoduché dotazy, přičemž jeden je upraven tak, aby umožňoval předběžné filtrování entity Obchodní vztah.

Dotaz bez předběžného filtrování.

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

Když povolíte funkci automatického předběžného filtrování dat s použitím předpony CRMAF_, Microsoft Dynamics 365 upraví dotaz tak, aby zahrnoval parametr (například P1), když je odeslán do Dynamics 365, jak je znázorněno v následujících příkladech.

Dotaz s automatickým předběžným filtrováním.

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

Dynamics 365 předá dotaz parametru P1 v závislosti na tom, jak je sestava filtrována. Jinými slovy, automatické předběžné filtrování dat funguje jako dílčí dotaz v rámci existujícího dotazu.

Následující příklady ilustrují, jak Dynamics 365 předává dotazy parametru (P1) podle různých požadavků na filtrování. V těchto příkladech se předpokládá, že sestavu spouštíte z oblasti Sestavy v Dynamics 365 a používáte možnost filtrování dat.

Příklad 1

Pokud chcete zobrazit pouze aktivní obchodní vztahy, bude výsledný dotaz vypadat následovně:

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

Příklad 2

Pokud jste v konkrétním obchodním vztahu a spustíte sestavu, bude výsledný dotaz vypadat následovně:

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

Příklad 3

Pokud máte seznam tří vybraných obchodních vztahů a zvolíte možnost spuštění sestavy podle vybraných záznamů, bude výsledný dotaz vypadat následovně:

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

Když jsou z libovolných názvů tabulek entit vytvořeny aliasy, uživatelské rozhraní Rozšířené hledání je automaticky zahrnuto do nasazené sestavy, když je spuštěna z Dynamics 365.

Chcete-li vytvořit alias z názvu tabulky entity v Tvůrci dotazů, klikněte pravým tlačítkem na každou tabulku v sestavě a vyberte Vlastnosti a poté do formuláře zadejte hodnotu aliasu ve formě CRMAF_FiltrovanáEntita, například, CRMAF_FilteredAccount (Filtrovaný obchodní vztah).

Omezení automatického předběžného filtrování

Když použijete předponu CRMAF_ pro povolení automatického předběžného filtrování, Dynamics 365 přidá parametr do dotazu. U složitějšího dotazu, jako je dotaz, který používá příkazy UNION, to může vést k neočekávaným výsledkům, protože Dynamics 365 může přidat parametr pouze do prvního dotazu.

Zvažte například následující dotaz obsahující příkazy 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'

Když odešlete sestavu, Dynamics 365 může pomocí parametru filtrovat pouze první dotaz. To vede k tomu, že se filtrování nepoužije na druhý dotaz:

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'

V předchozím příkladu při spouštění sestavy z oblasti Sestavy v Dynamics 365 a výběrem filtru jako ročních výnosů vyšších než 1 000 000 předá Dynamics 365 dotaz parametru P1 následovně:

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'

To znamená, že dotaz vrátí pouze obchodní vztahy na Floridě s ročním příjmem vyšším než 1 000 000 USD a všechny obchodní vztahy v Kalifornii, což není to, co jste zamýšleli. Chtěli jste zobrazit všechny obchodní vztahy na Floridě a v Kalifornii s ročními příjmy vyššími než 1 000 000 USD.

Pokud si stáhnete sestavu z Dynamics 365 a otevřete ji v Microsoft Visual Studio, uvidíte původní verzi sestavy, kterou jste odeslali do Dynamics 365. Pokud si zprávu stáhnete přímo ze služby generování sestav Microsoft SQL Server, všimnete si, že aplikace Dynamics 365 upravila dotaz, ale neumístila parametr tam, kde jste chtěli, aby byl.

Pro složité dotazy, jako je tento, musíte použít explicitní předběžné filtrování.

Explicitní předběžné filtrování

U složitých dotazů, jako jsou dotazy pomocí příkazů UNION, může být nutné použít explicitní předběžné filtrování. Při explicitním předběžném filtrování, na rozdíl od automatického předběžného filtrování, aplikace Dynamics 365 nepřepisuje dotaz sestavy předáním hodnot parametrům, když je taková sestava nahrána do aplikace Dynamics 365. Musíte explicitně provést požadované změny v sestavě přidáním parametru předběžného filtrování do sestavy a poté odkazováním na parametr dotazu. Poté můžete provést dotaz pomocí dynamického SQL.

Když použijete dynamické filtrování SQL, je povoleno filtrování pomocí rozšířeného hledání vytvořením skrytého parametru s názvem CRM_FilteredEntity, například CRM_FilteredAccount, a použitím tohoto parametru ve výrazu dynamického dotazu SQL. Tento parametr umožňuje filtrování dat tabulky získaných ze zadaného filtrovaného zobrazení.

Pokud použijeme stejný příklad, jaký byl popsán dříve, abychom zdůraznili omezení automatického předběžného filtrování, následující tabulka ukazuje dotaz s automatickým předběžným filtrováním upraveným pro použití explicitního předběžného filtrování s pomocí dynamického SQL. Rovněž se předpokládá, že na spuštěnou sestavu z oblasti Sestavy v Dynamics 365 byl použit filtr jako roční výnosy vyšší než 1 000 000.

Dotaz s automatickým předběžným filtrováním.

   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'

Poznámka:

Většina standardních sestav Dynamics 365 založených na SQL používá možnost explicitního předběžného filtrování.

Předávání filtrů v souhrnu filtru

Souhrn filtru zobrazuje hodnotu filtru, který se používá při spuštění sestavy. V sestavách je zobrazen jako položka sestavy textového pole v záhlaví sestavy, jež obsahuje textovou hodnotu filtru. Když uživatel spustí sestavu, zobrazí Prohlížeč sestav tlačítko Upravit filtr. Po kliknutí na tlačítko mohou uživatelé definovat filtr dat. Příklad souhrnu filtru lze nalézt v sestavě Souhrn uživatele, která je součástí aplikace Customer Engagement (on-premises).

Chcete-li přidat souhrn filtru do sestavy, postupujte takto:

  1. Vytvořte skrytý parametr řetězce s názvem CRM_FilterText.

  2. Přidejte položku sestavy textového pole do sestavy a nastavte její vlastnost Value následujícím způsobem:
    =Parameters!CRM_FilterText.Value.

    Při spuštění sestavy bude hodnota parametru CRM_FilterText nastavena systémem na text aktuálního filtru.

Výchozí filtry

Při publikování sestavy můžete nastavit výchozí filtr. Pro všechny sestavy vytvořené pomocí Průvodce sestavou platí, že pokud nenastavíte výchozí filtr, bude filtr automaticky nastaven na všechny záznamy entity upravené během posledních 30 dnů. Postup pro definování výchozího filtru sestav naleznete v tématu Publikování sestav.

Viz také

Příručka k vytváření sestav a analýz
Důležité aspekty vytváření sestav v Dynamics 365 for Customer Engagement (on-premises)