Mejorar el rendimiento de los informes mediante el uso de filtros

Los informes que devuelven grandes conjuntos de datos pueden ser difíciles de usar y pueden causar problemas de rendimiento. Para limitar los datos que se presentan en un informe, utilice filtros de datos.

Además del filtrado de datos compatible con Reporting Services, Microsoft Dynamics 365 Customer Engagement (on-premises) admite el filtrado previo de datos. Puede utilizar el filtrado previo de datos para:

  • Haga que los informes sean contextuales restringiendo el alcance de un informe para devolver datos más relevantes.

  • Recupere y muestre un conjunto de resultados más rápido porque solo se devuelven los datos más relevantes.

  • Permitir que el informe se filtre mediante la función Búsqueda avanzada .

Importante

Actualmente, las consultas de informes con operadores jerárquicos, como el operador Under, no se pueden usar para el filtrado de informes. Al intentar ejecutar un informe que usa un operador jerárquico, el informe no se mostrará.

Habilitación del filtrado previo de datos en informes basados en Fetch

Los informes basados en fetch solo admiten el prefiltrado automático de datos. Un informe puede tener varios conjuntos de datos y varias consultas FetchXML. Un conjunto de datos admite una consulta FetchXML. Para habilitar el filtrado previo para la entidad principal o vinculada en un informe basado en Fetch, debe establecer el valor del enableprefiltering parámetro en "1" y especificar un nombre de parámetro en la prefilterparametername propiedad. El nombre del parámetro debe comenzar con "CRM_" para especificarlo como un parámetro oculto. Al igual que con el informe basado en SQL Server, este parámetro especificado en la consulta FetchXML actúa como una subconsulta dentro de la consulta FetchXML y la subconsulta se construye con el valor especificado por el usuario en el área Búsqueda avanzada mientras se ejecuta un informe.

En el ejemplo siguiente se muestra cómo habilitar el filtrado previo para 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. Del mismo modo, puede habilitar el filtrado previo para la entidad vinculada. También puede especificar una condición de prefiltrado diferente para la entidad vinculada en la consulta FetchXML especificando un nombre diferente y único para el nombre del parámetro en la prefilterparametername propiedad.

    Si va a modificar manualmente una definición de informe basada en Fetch sin utilizar el Asistente para informes o SQL Server Data Tools para habilitar el prefiltrado para las entidades principales y vinculadas, asegúrese de que:

    <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 que el especificado para la prefilterparametername propiedad. Asegúrese de que el nombre del parámetro comience con CRM_ para especificarlo 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>    
    

Habilitar el prefiltrado de datos en informes basados en SQL (solo Dynamics 365 local)

Hay dos maneras de habilitar el filtrado previo de datos en los informes basados en SQL de Microsoft Dynamics 365: automático y explícito.

Prefiltrado automático

El prefiltrado automático de datos es adecuado para consultas sencillas. 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 empiece por CRMAF_.

Por ejemplo, en los ejemplos siguientes se muestran dos consultas sencillas, una de las cuales se ha modificado para habilitar el filtrado previo en la entidad Account.

Consulta sin filtrado previo.

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

Al habilitar la funcionalidad de prefiltrado automático de datos mediante el CRMAF_ prefijo, 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 ejemplos siguientes.

Consulta con prefiltrado automático.

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

Dynamics 365 pasará una consulta al parámetro P1 en función de 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.

En los ejemplos siguientes se muestra 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 de Dynamics 365 y que está utilizando 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 en 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 tabla 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 asignar un alias a un nombre de tabla de entidades en el Generador de consultas, haga clic con el botón secundario en cada tabla del informe, seleccione Propiedades y, a continuación, escriba el valor del alias en el formulario CRMAF_FilteredEntity, por ejemplo, CRMAF_FilteredAccount.

Limitación del prefiltrado automático

Cuando se usa el prefijo para habilitar el CRMAF_ prefiltrado 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 dar lugar a 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'

Al cargar el informe, Dynamics 365 puede filtrar solo la primera consulta mediante el parámetro. Esto hace 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 elegir 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. Desea 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, observará que Dynamics 365 ha modificado la consulta, pero no ha colocado el parámetro donde quería que existiera.

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

Prefiltrado explícito

En el caso de las consultas complejas, como las consultas que utilizan instrucciones UNION, es posible que tenga que utilizar un filtrado previo explícito. A diferencia del prefiltrado automático, Dynamics 365 no reescribe la consulta del informe pasando valores a los parámetros durante el prefiltrado explícito cuando un informe de este tipo se carga en Dynamics 365. Debe realizar explícitamente los cambios necesarios en el informe agregando el parámetro de prefiltrado al informe y, a continuación, haciendo referencia al parámetro en la consulta. A continuación, puede ejecutar la consulta mediante SQL dinámico.

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

Tomando el mismo ejemplo que se ha descrito anteriormente para resaltar la limitación del prefiltrado automático, en la tabla siguiente se muestra una consulta con prefiltrado automático modificado para usar el prefiltrado explícito mediante 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 prefiltrado explícito.

Pasar filtros en el resumen del filtro

Un resumen de filtro muestra el valor del filtro que se utiliza cuando se ejecuta 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, permite al usuario definir un filtro de datos. Un ejemplo de un resumen de filtro se puede encontrar en el informe Resumen del usuario que se incluye con Customer Engagement (on-premises).

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

  1. Cree un parámetro de cadena oculta llamado CRM_FilterText.

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

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

Filtros predeterminados

Al publicar un informe, puede establecer un filtro predeterminado. Para todos los informes que se crearon mediante el asistente para informes, si no establece un filtro predeterminado, el filtro se establece automáticamente en todos los registros de la entidad modificada en los últimos 30 días. Para obtener información sobre el procedimiento para definir un filtro de informe predeterminado, consulte Publicar informes.

Consulte también

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