Споделяне чрез


Подобряване на ефективността на отчетите с помощта на филтри

Отчетите, които връщат големи набори от данни, могат да създават трудности при използване и проблеми с ефективността. За да ограничите данните, които се представят в отчета, използвайте филтри за данни.

Освен филтрирането на данни, поддържано от услугите за отчети, Microsoft Dynamics 365 Customer Engagement (on-premises) поддържа предварително филтриране на данни. Можете да използвате предварителното филтриране на данни за:

  • Преобразуване на отчети в контекстно зависими чрез стесняване на обхвата им, за да се връщат по-релевантни данни.

  • По-бързо извличане и показване на група резултати, тъй като се връщат само по-релевантни данни.

  • Позволете отчетът да бъде филтриран с помощта на функцията за разширено търсене .

Важно

В момента заявките за отчети с йерархични оператори, като например оператора, не могат да се използват с филтриране на Under отчети. Когато се опитате да стартирате отчет, който използва йерархичен оператор, той няма да се рендира.

Разрешаване на предварително филтриране на данни в отчети, базирани на Fetch

Отчетите, базирани на Fetch, поддържат само автоматично предварително филтриране на данни. Един отчет може да има няколко набора от данни и множество FetchXML заявки. Един набор от данни поддържа една FetchXML заявка. За да разрешите предварително филтриране за основния или свързания обект в отчет, базиран на Fetch, трябва да зададете стойността на параметъра enableprefiltering на "1" и да зададете име на параметър в свойството prefilterparametername . Името на параметъра трябва да започва със „CRM_“, което указва, че параметърът е скрит. Както при отчета, базиран на SQL Server, този параметър, зададен в заявката FetchXML , действа като подзаявка в заявката FetchXML и подзаявката се конструира със стойността, зададена от потребителя в областта за разширено търсене , докато изпълнява отчет.

Следващият пример показва как да разрешите предварително филтриране за основния обект в заявката 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. Аналогично, можете да разрешите предварително филтриране за свързания обект. Можете също да зададете различно условие за предварително филтриране за свързания обект в заявката FetchXML , като зададете различно и уникално име за името на параметъра в свойството prefilterparametername .

    Ако ръчно променяте дефиниция на отчет, базирана на извличане, без да използвате съветника за отчети, или SQL Server Data Tools за да разрешите предварително филтриране за основни и свързани обекти, уверете се, че:

    <fetch distinct="false" mapping="logical">  
    <entity name="account" enableprefiltering="1" refilterparametername="CRM_FilteredAccount">  
    
  2. Създайте съответен параметър на заявка със същото име, както е указано за свойството prefilterparametername . Уверете се, че името на параметъра започва с CRM_ , за да го зададете като скрит параметър.

    <QueryParameters>  
    <QueryParameter Name="CRM_FilteredAccount">  
    <Value>=Parameters!CRM_FilteredAccount.Value</Value>  
    </QueryParameter>  
    
  3. Създайте съответния параметър на отчет със същото име.

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

Разрешаване на предварително филтриране на данни в SQL-базирани отчети (само за Dynamics 365 локален)

Има два начина, по които можете да разрешите предварителното филтриране на данни в Microsoft Dynamics 365 SQL-базирани отчета: автоматично и изрично.

Автоматично предварително филтриране

Автоматичното предварително филтриране на данни е подходящо за прости заявки. За да разрешите автоматичното предварително филтриране на данни в отчет, можете да използвате псевдоними за таблици на обекти в заявки. Можете да направите това, като използвате псевдоним, който започва с CRMAF_.

Например следващите примери показват две прости заявки, като едната е модифицирана, за да позволи предварително филтриране в обекта на партньора.

Заявка без предварително филтриране.

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

Когато разрешите функцията за автоматично предварително филтриране на данни с помощта на CRMAF_ префикса, Microsoft Dynamics 365 променя заявката, за да включи параметър (например P1), когато е качен в Dynamics 365, както е показано в следващите примери.

Заявка с автоматично предварително филтриране.

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

Dynamics 365 ще подаде заявка към параметъра P1 в зависимост от това как се филтрира отчетът. С други думи, автоматичното предварително филтриране на данни действа като подзаявка в рамките на съществуващата заявка.

Следващите примери илюстрират как Dynamics 365 подава заявки към параметъра (P1) според различните изисквания за филтриране. В тези примери се приема, че изпълнявате отчета от областта за отчети в Dynamics 365 и използвате опцията за филтриране на данни.

Пример 1

Ако искате да видите само активните акаунти, получената заявка ще бъде следната:

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

Пример 2

Ако сте в рамките на конкретен акаунт и изпълните отчета, получената заявка ще бъде следната:

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

Пример 3

Ако имате списък с три избрани акаунта и изберете опцията за изпълнение на отчета спрямо избраните записи, получената заявка ще бъде следната:

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

