Condividi tramite


Migliorare le prestazioni dei report utilizzando i filtri

I report che restituiscono ampi set di dati possono essere difficile da utilizzare e possono causare problemi di prestazioni. Per limitare i dati presentati in un report, utilizzare i filtri di dati.

Oltre al filtro di dati supportato in Reporting Services, Microsoft Dynamics 365 Customer Engagement (on-premises) supporta il filtro preliminare dei dati. È possibile utilizzare il filtro preliminare dei dati per:

  • Creare report sensibili al contesto restringendo l'ambito di un report in modo da restituire dati più rilevanti.

  • Recuperare e visualizzare un set di risultati in modo più rapido perché solo i dati più rilevanti vengono restituiti.

  • Consentire il filtro del report tramite la funzionalità Ricerca avanzata.

Importante

Al momento, le query del report con operatori gerarchici, ad esempio l'operatore Under, non possono essere utilizzate con il filtro del report. Quando si tenta di eseguire un report che utilizza un operatore gerarchico, il report non eseguirà il rendering.

Abilitare il filtro preliminare nei report basati su Fetch

I report basati su Fetch supportano solo il filtro preliminare dei dati automatici. Un report può avere più set di dati e più query FetchXML. Un set di dati supporta una query FetchXML. Per abilitare il filtro preliminare per l'entità primaria o collegata in un report basato su Fetch, è necessario impostare il valore del parametro enableprefiltering su "1" e specificare un nome parametro nella proprietà prefilterparametername. Il nome parametro deve iniziare con "CRM_" per specificarlo come parametro nascosto. Come per il report basato su SQL Server, questo parametro specificato nella query FetchXML funge da query secondaria nella query FetchXML e la query secondaria viene progettato con il valore specificato dall'utente nell'area Ricerca avanzata durante l'esecuzione di un report.

Nel seguente esempio viene mostrato come abilitare il filtro preliminare per l'entità primaria nella query 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. Analogamente, è possibile abilitare il filtro preliminare per l'entità collegata. È inoltre possibile specificare una condizione di filtro preliminare per l'entità collegata nella query FetchXML specificando un nome diverso e univoco per il nome del parametro nella proprietà prefilterparametername.

    Se si modifica manualmente una definizione del report basata su Fetch senza utilizzare la Creazione guidata report o SQL Server Data Tools per abilitare il filtro preliminare per le entità principali e collegate, assicurarsi di:

    <fetch distinct="false" mapping="logical">  
    <entity name="account" enableprefiltering="1" refilterparametername="CRM_FilteredAccount">  
    
  2. Creare un parametro della query corrispondente con lo stesso nome specificato per la creazione della proprietà prefilterparametername. Assicurarsi che il nome del parametro inizi con CRM_ per specificarlo come parametro nascosto.

    <QueryParameters>  
    <QueryParameter Name="CRM_FilteredAccount">  
    <Value>=Parameters!CRM_FilteredAccount.Value</Value>  
    </QueryParameter>  
    
  3. Creare un parametro del report corrispondente con lo stesso nome.

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

Abilitazione del prefiltro dei dati nei report basati su SQL (solo Dynamics 365 On-premises)

Esistono due modi per abilitare il prefiltro dei dati sui report basati su SQL di Microsoft Dynamics 365: automatici ed espliciti.

Prefiltro automatico

Il prefiltro automatico dei dati è adatto per query semplici. Per abilitare il prefiltro automatico dei dati in un report, puoi utilizzare gli alias per le tabelle di entità nelle query. Puoi farlo utilizzando un nome alias che inizia con CRMAF_.

Ad esempio, gli esempi seguenti mostrano due semplici query, di cui una modificata per abilitare il prefiltro sull'entità Account.

Query senza prefiltraggio.

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

Quando si abilita la funzionalità di prefiltro automatico dei dati utilizzando il prefisso CRMAF_, Microsoft Dynamics 365 modifica la query per includere un parametro (ad esempio, P1) quando viene caricato in Dynamics 365, come mostrato negli esempi seguenti.

Query con prefiltraggio automatico.

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

Dynamics 365 passerà una query al parametro P1 a seconda di come viene filtrato il report. In altre parole, il prefiltro automatico dei dati agisce come una query secondaria all'interno della query esistente.

Gli esempi seguenti illustrano come Dynamics 365 passa le query al parametro (P1) in base a diversi requisiti di filtro. In questi esempi, si presuppone che si stia eseguendo il report dall'area Report in Dynamics 365 e stanno usando l'opzione di filtro dei dati.

Esempio 1

Se desideri visualizzare solo gli account attivi, la query risultante sarebbe la seguente:

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

Esempio 2

Se ti trovi all'interno di un account specifico ed esegui il report, la query risultante sarebbe la seguente:

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

Esempio 3

Se hai un elenco di tre account selezionati e scegli l'opzione per eseguire il report sui record selezionati, la query risultante sarebbe la seguente:

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

