Partilhar via


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>  
  1. 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">  
    
  2. 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 com CRM_ para especificá-lo como um parâmetro oculto.

    <QueryParameters>  
    <QueryParameter Name="CRM_FilteredAccount">  
    <Value>=Parameters!CRM_FilteredAccount.Value</Value>  
    </QueryParameter>  
    
  3. 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:

  1. Crie um parâmetro de cadeia oculto chamado CRM_FilterText.

  2. 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)