Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Отчеты, возвращающие большие наборы данных, могут быть сложными в использовании и вызывать проблемы с производительностью. Чтобы ограничить объем данных, представляемых в отчете, используйте фильтры данных.
В дополнение к фильтрации данных, поддерживаемой службами Reporting Services, Microsoft Dynamics 365 Customer Engagement (on-premises) поддерживает предварительную фильтрацию данных. Вы можете использовать предварительную фильтрацию данных для:
Сделайте отчеты контекстно-зависимыми, сузив область отчета, чтобы возвращать более релевантные данные.
Извлекайте и отображайте результирующий набор быстрее, так как возвращаются только более релевантные данные.
Разрешите фильтрацию отчета с помощью функции «Расширенный поиск ».
Это важно
В настоящее время запросы к отчетам с иерархическими операторами, такими как Under оператор, нельзя использовать с фильтрацией отчетов. При попытке запустить отчет, в котором используется иерархический оператор, отчет не будет отображаться.
Включение предварительной фильтрации данных в отчетах на основе Fetch
Отчеты на основе выборки поддерживают только автоматическую предварительную фильтрацию данных. Отчет может содержать несколько наборов данных и несколько запросов FetchXML. Один набор данных поддерживает один запрос FetchXML. Чтобы включить предварительную фильтрацию для основного или связанного объекта в отчете на основе выборки, необходимо задать значение параметра 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>
Аналогичным образом можно включить предварительную фильтрацию для связанной сущности. Вы также можете указать другое условие предварительной фильтрации для связанной сущности в запросе FetchXML, указав другое и уникальное имя для имени параметра в свойстве
prefilterparametername.Если вы вручную изменяете определение отчета на основе выборки без использования мастера отчетов или SQL Server Data Tools для включения предварительной фильтрации для основных и связанных сущностей, убедитесь, что:
<fetch distinct="false" mapping="logical"> <entity name="account" enableprefiltering="1" refilterparametername="CRM_FilteredAccount">Создайте соответствующий параметр запроса с именем, указанным для
prefilterparameternameсвойства. Убедитесь, что имя параметра начинается сCRM_, чтобы указать его как скрытый параметр.<QueryParameters> <QueryParameter Name="CRM_FilteredAccount"> <Value>=Parameters!CRM_FilteredAccount.Value</Value> </QueryParameter>Создайте соответствующий параметр отчета с таким же именем.
<ReportParameters> <ReportParameter Name="CRM_FilteredAccount"> <DataType>String</DataType> <Prompt>CRM Filtered Account</Prompt> </ReportParameter> </ReportParameters>
Включение предварительной фильтрации данных в отчетах на основе SQL (только в локальной версии Dynamics 365)
Существует два способа включения предварительной фильтрации данных в отчетах на основе Microsoft Dynamics 365 SQL: автоматический и явный.
Автоматическая предварительная фильтрация
Автоматическая предварительная фильтрация данных подходит для простых запросов. Чтобы включить автоматическую предварительную фильтрацию данных в отчете, можно использовать псевдонимы для таблиц сущностей в запросах. Это можно сделать с помощью псевдонима, который начинается с CRMAF_.
Например, в следующих примерах показаны два простых запроса, один из которых изменен для включения предварительной фильтрации по сущности Account.
Запрос без предварительной фильтрации.
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 и выборе фильтра, указывающего на годовой доход более 1 000 000, 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'
Это означает, что запрос вернет только те счета во Флориде с годовым доходом более 1 000 000 долларов США и все счета в Калифорнии, что не соответствует вашим намерениям. Вы хотите просмотреть все счета во Флориде и Калифорнии с годовым доходом более 1 000 000 долларов США.
Если вы скачаете отчет из Dynamics 365 и откроете его в Microsoft Visual Studio, вы увидите исходную версию отчета, которую вы загрузили в Dynamics 365. Если вы скачаете отчет непосредственно из Microsoft SQL Server Reporting Services, вы заметите, что Dynamics 365 изменил запрос, но не поместил параметр там, где вы хотели, чтобы он существовал.
Для таких сложных запросов необходимо использовать явную предварительную фильтрацию.
Явная предварительная фильтрация
Для сложных запросов, таких как запросы с использованием инструкций UNION, может потребоваться использовать явную предварительную фильтрацию. В отличие от автоматической предварительной фильтрации, Dynamics 365 не переписывает запрос отчета, передавая значения параметрам во время явной предварительной фильтрации при отправке такого отчета в Dynamics 365. Необходимо явным образом внести необходимые изменения в отчет, добавив в отчет параметр предварительной фильтрации, а затем сославшись на этот параметр в запросе. Затем вы можете выполнить запрос с помощью динамического SQL.
При использовании динамического SQL фильтрация с помощью расширенного поиска включается путем создания скрытого параметра с именем CRM_FilteredEntity, например CRM_FilteredAccount, и использования этого параметра в выражении динамического запроса SQL. Этот параметр включает фильтрацию по табличным данным, полученным из указанного отфильтрованного представления.
В следующей таблице приведен тот же пример, который обсуждался ранее, чтобы подчеркнуть ограничение автоматической предварительной фильтрации, и в следующей таблице показан запрос с автоматической предварительной фильтрацией, измененный для использования явной предварительной фильтрации с помощью динамического SQL. Также предполагается, что при запуске отчета из области Отчеты в Dynamics 365 фильтр был применен как годовой доход, превышающий 1 000 000.
Запрос с автоматической предварительной фильтрацией.
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).
Чтобы добавить сводку фильтра в отчет, выполните следующие действия:
Создайте скрытый строковый параметр с именем
CRM_FilterText.Добавьте в отчет элемент отчета с текстовым полем и задайте его
Valueсвойство следующим образом:
=Parameters!CRM_FilterText.Value.При запуске отчета значение параметра
CRM_FilterTextбудет установлено системой в соответствии с текстом текущего фильтра.
Фильтры по умолчанию
При публикации отчета можно задать фильтр по умолчанию. Для всех отчетов, созданных с помощью мастера отчетов, если не задан фильтр по умолчанию, фильтр автоматически устанавливается на все записи сущности, измененные в течение последних 30 дней. Процедура определения фильтра отчета по умолчанию см. в разделе Публикация отчетов.
См. также
Руководство по отчетности и аналитике
Рекомендации по отчетности по Dynamics 365 for Customer Engagement (on-premises)