Когато имената на таблици на обекти са псевдонимизирани, потребителският интерфейс за разширено търсене автоматично се включва в разположения отчет, когато се изпълнява от Dynamics 365.

За да псевдонимизирате име на таблица на обект в конструктора на заявки, щракнете с десния бутон върху всяка таблица във вашия отчет, изберете Свойства и след това въведете стойността на псевдонима във формуляра CRMAF_FilteredEntity, например CRMAF_FilteredAccount.

Ограничаване на автоматичното предварително филтриране

Когато използвате префикса, CRMAF_ за да разрешите автоматичното предварително филтриране, Dynamics 365 добавя параметър в заявката. При по-сложна заявка, като например заявка, която използва команди UNION, това може да доведе до неочаквани резултати, защото Dynamics 365 може да добави параметъра само към първата заявка.

Например, помислете за следната заявка, съдържаща изявления на 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'

Когато качвате отчета, Dynamics 365 може да филтрира само първата заявка с помощта на параметъра. Това води до това, че филтрирането не се прилага към втората заявка:

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'

В предишния пример, докато изпълнявате отчета от областта Отчети в Dynamics 365 и избирате филтъра като годишен приход, по-голям от 1000000, Dynamics 365 ще подаде заявка към параметъра P1, както следва:

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'

Това означава, че заявката ще върне само тези сметки във Флорида с годишен приход по-голям от $1000000 и всички сметки в Калифорния, което не е това, което сте възнамерявали. Искахте да видите всички сметки във Флорида и Калифорния с годишни приходи, по-големи от $1000000.

Ако изтеглите отчета от Dynamics 365 и го отворите в Microsoft Visual Studio, ще видите оригиналната версия на отчета, който сте качили в Dynamics 365. Ако изтеглите отчета директно от Microsoft SQL Server услугите за отчитане, ще забележите, че Dynamics 365 е променил заявката, но не е поставил параметъра там, където искате да съществува.

За сложни заявки като тази трябва да използвате изрично предварително филтриране.

Изрично предварително филтриране

За сложни заявки, като например заявки, използващи изявления на UNION, може да се наложи да използвате изрично предварително филтриране. За разлика от автоматичното предварително филтриране, Dynamics 365 не пренаписва заявката за отчет, като подава стойности на параметрите по време на изрично предварително филтриране, когато такъв отчет е качен в Dynamics 365. Трябва изрично да направите необходимите промени в отчета, като добавите параметъра за предварително филтриране към отчета и след това направите препратка към параметъра в заявката. След това можете да изпълните заявката с помощта на динамичен SQL.

Когато използвате динамичен SQL, филтрирането чрез разширено търсене е разрешено чрез създаване на скрит параметър с име, CRM_FilteredEntity например, CRM_FilteredAccount и чрез използване на този параметър в динамичен израз за SQL заявка. Този параметър позволява филтриране на данните от таблицата, получени от указания филтриран изглед.

Като вземем същия пример, както беше обсъдено по-рано, за да подчертаем ограничението на автоматичното предварително филтриране, следващата таблица показва заявка с автоматично предварително филтриране, модифицирана да използва изрично предварително филтриране с помощта на динамичен SQL. Предполага се също, че докато се изпълнява отчетът от областта "Отчети " в Dynamics 365, филтърът е приложен като годишен приход, по-голям от 1000000.

Заявка с автоматично предварително филтриране.

   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'

Бележка

Повечето от стандартните отчети, базирани на Dynamics 365 SQL, използват опцията за изрично предварително филтриране.

Предаване на филтри в резюмето на филтри

Резюмето на филтри показва стойността на филтъра, който се използва, когато се стартира отчет. В отчети то се показва като елемент от отчета с текстово поле в заглавката на отчета, който съдържа текстовата стойност на филтъра. Когато потребителят стартира отчета, визуализаторът на отчети показва бутон Редактиране на филтър . При щракване на бутона потребителят може да дефинира филтър за данни. Пример за резюме на филтри може да бъде намерен в обобщения потребителски отчет, който е включен в Customer Engagement (on-premises).

За да добавите резюме на филтри към отчет, изпълнете следните стъпки:

  1. Създайте скрит параметър на низ, извикан CRM_FilterText.

  2. Добавете елемент от отчет на текстово поле към отчета и задайте свойството му Value , както следва:
    =Parameters!CRM_FilterText.Value.

    Когато отчетът се изпълни, стойността на параметъра CRM_FilterText ще бъде зададена от системата на текста на текущия филтър.

Филтри по подразбиране

Когато публикувате отчет, можете да зададете филтър по подразбиране. За всички отчети, които са били създадени с помощта на съветника за отчети, ако не зададете филтър по подразбиране, филтърът автоматично се задава на всички записи на обекта, променени през последните 30 дни. За процедурата за дефиниране на филтър по подразбиране на отчет вижте Публикуване на отчети.

Вижте също

Ръководство за отчитане и анализ
Dynamics 365 for Customer Engagement (on-premises) Съображения за докладване