Condividi tramite


Migliorare le prestazioni dei report utilizzando i filtri

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

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

  • Rendere i report sensibili al contesto restringendo l'ambito di un report per restituire dati più pertinenti.

  • Recuperare e visualizzare un set di risultati più velocemente perché vengono restituiti solo i dati più pertinenti.

  • Consenti il filtraggio del report utilizzando la funzione Ricerca avanzata .

Importante

Attualmente, le query dei report con operatori gerarchici, come l'operatore Under, non possono essere usate con il filtraggio dei report. Quando si tenta di eseguire un report che utilizza un operatore gerarchico, il rendering del report non viene eseguito.

Abilitazione del pre-filtraggio dei dati nei report basati su Fetch

I report basati sul recupero dei dati supportano solo il prefiltro automatico dei dati. Un report può contenere 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 enableprefiltering valore del parametro su "1" e specificare un nome di prefilterparametername parametro nella proprietà. Il nome del 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 sottoquery all'interno della query FetchXML e la sottoquery viene costruita con il valore specificato dall'utente nell'area Ricerca avanzata durante l'esecuzione di un report.

Nell'esempio seguente viene illustrato 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 prefiltro per l'entità collegata. È inoltre possibile specificare una condizione di prefiltro diversa per l'entità collegata nella query FetchXML specificando un nome diverso e univoco per il nome del prefilterparametername parametro nella proprietà.

    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 di query corrispondente con lo stesso nome specificato per la prefilterparametername proprietà. 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 di report corrispondente con lo stesso nome.

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

Abilitazione del filtro preliminare dei dati nei report basati su SQL (solo Dynamics 365 locale)

Esistono due modi per abilitare il filtro preliminare dei dati nei report basati su SQL di Microsoft Dynamics 365: automatico ed esplicito.

Prefiltro automatico

Il prefiltro automatico dei dati è adatto per query semplici. Per abilitare il prefiltro automatico dei dati in un report, è possibile utilizzare gli alias per le tabelle delle entità nelle query. A tale scopo, utilizzare un nome alias che inizia con CRMAF_.

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

Query senza prefiltraggio.

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

Quando si abilita la funzionalità di prefiltro automatico dei dati utilizzando il CRMAF_ prefisso, Microsoft Dynamics 365 modifica la query in modo da includere un parametro (ad esempio, P1) quando viene caricata in Dynamics 365, come illustrato 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 funge da sottoquery all'interno della query esistente.

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

Esempio 1

Se si desidera visualizzare solo gli account attivi, la query risultante sarà la seguente:

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

Esempio 2

Se ci si trova all'interno di un account specifico e si esegue il report, la query risultante sarà la seguente:

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

Esempio 3

Se si dispone di un elenco di tre account selezionati e si sceglie l'opzione per eseguire il report sui record selezionati, la query risultante sarà la seguente:

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

Quando viene applicato un alias ai nomi delle tabelle di entità, l'interfaccia utente di ricerca avanzata viene inclusa automaticamente nel report distribuito quando viene eseguito da Dynamics 365.

Per eseguire l'alias di una tabella di entità in Query Builder, fare clic con il pulsante destro del mouse su ogni tabella del report, scegliere Proprietà e quindi immettere il valore dell'alias nel modulo CRMAF_FilteredEntity, ad esempio CRMAF_FilteredAccount.

Limitazione del prefiltraggio automatico

Quando si utilizza 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 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 si carica 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, quando si esegue il report dall'area Report in Dynamics 365 e scegliendo il filtro con fatturato annuale 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 i conti in Florida con un fatturato annuo superiore a $ 1.000.000 e tutti i conti in California, che non corrisponde a quanto desiderato. Si desidera visualizzare tutti gli account in Florida e California con un fatturato annuo superiore 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 si scarica il report direttamente da Microsoft SQL Server Reporting Services, si noterà che Dynamics 365 ha modificato la query ma non ha inserito il parametro nel punto in cui si desiderava che esistesse.

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

Prefiltraggio esplicito

Per le query complesse, ad esempio 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 necessarie 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 la 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 consente di filtrare i dati della tabella ottenuti dalla vista filtrata specificata.

Prendendo lo stesso esempio descritto in precedenza per evidenziare la limitazione del prefiltro automatico, nella tabella seguente viene illustrata una query con il prefiltro automatico modificato per utilizzare il prefiltro esplicito tramite SQL dinamico. Si presume inoltre che durante l'esecuzione della relazione dall'area Report in Dynamics 365, il filtro sia stato applicato come fatturato annuo superiore a 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'

Annotazioni

La maggior parte dei report standard basati su SQL di Dynamics 365 utilizza l'opzione di prefiltro esplicito.

Passare i filtri nel riepilogo del filtro

In un riepilogo del filtro viene visualizzato il valore del filtro utilizzato durante l'esecuzione di 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 si fa clic sul pulsante, l'utente può definire un filtro dati. Un esempio di riepilogo del filtro è disponibile nel report Riepilogo utente incluso in Customer Engagement (on-premises).

Per aggiungere un riepilogo del filtro a un report, attenersi alla seguente procedura:

  1. Creare un parametro stringa nascosto denominato CRM_FilterText.

  2. Aggiungere al report un elemento di casella di testo e impostarne la proprietà Value come indicato di seguito.
    =Parameters!CRM_FilterText.Value.

    Quando il report viene eseguito, il valore del CRM_FilterText parametro 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 procedura guidata report, se non si imposta un filtro predefinito, il filtro viene impostato automaticamente su tutti i record dell'entità modificati negli ultimi 30 giorni. Per la procedura di definizione di un filtro di report predefinito, vedere Pubblicazione di report.

Vedere anche

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