Compartir a través de


Mejorar el rendimiento de los informes mediante el uso de filtros

Los informes que devuelven conjuntos de datos de gran tamaño pueden ser difíciles de usar y pueden provocar problemas de rendimiento. Para limitar los datos que se muestran en un informe, utilice filtros de datos.

Además del filtrado de datos admitido por Reporting Services, Microsoft Dynamics 365 Customer Engagement (on-premises) admite el prefiltrado de datos. Puede usar el prefiltrado de datos para:

  • Haga que los informes dependan del contexto restringiendo el ámbito de un informe para devolver datos más relevantes.

  • Recupere y visualice un conjunto de resultados más rápidamente porque solo se devuelven datos más relevantes.

  • Permitir que el informe se filtre mediante la característica Búsqueda avanzada.

Importante

Actualmente, las consultas de informe con operadores jerárquicos, como el operador Under, no se pueden usar en el filtro de informe. Al intentar ejecutar informes que usan un operador jerárquico, el informe no se generará.

Habilitar el prefiltrado de datos en los informes basados en Fetch

Los informes basados en Fetch solo admiten el prefiltrado de datos automático. Un informe puede tener varios conjuntos de datos y varias consultas de FetchXML. Un conjunto de datos admite una consulta FetchXML. Para habilitar el prefiltrado de la entidad principal o vinculada en un informe basado en Fetch, debe establecer el valor del parámetro enableprefiltering en "1" y especificar un nombre de parámetro en la propiedad prefilterparametername. El nombre del parámetro debe empezar por "CRM_" para indicarlo como un parámetro oculto. Como sucede con el informe basado en SQL Server, este parámetro especificado en la consulta FetchXML actúa como una subconsulta de la consulta FetchXML, y la subconsulta se genera con el valor especificado por el usuario en el área Búsqueda avanzada al ejecutar un informe.

El siguiente ejemplo muestra cómo habilitar el prefiltrado de la entidad principal en la 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. De forma similar, puede habilitar el prefiltrado de la entidad vinculada. También puede especificar otra condición de filtrado de la entidad vinculada en la consulta FetchXML especificando un nombre distinto y único para el nombre del parámetro en la propiedad prefilterparametername.

    Si está editando manualmente una definición de informe basada en Fetch sin usar el Asistente para informes o SQL Server Data Tools para habilitar el prefiltrado de las entidades principales y vinculadas, asegúrese de:

    <fetch distinct="false" mapping="logical">  
    <entity name="account" enableprefiltering="1" refilterparametername="CRM_FilteredAccount">  
    
  2. Cree un parámetro de consulta correspondiente con el mismo nombre especificado para la propiedad prefilterparametername. Asegúrese de que el nombre del parámetro empieza por CRM_ indicarlo como un parámetro oculto.

    <QueryParameters>  
    <QueryParameter Name="CRM_FilteredAccount">  
    <Value>=Parameters!CRM_FilteredAccount.Value</Value>  
    </QueryParameter>  
    
  3. Cree un parámetro de informe correspondiente con el mismo nombre.

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

Habilitación del filtrado previo de datos en informes basados en SQL (solo Dynamics 365 on-premises)

Hay dos formas de habilitar el prefiltrado de datos en los informes basados en SQL de Microsoft Dynamics 365: automáticos y explícitos.

Prefiltrado automático

El prefiltrado automático de datos es adecuado para consultas simples. Para habilitar el prefiltrado automático de datos en un informe, puede usar alias para las tablas de entidades en las consultas. Para ello, utilice un nombre de alias que comience con CRMAF_.

Por ejemplo, los siguientes ejemplos muestran dos consultas simples, con una modificada para habilitar el filtrado previo en la entidad Cuenta.

Consulta sin prefiltrado.

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

Cuando habilita la función de prefiltrado automático de datos mediante el prefijo CRMAF_, Microsoft Dynamics 365 modifica la consulta para incluir un parámetro (por ejemplo, P1) cuando se carga en Dynamics 365, como se muestra en los siguientes ejemplos.

Consulta con prefiltrado automático.

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

Dynamics 365 pasará una consulta al parámetro P1 según cómo se filtre el informe. En otras palabras, el prefiltrado automático de datos actúa como una subconsulta dentro de la consulta existente.

Los siguientes ejemplos ilustran cómo Dynamics 365 pasa consultas al parámetro (P1) según diferentes requisitos de filtrado. En estos ejemplos, se supone que está ejecutando el informe desde el área Informes en Dynamics 365 y están usando la opción de filtrado de datos.

Ejemplo 1

Si desea ver solo las cuentas activas, la consulta resultante sería la siguiente:

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

Ejemplo 2

Si está dentro de una cuenta específica y ejecuta el informe, la consulta resultante sería la siguiente:

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

Ejemplo 3

Si tiene una lista de tres cuentas seleccionadas y elige la opción de ejecutar el informe contra los registros seleccionados, la consulta resultante sería la siguiente:

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

