Compartilhar via


Melhorar o desempenho de relatórios usando filtros

 

Publicado: janeiro de 2017

Aplicável a: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Relatórios que retornam grandes conjuntos de dados podem ser difíceis de usar e podem causar problemas de desempenho. Para limitar os dados apresentados em um relatório, use filtros de dados.

Além da filtragem de dados suportada pelo Reporting Services, o Microsoft Dynamics 365 suporte a pré-filtragem de dados. É possível usar a pré-filtragem de dados para:

  • Executar relatórios contextuais refinando o escopo de um relatório para retornar os dados mais relevantes.

  • Recuperar e exibir um conjunto de resultados com mais rapidez porque somente os dados mais relevantes são retornados.

  • Permitir que o relatório seja filtrado usando o recurso Localização Avançada.

Importante

Atualmente, as consultas de relatório com operadores hierárquicos, como o operador Under, não podem ser usadas com filtragem de relatórios. Quando você tenta executar um relatório que utiliza um operador hierárquico, o relatório não será renderizado.

Neste tópico

Habilitar a pré-filtragem de dados nos relatórios baseados em fetch

Habilitar a pré-filtragem de dados em relatórios baseados em SQL (apenas Dynamics 365 local)

Transmitindo filtros no resumo da filtragem

Filtros padrões

Habilitar a pré-filtragem de dados nos relatórios baseados em fetch

Os relatórios baseados em fetch suportam apenas a 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 habilitar a pré-filtragem na entidade primária ou vinculada em um relatório baseado em fetch, você deve definir o valor do parâmetro enableprefiltering para “1 " e especificar um nome de parâmetro na propriedade prefilterparametername. O nome do parâmetro deve ser iniciado com o “CRM_” para ser especificado como um parâmetro oculto. Como acontece com o relatório baseado no Microsoft SQL Server, esse parâmetro especificado na consulta FetchXML age como uma subconsulta dentro da consulta FetchXML, e a subconsulta é construída com o valor especificado pelo usuário na área Localização Avançada durante a execução de um relatório.

O exemplo a seguir mostra como habilitar 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>

De maneira semelhante, você pode habilitar a pré-filtragem na entidade vinculada. Também é possível especificar uma condição de pré-filtragem diferente para a entidade vinculada na consulta FetchXML especificando um nome exclusivo e diferente para o nome do parâmetro na propriedade prefilterparametername.

Se você estiver alterando manualmente uma definição de relatório baseada em fetch sem usar o Assistente de Relatório no aplicativo Web Microsoft Dynamics 365 ou SQL Server Data Tools para habilitar a pré-filtragem para entidades primárias e vinculadas, não se esqueça:

  1. De maneira semelhante, você pode habilitar a pré-filtragem na entidade vinculada. Também é possível especificar uma condição de pré-filtragem diferente para a entidade vinculada na consulta FetchXML especificando um nome exclusivo e diferente para o nome do parâmetro na propriedade prefilterparametername.

    Se você estiver alterando manualmente uma definição de relatório baseada em fetch sem usar o Assistente de Relatório no aplicativo Web Microsoft Dynamics 365 ou SQL Server Data Tools para habilitar a pré-filtragem para entidades primárias e vinculadas, não se esqueça:

    <fetch distinct="false" mapping="logical">
       <entity name="account" enableprefiltering="1" prefilterparametername="CRM_FilteredAccount">
    
  2. Criar 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 inicie com CRM_ para especificar como um parâmetro oculto.

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

Habilitar a pré-filtragem de dados em relatórios baseados em SQL (apenas Dynamics 365 local)

Há duas maneiras como você pode habilitar a pré-filtragem de dados nos relatórios Microsoft Dynamics 365Baseado em SQL: automático e explícito.

Pré-filtragem automática

A pré-filtragem de dados automática é adequada para consultas simples. Para habilitar a pré-filtragem automática de dados em um relatório, você pode usar aliases para tabelas de entidade em consultas. Você pode fazer isso usando um nome de alias que comece com CRMAF_.

Por exemplo, a tabela a seguir mostra uma consulta simples alterada para habilitar a pré-filtragem na entidade Account.

Consulta sem pré-filtragem

Consulta modificada com a pré-filtragem automática habilitada

```sql SELECT

Ao habilitar a funcionalidade de pré-filtragem de dados automática usando o prefixo CRMAF_, o Microsoft Dynamics 365 modifica a consulta para incluir um parâmetro (por exemplo, P1) quando for carregada no Microsoft Dynamics 365, conforme mostrado na seguinte tabela.

Consulta com pré-filtragem automática

Modificado pelo Microsoft Dynamics 365

```sql SELECT

O Microsoft Dynamics 365 passará uma consulta para o parâmetro P1 dependendo do modo como o relatório estiver sendo filtrado. Em outras palavras, a pré-filtragem de dados automática atua como subconsultas na consulta existente.

Os exemplos a seguir demonstram como o Microsoft Dynamics 365 transmite consultas para o parâmetro (P1) de acordo com os diferentes requisitos de filtragem. Nestes exemplos, supõe que você está executando o relatório na área Relatórios no Microsoft Dynamics 365 e usar a opção de filtragem de dados.

Exemplo 1: Se quiser exibir somente as contas ativas, a consulta resultante deve ser a seguinte:

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

Exemplo 2: Se estiver em uma conta específica e executar o relatório, a consulta resultante deve ser a seguinte:

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

