Migliorare le prestazioni dei report utilizzando i filtri
Data di pubblicazione: novembre 2016
Si applica a: Dynamics CRM 2015
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 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.
In questo argomento
Abilitare il filtro preliminare nei report basati su Fetch
Abilitare il filtro preliminare dei dati nei report basati su SQL (solo CRM locale)
Passare i filtri nel riepilogo del filtro
Filtri predefiniti
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 Microsoft 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>
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 nell'applicazione Web Microsoft Dynamics 365 o SQL Server Data Tools per abilitare il filtro preliminare per le entità principali e collegate, assicurarsi di:
Impostare il valore del parametro enableprefiltering su 1 per l'entità necessaria o collegata e specificare un nome parametro univoco per la proprietà prefilterparametername.
<fetch distinct="false" mapping="logical"> <entity name="account" enableprefiltering="1" prefilterparametername="CRM_FilteredAccount">
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>
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>
Abilitare il filtro preliminare dei dati nei report basati su SQL (solo CRM locale)
Vi sono due modi per abilitare il filtro preliminare dei dati nei report Basato su SQL di Microsoft Dynamics 365: automatico e esplicito.
Filtro preliminare automatico
Il filtro preliminare dei dati automatico è adatto per le query semplici. Per abilitare il filtro preliminare dei dati automatico in un report, è possibile utilizzare gli alias per le tabelle di entità nelle query. Questa operazione viene eseguita utilizzando un nome alias che inizia con CRMAF_.
Ad esempio, nella tabella seguente viene mostrata una semplice query modificata per consentire il filtro preliminare nell'entità Account.
Query senza filtro preliminare |
Query modificata con il filtro preliminare abilitato |
---|---|
|
|
Quando si abilita le funzionalità di filtro preliminare dati automatica utilizzando CRMAF_, Microsoft Dynamics 365 modifica la query per includere un parametro (ad esempio P1) quando viene caricato in Microsoft Dynamics 365, come illustrato nella tabella seguente.
Query con filtro preliminare automatico |
Autore modifica Microsoft Dynamics 365 |
---|---|
|
|
Microsoft Dynamics 365 passerà una query al parametro P1 a seconda di come si esegue il filtro del report. In altre parole, il filtro preliminare dei dati automatico funge da query secondari in una query esistente.
Negli esempi seguenti viene illustrato come Microsoft Dynamics 365 passa due query al parametro (P1) secondo diversi requisiti di filtro. In questo esempio, si presuppone che si esegua il report dall'area Report in Microsoft Dynamics 365 e che si utilizzi l'opzione di filtro di dati.
Esempio 1: Per visualizzare solo gli account attivi, la query risultante dovrebbe essere la seguente:
SELECT <column1>, <column2>, <columnN>
FROM (SELECT FilteredAccount.* FROM FilteredAccount WHERE statecode = 0)
AS CRMAF_FilteredAccount
Esempio 2: Se ci si trova in un account specifico e si esegue 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 si sta cercando un elenco di tre account selezionati e si sceglie l'opzione per eseguire il report nei 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 effettuato l'aliasing di tutti i nomi della tabella di entità, l'interfaccia utente Ricerca avanzata viene automaticamente inclusa nel report distribuito quando viene eseguita da Microsoft Dynamics 365.
Per effettuare l'aliasing di un nome tabella di entità nel Generatore di query, fare clic con il pulsante destro del mouse su ogni tabella nel report, selezionare Proprietà e quindi immettere il valore dell'alias nel modulo CRMAF_FilteredEntity, ad esempio CRMAF_FilteredAccount.
Limitazione del filtro preliminare automatico
Quando utilizzare il prefisso CRMAF_ per abilitare il filtro preliminare automatico, in Microsoft Dynamics 365 viene aggiunto un parametro nella query. Con una query più complessa, ad esempio una query che utilizza le istruzioni UNION, ciò potrebbe portare a risultati non previsti poiché Microsoft Dynamics 365 può aggiungere solo il parametro alla prima query.
Ad esempio, prendere in considerazione la seguente query che include 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'
Durante il caricamento del report, Microsoft Dynamics 365 potrebbe filtrare solo la prima query utilizzando il parametro. Ciò comporterà che il filtro non verrà 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, mentre si esegue il report dall'area Report in Microsoft Dynamics 365 e si sceglie il filtro come fatturato annuale maggiori di 1.000.000, Microsoft Dynamics 365 passerà una query al parametro P1 nel modo seguente:
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 restituisce solo gli account in Florida con ricavi annuali maggiori di $1.000.000 e tutti gli account In California e questa non era l'opzione desiderata. Si desiderava visualizzare tutti gli account in Florida e in California con ricavi annuali maggiori di $1.000.000.
Se si scarica il report da Microsoft Dynamics 365 e lo si apre in Microsoft Visual Studio, verrà visualizzata la versione originale del report caricata in Microsoft Dynamics 365. Se si scarica il report direttamente da Microsoft SQL Server Reporting Services, si noterà che Microsoft Dynamics 365 ha modificato la query ma non ha posizionato il parametro dove si desiderava.
Per le query complesse, è necessario utilizzare il filtro preliminare esplicito.
Filtro preliminare esplicito
Per query complesse come quelle che utilizzano le istruzioni UNION, potrebbe essere necessario utilizzare il filtro preliminarmente esplicito. A differenza del filtro preliminare automatico, Microsoft Dynamics 365 non riscrive la query di report passando i valori ai parametri durante il filtro preliminare esplicito quando questo report viene caricato in Microsoft Dynamics 365. È necessario apportare le modifiche desiderate al report in modo esplicito aggiungendo il parametro del filtro preliminare 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 utilizza questo parametro di un'espressione della query SQL dinamica. Questo parametro consente il filtro dei dati della tabella ottenuti dalla visualizzazione filtrata specificata.
Facendo lo stesso esempio illustrato in precedenza per evidenziare il limite del filtro preliminare automatico, nella tabella seguente viene mostrata una query con il filtro preliminare automatico modificato per utilizzare il filtro preliminare esplicito con SQL dinamico. Si presuppone inoltre che durante l'esecuzione del report nell'area Report in Microsoft Dynamics 365, il filtro è stato applicato come fatturato annuale maggiore di 1.000.000.
Query con filtro preliminare automatico |
Query modificata per l'utilizzo esplicito del filtro preliminare |
---|---|
|
|
Nota
La maggior parte dei report Basato su SQL di Microsoft Dynamics 365 standard utilizzano l'opzione di filtro preliminare esplicita.
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 di Microsoft Dynamics 365, 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 Microsoft Dynamics 365.
Per aggiungere un riepilogo del filtro a un report, eseguire la procedura seguente:
Creare un parametro stringa nascosto denominato CRM_FilterText.
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.
Vedere anche
Scrittura dei report di CRM 2015 locale
Considerazioni sulla creazione dei report inMicrosoft Dynamics 365 (online)
© 2016 Microsoft Corporation. Tutti i diritti sono riservati. Copyright