Cuando los nombres de las tablas de entidades tienen alias, la interfaz de usuario de búsqueda avanzada se incluye automáticamente en el informe implementado cuando se ejecuta desde Dynamics 365.

Para alias de un nombre de tabla de entidad en Query Builder, haga clic con el botón derecho en cada tabla en su informe, seleccione Propiedades y, a continuación, introduzca el valor del alias en el formulario CRMAF_FilteredEntity, por ejemplo, CRMAF_FilteredAccount.

Limitación del prefiltrado automático

Cuando usa el prefijo CRMAF_ para habilitar el filtrado previo automático, Dynamics 365 agrega un parámetro en la consulta. Con una consulta más compleja, como una consulta que usa instrucciones UNION, esto puede generar resultados inesperados porque es posible que Dynamics 365 solo agregue el parámetro a la primera consulta.

Por ejemplo, considere la siguiente consulta que contiene sentencias 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'

Cuando carga el informe, Dynamics 365 puede filtrar solo la primera consulta con el parámetro. Esto lleva a que el filtrado no se aplique a la 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'

En el ejemplo anterior, al ejecutar el informe desde el área Informes en Dynamics 365 y eligiendo el filtro como ingresos anuales superiores a 1 000 000, Dynamics 365 pasará una consulta al parámetro P1 de la siguiente manera:

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'

Esto implica que la consulta devolvería solo aquellas cuentas en Florida con un ingreso anual superior a $ 1 000 000 y todas las cuentas en California, que no es lo que pretendía. Quería ver todas las cuentas de Florida y California con ingresos anuales superiores a $ 1 000 000.

Si descarga el informe de Dynamics 365 y lo abre en Microsoft Visual Studio, verá la versión original del informe que cargó en Dynamics 365. Si descarga el informe directamente desde Microsoft SQL Server Reporting Services, notará que Dynamics 365 modificó la consulta pero no colocó el parámetro donde deseaba que existiera.

Para consultas complejas como esta, debe usar un filtrado previo explícito.

Filtrado previo explícito

Para consultas complejas, como las consultas que usan instrucciones UNION, es posible que deba usar un filtrado previo explícito. A diferencia del filtrado previo automático, Dynamics 365 no vuelve a escribir la consulta del informe pasando valores a los parámetros durante el filtrado previo explícito cuando dicho informe se carga en Dynamics 365. Debe realizar explícitamente los cambios necesarios en el informe agregando el parámetro de filtrado previo al informe y luego haciendo referencia al parámetro en la consulta. Luego puede ejecutar la consulta en SQL dinámico.

Cuando usa SQL dinámico, el filtrado a través de Búsqueda avanzada se habilita creando un parámetro oculto llamado CRM_FilteredEntity, por ejemplo, CRM_FilteredAccount y mediante el uso de este parámetro en una expresión de consulta SQL dinámica. Este parámetro permite filtrar los datos de la tabla obtenidos del vista filtrada especificado.

Tomando el mismo ejemplo que se discutió anteriormente para resaltar la limitación del prefiltrado automático, la siguiente tabla muestra una consulta con el prefiltrado automático modificado para usar el prefiltrado explícito mediante el uso de SQL dinámico. También se supone que mientras se ejecuta el informe desde el área Informes en Dynamics 365, el filtro se ha aplicado como ingresos anuales superiores a 1 000 000.

Consulta con prefiltrado automático.

   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

La mayoría de los informes estándar basados en SQL de Dynamics 365 usan la opción de filtrado previo explícito.

Pasar filtros en el resumen del filtro

Un resumen del filtro muestra el valor del filtro usado al ejecutar un informe. En los informes, se muestra como un elemento de informe de cuadro de texto en el encabezado del informe que contiene el valor de texto del filtro. Cuando el usuario ejecuta el informe, el visor de informes muestra un botón Editar filtro. Cuando se hace clic en el botón, el usuario puede definir un filtro de datos. Un ejemplo de resumen del filtro se puede encontrar en el informe de resumen de usuarios que se incluye con Customer Engagement (on-premises).

Para agregar un resumen del filtro a un informe, siga estos pasos:

  1. Cree un parámetro de cadena oculto denominado CRM_FilterText.

  2. Agregue un elemento de informe de cuadro de texto al informe y defina su propiedad Value de la siguiente manera:
    =Parameters!CRM_FilterText.Value.

    Cuando se ejecute el informe, el sistema establecerá el valor del parámetro CRM_FilterText en el texto del filtro actual.

Filtros predeterminados

Cuando publica un informe, se puede establecer un filtro predeterminado. Para todos los informes creados mediante el asistente para informes, si no se establece un filtro predeterminado, el filtro se configura automáticamente en todos los registros de la entidad modificada durante los últimos 30 días. Para conocer el procedimiento de definir un filtro de informe predeterminado, consulte Publicar informes.

Consulte también

Guía de informes y análisis
Consideraciones sobre informes de Dynamics 365 for Customer Engagement (on-premises)