Melhorar o desempenho de relatórios através da utilização de filtros
Os relatórios que devolvem grandes conjuntos de dados podem ser difíceis de utilizar e podem causar problemas de desempenho. Para limitar os dados que são apresentados num relatório, utilize filtros de dados.
Para além de filtragem de dados suportada pelo Reporting Services, o Microsoft Dynamics 365 Customer Engagement (on-premises) suporta pré-filtragem de dados. Pode utilizar a pré-filtragem de dados para:
Tornar os relatórios sensíveis ao contexto, reduzindo o âmbito de um relatório para devolver os dados mais relevantes.
Obter e apresentar um conjunto de resultados mais rapidamente, porque apenas os dados mais relevantes são devolvidos.
Permitir que o relatório seja filtrado com a funcionalidade Localização Avançada.
Importante
Atualmente, as consultas de relatório com operadores hierárquicos operadores, tal como o operador Under
, não podem ser utilizado com filtros de relatório. Quando tenta executar um relatório que utiliza um operador hierárquico, o relatório não é composto.
Ativar pré-filtragem de dados nos relatórios baseados em Fetch
Os relatórios baseados em Fetch suportam apenas pré-filtragem de dados automática. Um relatório pode ter vários conjuntos de dados e várias consultas FetchXML. Um conjunto de dados suporta uma consulta FetchXML. Para ativar a pré-filtragem para a entidade primária ou associada num relatório baseado em Fetch, tem de definir o valor do parâmetro enableprefiltering
como "1" e especificar um nome do parâmetro na propriedade prefilterparametername
. O nome do parâmetro deverá começar com “CRM_” para especificá-lo como um parâmetro oculto. Tal como com o relatório baseado no SQL Server, este parâmetro especificado na consulta FetchXML atua como uma sub-consulta dentro da consulta FetchXML, e a sub-consulta é criada com o valor especificado pelo utilizador na área Localização Avançada durante a execução de um relatório.
O exemplo que se segue mostra como ativar a pré-filtragem para a entidade primária na consulta 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>
Do mesmo modo, poderá ativar pré-filtragem para a entidade associada. Também pode especificar uma condição de pré-filtragem diferente para a entidade associada na consulta FetchXML especificando um nome diferente e exclusivo para o nome do parâmetro na propriedade
prefilterparametername
.Se estiver a modificar manualmente uma definição de um relatório baseado em Fetch sem utilizar o Assistente de Relatórios ou o SQL Server Data Tools para ativar a pré-filtragem para entidades principais e associadas, certifique-se de que:
<fetch distinct="false" mapping="logical"> <entity name="account" enableprefiltering="1" refilterparametername="CRM_FilteredAccount">
Cria um parâmetro de consulta correspondente com o mesmo nome conforme especificado para a propriedade
prefilterparametername
. Certifique-se de que o nome do parâmetro começa comCRM_
para especificá-lo como um parâmetro oculto.<QueryParameters> <QueryParameter Name="CRM_FilteredAccount"> <Value>=Parameters!CRM_FilteredAccount.Value</Value> </QueryParameter>
Cria um parâmetro de relatório correspondente com o mesmo nome.
<ReportParameters> <ReportParameter Name="CRM_FilteredAccount"> <DataType>String</DataType> <Prompt>CRM Filtered Account</Prompt> </ReportParameter> </ReportParameters>
Permitir a pré-filtragem de dados em relatórios baseados em SQL (Dynamics 365 On-premises)
Existem duas formas de permitir a pré-filtragem de dados em relatórios do Microsoft Dynamics 365 baseados em SQL: automática e explícita.
Pré-filtragem automática
A pré-filtragem automática de dados é adequada para consultas simples. Para ativar a pré-filtragem automática de dados num relatório, pode utilizar aliases para tabelas de entidades em consultas. Fá-lo usando um alias que começa por CRMAF_.
Por exemplo, os seguintes exemplos mostram duas consultas simples, com uma modificada para permitir a pré-filtragem na entidade Conta.
Consulta sem pré-filtragem.
SELECT <column1>, <column2>, <columnN>
FROM FilteredAccount;
Quando ativa a funcionalidade de pré-filtragem automática de dados utilizando o prefixo CRMAF_
, o Microsoft Dynamics 365 modifica a consulta para incluir um parâmetro (por exemplo, P1) quando é carregado para o Dynamics 365, como mostram os exemplos seguintes.
Consulta com pré-filtragem automática.
SELECT <column1>, <column2>, <columnN>
FROM FilteredAccount AS CRMAF_FilteredAccount;
O Dynamics 365 passará uma consulta ao parâmetro P1, dependendo da forma como o relatório está a ser filtrado. Por outras palavras, a pré-filtragem automática de dados funciona como uma subconsulta dentro da consulta existente.
Os exemplos a seguir ilustram como o Dynamics 365 passa as consultas para o parâmetro (P1) de acordo com diferentes requisitos de filtragem. Nestes exemplos, presume-se que está a executar o relatório a partir da área Relatórios no Dynamics 365 e está a utilizar a opção de filtragem de dados.
Exemplo 1
Se quiser ver apenas contas ativas, a consulta resultante será a seguinte:
SELECT <column1>, <column2>, <columnN>
FROM (SELECT FilteredAccount.* FROM FilteredAccount WHERE statecode = 0)
AS CRMAF_FilteredAccount
Exemplo 2
Se estiver dentro de uma conta específica e executar o relatório, a consulta resultante será a seguinte:
SELECT <column1>, <column2>, <columnN>
FROM (SELECT FilteredAccount.* FROM FilteredAccount WHERE AccountId = '<CurrentAccountId>')
AS CRMAF_FilteredAccount
Exemplo 3
Se tiver uma lista de três contas selecionada e escolher a opção de executar o relatório com os registos selecionados, a consulta resultante será a seguinte:
SELECT <column1>, <column2>, <columnN>
FROM (SELECT FilteredAccount.* FROM FilteredAccount WHERE AccountId in ('<1stAccountId>', '<2ndAccountId>', '<3rdAccountId>')
AS CRMAF_FilteredAccount
Quando os nomes de tabelas de entidade são colocados em aliases, a interface de utilizador da Localização Avançada é automaticamente incluída no relatório implementado quando é executado a partir do Dynamics 365.
Para colocar em alias um nome de tabela de entidade no Construtor de Consultas, clique com o botão direito do rato em cada tabela no seu relatório, selecione Propriedades e, em seguida, introduza o valor do alias no formulário CRMAF_FilteredEntity, por exemplo, CRMAF_FilteredAccount.
Limitação da pré-filtragem automática
Quando utiliza o prefixo CRMAF_
para ativar a pré-filtragem automática, o Dynamics 365 adiciona um parâmetro na consulta. Com uma consulta mais complexa, como uma consulta que utiliza instruções UNION, isso pode levar a resultados inesperados porque o Dynamics 365 só pode adicionar o parâmetro à primeira consulta.
Por exemplo, considere a seguinte consulta que contém instruções 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'
Ao carregar o relatório, o Dynamics 365 pode filtrar apenas a primeira consulta que utiliza o parâmetro. Isto leva a que a filtragem não seja aplicada à segunda consulta:
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'
No exemplo anterior, enquanto executa o relatório a partir da área Relatórios no Dynamics 365 e escolhendo o filtro como receita anual superior a 1.000.000, o Dynamics 365 passará uma consulta para o parâmetro P1 da seguinte forma:
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'
Isto implica que a consulta obteria apenas as contas na Florida com uma receita anual superior a 1.000.000 $ e todas as contas na Califórnia, o que não era o que pretendia. Pretendia ver todas as contas na Florida e na Califórnia com receitas anuais superiores a 1.000.000 $.
Se transferir o relatório do Dynamics 365 e o abrir no Microsoft Visual Studio, verá a versão original do relatório que carregou no Dynamics 365. Se transferir o relatório diretamente a partir dos Sistemas de Reporte do Microsoft SQL Server, irá notar que o Dynamics 365 modificou a consulta, mas não colocou o parâmetro onde queria que existisse.
Para consultas complexas como esta, tem de utilizar pré-filtragem explícita.
Pré-filtragem explícita
Para consultas complexas, como consultas utilizando instruções UNION, poderá ser necessário utilizar uma pré-filtragem explícita. Ao contrário da pré-filtragem automática, o Dynamics 365 não reescreve a consulta do relatório passando valores para os parâmetros durante a pré-filtragem explícita quando tal relatório é enviado para o Dynamics 365. Deve efetuar explicitamente as alterações necessárias ao relatório, adicionando o parâmetro de pré-filtragem ao relatório e, em seguida, referenciando o parâmetro na consulta. Em seguida, pode executar a consulta utilizando SQL dinâmico.
Quando utiliza o SQL dinâmico, a filtragem através da Localização Avançada é ativada através da criação de um parâmetro oculto chamado CRM_FilteredEntity
, por exemplo CRM_FilteredAccount
, e utilizando este parâmetro numa expressão de consulta SQL dinâmica. Este parâmetro permite a filtragem nos dados da tabela obtidos a partir da vista filtrada especificada.
Tomando o mesmo exemplo mencionado anteriormente para realçar a limitação da pré-filtragem automática, a tabela que se segue mostra uma consulta com pré-filtragem automática modificada para utilizar a pré-filtragem explícita utilizando o SQL dinâmico. Presume-se também que, ao executar o relatório a partir da área Relatórios no Dynamics 365, o filtro foi aplicado como receita anual superior a 1.000.000.
Consulta com pré-filtragem automática.
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'
Nota
A maioria dos relatórios padrão do Dynamics 365 baseados em SQL utilizam a opção de pré-filtragem explícita.
Transmitir filtros no resumo do filtro
Um resumo de filtro apresenta o valor do filtro que é utilizado quando um relatório é executado. Nos relatórios, é apresentado como um item de relatório de caixa de texto no cabeçalho do relatório que contém o valor de texto do filtro. Quando o utilizador executa o relatório, o Visualizador de Relatórios apresenta um botão Editar Filtro. Quando clica no botão, ele permite que o utilizador defina um filtro de dados. Um exemplo de um resumo de filtro pode ser encontrado no relatório Resumo do Utilizador que está incluído no Customer Engagement (on-premises).
Para adicionar um resumo de filtro a um relatório, siga estes passos:
Crie um parâmetro de cadeia oculto chamado
CRM_FilterText
.Adicione um item de relatório da caixa de texto para o relatório e defina a propriedade
Value
da seguinte forma:
=Parameters!CRM_FilterText.Value.
Quando o relatório é executado, o valor do parâmetro
CRM_FilterText
será definido pelo sistema para o texto do filtro atual.
Filtros predefinidos
Quando publica um relatório, pode definir um filtro predefinido. Para todos os relatórios que foram criados utilizando o assistente de relatórios, se não predefinir um filtro, o filtro é automaticamente definido como todos os registos da entidade modificados nos últimos 30 dias. Para o procedimento para definir um filtro de relatórios predefinidos, consulte Publicar Relatórios.
Consulte também
Relatórios e Guia de Análise
Considerações de Geração de Relatórios do Dynamics 365 for Customer Engagement (on-premises)