Quando viene assegnato un alias a qualsiasi nome di tabella di entità, l'interfaccia utente Ricerca avanzata viene inclusa automaticamente nel report distribuito quando viene eseguito da Dynamics 365.

Per creare un alias a un nome di tabella di entità in Generatore di query, fare clic con il pulsante destro del mouse su ogni tabella nel report, seleziona Proprietà, quindi immetti il valore dell'alias nel modulo CRMAF_FilteredEntity, ad esempio,CRMAF_FilteredAccount.

Limitazione del prefiltraggio automatico

Quando usi il prefisso CRMAF_ per abilitare il prefiltro automatico, Dynamics 365 aggiunge un parametro nella query. Con una query più complessa, ad esempio una query che utilizza le istruzioni UNION, ciò può portare a risultati imprevisti perché Dynamics 365 potrebbe aggiungere il parametro solo alla prima query.

Ad esempio, considera la seguente query contenente le istruzioni 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'

Quando carichi il report, Dynamics 365 può filtrare solo la prima query utilizzando il parametro. Ciò comporta che il filtro non venga applicato alla seconda query:

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'

Nell'esempio precedente, durante l'esecuzione del report dall'area Report in Dynamics 365 e scegliendo il filtro come fatturato annuo maggiore di 1.000.000, Dynamics 365 passerà una query al parametro P1 come segue:

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'

Ciò implica che la query restituirà solo gli account in Florida con un fatturato annuo maggiore di $ 1.000.000 e tutti gli account in California, che non è quello che intendevi. Volevi visualizzare tutti gli account in Florida e California con entrate annuali superiori a $ 1.000.000.

Se scarichi il report da Dynamics 365 e lo apri in Microsoft Visual Studio, vedrai la versione originale del report che hai caricato in Dynamics 365. Se scarichi il report direttamente da Microsoft SQL Server Reporting Services, noterai che Dynamics 365 ha modificato la query ma non ha posizionato il parametro dove volevi che esistesse.

Per query complesse come questa, è necessario utilizzare il prefiltro esplicito.

Prefiltraggio esplicito

Per query complesse come le query che utilizzano istruzioni UNION, potrebbe essere necessario utilizzare il prefiltro esplicito. A differenza del prefiltro automatico, Dynamics 365 non riscrive la query del report passando i valori ai parametri durante il prefiltro esplicito quando tale report viene caricato in Dynamics 365. È necessario apportare in modo esplicito le modifiche richieste al report aggiungendo il parametro di prefiltro al report e quindi facendo riferimento al parametro nella query. È quindi possibile eseguire la query utilizzando SQL dinamico.

Quando si utilizza SQL dinamico, il filtro tramite Ricerca avanzata viene abilitato creando un parametro nascosto denominato CRM_FilteredEntity, ad esempio, CRM_FilteredAccount e utilizzando questo parametro in un'espressione di query SQL dinamica. Questo parametro abilita il filtraggio sui dati della tabella ottenuti dalla visualizzazione filtrata specificata.

Prendendo lo stesso esempio discusso in precedenza per evidenziare la limitazione del prefiltro automatico, la tabella seguente mostra una query con il prefiltro automatico modificato per utilizzare il prefiltro esplicito mediante SQL dinamico. Si presume inoltre che durante l'esecuzione del report dall'area Report in Dynamics 365, il filtro è stato applicato come fatturato annuo maggiore di 1.000.000.

Query con prefiltraggio automatico.

   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 maggior parte dei report standard basati su Dynamics 365 SQL utilizza l'opzione di prefiltro esplicito.

Passare i filtri nel riepilogo del filtro

Nel riepilogo del filtro viene visualizzato il valore del filtro utilizzato quando viene eseguito un report. Nei report questo viene visualizzato come elemento di report della casella di testo nell'intestazione del report contenente il valore di testo del filtro. Quando l'utente esegue il report, nel Visualizzatore report viene visualizzato un pulsante Modifica filtro. Quando fa clic sul pulsante, l'utente può definire un filtro di dati. È possibile trovare un esempio di un riepilogo del filtro nel report Riepilogo utente incluso in Customer Engagement (on-premises).

Per aggiungere un riepilogo del filtro a un report, eseguire la procedura seguente:

  1. Creare un parametro stringa nascosto denominato CRM_FilterText.

  2. Aggiungere un report della casella di testo al report e impostare la proprietà Value nel modo seguente:
    =Parameters!CRM_FilterText.Value.

    Quando il report viene eseguito, il valore del parametro CRM_FilterText verrà impostato dal sistema sul testo del filtro corrente.

Filtri predefiniti

Quando si pubblica un report, è possibile impostare un filtro predefinito. Per tutti i report creati utilizzando la creazione guidata report, se non si imposta un filtro predefinito, tale filtro viene impostato automaticamente su tutti i record dell'entità modificata negli ultimi 30 giorni. Affinché la procedura definisca un filtro del report predefinito, vedere Pubblicare report.

Vedi anche

Guida all'utilizzo dei report e delle analisi
Considerazioni sulla creazione dei report Dynamics 365 for Customer Engagement (on-premises)