Exemplo 3: Se você estiver vendo uma lista de contas três selecionadas e selecionar a opção para executar o relatório para os registros selecionados, a consulta resultante deve ser a seguinte:

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

Quando qualquer nome da tabela de entidade é nomeado, a interface do usuário Localização Avançada é incluída automaticamente no relatório implantado quando for executada no Microsoft Dynamics 365.

Para definir o alias do nome da tabela de entidade no Query Builder, clique com o botão direito em seu relatório, selecione Propriedades e insira o valor do alias no formulário CRMAF_FilteredEntity, por exemplo, CRMAF_FilteredAccount.

Limitação de pré-filtragem automática

Quando você usar o prefixo CRMAF_ para habilitar a pré-filtragem automática, o Microsoft Dynamics 365 adiciona um parâmetro na consulta. Com um consulta mais complexa, como uma consulta que usa declarações UNION, isso poderá causar resultados inesperados porque o Microsoft Dynamics 365 pode adicionar apenas o parâmetro na primeira consulta.

Por exemplo, considere a seguinte consulta que contém declaraçõ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 Microsoft Dynamics 365 pode filtrar apenas a primeira consulta usando o parâmetro. Isso resulta na filtrar não ser 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, durante a execução do relatório na área Relatórios no Microsoft Dynamics 365 e ao escolher o filtro como receita anual maior que 1.000.000, o Microsoft Dynamics 365 transmitirá uma consulta para o parâmetro P1 a seguir:

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'

Isso implica que a consulta retornaria apenas as contas na Flórida com uma receita anual superior a $1.000.000 e todas as contas na Califórnia, que não foi o que você pretendeu. Você queria exibir todas as contas na Flórida e Califórnia com a receita anual superior a $1.000.000.

Ao baixar o relatório do Microsoft Dynamics 365 e abrir no Microsoft Visual Studio, você verá a versão original do relatório carregado no Microsoft Dynamics 365. Ao baixar o relatório diretamente do Microsoft SQL Server Reporting Services, você perceberá que o Microsoft Dynamics 365 modificou uma consulta, mas não colocou o parâmetro onde desejado.

Para consultas complexas como essa, você deve usar a pré-filtragem explícita.

Pré-filtragem explícita

Para consultas complexas como consultas usando declarações UNION, talvez seja necessário usar a pré-filtragem explícita. Diferente da pré-filtragem automática, o Microsoft Dynamics 365 não reescreve a consulta de relatório passando valores para os parâmetros durante a pré-filtragem explícita quando o relatório for carregado no Microsoft Dynamics 365. Você deve executar explicitamente as alterações necessárias no relatório adicionando o parâmetro de pré-filtragem ao relatório e referenciando o parâmetro na consulta. Você pode executar a consulta usando o SQL dinâmico.

Quando você usa o SQL dinâmico, filtrar através da Localização Avançada está habilitado ao criar um parâmetro oculto chamado CRM_FilteredEntity, por exemplo, CRM_FilteredAccount, e usando este parâmetro em uma expressão de consulta do SQL dinâmico. Esse parâmetro habilita a filtragem nos dados da tabela obtidos da exibição filtrada especificada.

Levando o mesmo exemplo discutido anteriormente para realçar a limitação da pré-filtragem automática, a tabela a seguir mostra uma consulta com a pré-filtragem automática modificada para usar a pré-filtragem explícita utilizando o SQL dinâmico. Também supõe que durante a execução do relatório na área Relatórios no Microsoft Dynamics 365, o filtro foi aplicado como a receita anual superior a 1.000.000.

Consulta com pré-filtragem automática

Consulta modificada para usar a pré-filtragem explícita

```sql SELECT

Observação

A maioria dos relatórios Microsoft Dynamics 365Baseado em SQL padrão usam a opção de pré-filtragem explícita.

Transmitindo filtros no resumo da filtragem

Um resumo de filtro exibe o valor do filtro usado quando um relatório é executado. Nos relatórios do Microsoft Dynamics 365, é exibido como um item de relatório da caixa de texto no cabeçalho do relatório que contém o valor de texto do filtro. Quando o usuário executar o relatório, o Visualizador de Relatórios exibe um botão Editar Filtro. Quando o botão é clicado, permite o usuário definir um filtro de dados. Um exemplo de um resumo de filtro pode ser encontrado no relatório Resumo do Usuário incluído com o Microsoft Dynamics 365.

Para adicionar um resumo de filtro a um relatório, siga essas etapas:

  1. Criar um parâmetro de cadeia de caracteres oculto chamado CRM_FilterText.

  2. Adicione um item de relatório da caixa de texto ao relatório e defina a propriedade Value da seguinte forma:
    =Parameters!CRM_FilterText.Value.

Quando o relatório for executado, o valor do parâmetro CRM_FilterText será definido pelo sistema como o texto do filtro atual.

Filtros padrões

Quando você publicar um relatório, é possível definir um filtro padrão. Para todos os relatórios criados com o assistente de relatório, se você não definir um filtro padrão, esse filtro será definido automaticamente para todos os registros da entidade modificada nos últimos 30 dias. Se o procedimento para definir um filtro de relatório padrão, consulte Publicar relatórios.

Confira Também

Relatórios e análise com o Dynamics 365
Considerações de relatório do Microsoft Dynamics 365 (online)

© 2017 Microsoft. Todos os direitos reservados. Direitos autorais