Il contesto consente di eseguire analisi dinamiche, in cui i risultati di una formula possono cambiare in modo da riflettere la riga o la selezione della cella corrente e anche i dati correlati. La comprensione del contesto e l'uso efficace del contesto sono molto importanti per la creazione di formule ad alte prestazioni, analisi dinamiche e per la risoluzione dei problemi nelle formule.
Questa sezione definisce i diversi tipi di contesto: contesto di riga, contesto di query e contesto di filtro. Spiega come viene valutato il contesto per le formule nelle colonne calcolate e nelle tabelle pivot.
L'ultima parte di questo articolo contiene collegamenti a esempi dettagliati che illustrano come cambiano i risultati delle formule in base al contesto.
Informazioni sul contesto
Le formule in Power Pivot possono essere influenzate dai filtri applicati in una tabella pivot, dalle relazioni tra tabelle e dai filtri usati nelle formule. Il contesto è ciò che consente di eseguire analisi dinamiche. La comprensione del contesto è importante per la creazione e la risoluzione dei problemi delle formule.
Esistono diversi tipi di contesto: contesto di riga, contesto di query e contesto di filtro.
Il contesto di riga può essere considerato "la riga corrente". Se è stata creata una colonna calcolata, il contesto di riga è costituito dai valori di ogni singola riga e dai valori delle colonne correlati alla riga corrente. Esistono anche alcune funzioni (EARLIER e EARLIEST) che ottengono un valore dalla riga corrente e quindi usano tale valore durante l'esecuzione di un'operazione su un'intera tabella.
Il contesto di query fa riferimento al sottoinsieme di dati creato in modo implicito per ogni cella di una tabella pivot, a seconda delle intestazioni di riga e di colonna.
Il contesto di filtro è il set di valori consentiti in ogni colonna, in base ai vincoli di filtro applicati alla riga o definiti dalle espressioni di filtro all'interno della formula.
Contesto di riga
Se si crea una formula in una colonna calcolata, il contesto di riga della formula include i valori di tutte le colonne della riga corrente. Se la tabella è correlata a un'altra tabella, il contenuto include anche tutti i valori dell'altra tabella correlati alla riga corrente.
Si supponga, ad esempio, di creare una colonna calcolata, =[SpeseTrasporto] + [Imposte], che somma due colonne della stessa tabella. Questa formula si comporta come le formule di una tabella di Excel, che fa automaticamente riferimento a valori della stessa riga. Si noti che le tabelle sono diverse dagli intervalli: non è possibile fare riferimento a un valore dalla riga prima della riga corrente usando la notazione di intervallo e non è possibile fare riferimento a un singolo valore arbitrario in una tabella o in una cella. È sempre necessario usare tabelle e colonne.
Il contesto di riga segue automaticamente le relazioni tra tabelle per determinare quali righe nelle tabelle correlate sono associate alla riga corrente.
Ad esempio, la formula seguente usa la funzione RELATED per recuperare un valore d'imposta da una tabella correlata, in base all'area a cui è stato spedito l'ordine. Il valore dell'imposta viene determinato usando il valore per l'area nella tabella corrente, cercando l'area nella tabella correlata e quindi ottenendo l'aliquota di imposta per tale area dalla tabella correlata.
= [SpeseTrasporto] + RELATED('Region'[TaxRate])
Questa formula ottiene semplicemente l'aliquota di imposta per l'area corrente, dalla tabella Area. Non è necessario conoscere o specificare la chiave che connette le tabelle.
Contesto più righe
Inoltre, DAX include funzioni che iterazione calcoli su una tabella. Queste funzioni possono avere più righe correnti e contesti di riga correnti. In termini di programmazione, è possibile creare formule che si ripete su un ciclo interno ed esterno.
Si supponga, ad esempio, che la cartella di lavoro contenga una tabella Prodotti e una tabella Vendite . È consigliabile esaminare l'intera tabella delle vendite, piena di transazioni relative a più prodotti, e trovare la quantità più grande ordinata per ogni prodotto in una transazione.
In Excel, questo calcolo richiede una serie di riepiloghi intermedi, che dovrebbero essere ricompilati se i dati cambiassero. Gli utenti più bravi di Excel potrebbero essere in grado di creare formule di matrice in grado di eseguire il processo. In alternativa, in un database relazionale è possibile scrivere sottoselezioni annidate.
Tuttavia, con DAX è possibile creare una singola formula che restituisce il valore corretto e i risultati vengono aggiornati automaticamente ogni volta che si aggiungono dati alle tabelle.
=MAXX(FILTER(Sales,[ProdKey]=EARLIER([ProdKey])),Sales[OrderQty])
Per una descrizione dettagliata di questa formula, vedere la funzione EARLIER.
In breve, la funzione EARLIER archivia il contesto di riga dell'operazione precedente all'operazione corrente. In ogni momento, la funzione archivia due set di contesto in memoria: un set di contesto rappresenta la riga corrente per il ciclo interno della formula e un altro set di contesto rappresenta la riga corrente per il ciclo esterno della formula. DAX inserisce automaticamente i valori tra i due cicli in modo da poter creare aggregazioni complesse.
Contesto di query
Il contesto di query fa riferimento al sottoinsieme di dati che viene recuperato in modo implicito per una formula. Quando si rilascia una misura o un altro campo valore in una cella di una tabella pivot, il motore di Power Pivot esamina le intestazioni di riga e di colonna, i filtri dei dati e i filtri del rapporto per determinare il contesto. Quindi, Power Pivot esegue i calcoli necessari per popolare ogni cella della tabella pivot. Il set di dati che viene recuperato è il contesto di query per ogni cella.
Poiché il contesto può variare a seconda della posizione della formula, i risultati della formula variano a seconda che la formula venga usata in una tabella pivot con molti raggruppamenti e filtri oppure in una colonna calcolata senza filtri e contesto minimo.
Si supponga, ad esempio, di creare questa semplice formula che somma i valori nella colonna Profit della tabella Sales :
=SOMMA('Vendite'[Profitto])
Se si usa questa formula in una colonna calcolata all'interno della tabella Vendite , i risultati della formula saranno gli stessi per l'intera tabella, perché il contesto di query per la formula è sempre l'intero set di dati della tabella Vendite . I risultati avranno un profitto per tutte le aree geografiche, tutti i prodotti, tutti gli anni e così via.
Tuttavia, in genere non si vuole visualizzare lo stesso risultato centinaia di volte, ma si vuole invece ottenere il profitto per un anno specifico, un determinato paese o area geografica, un particolare prodotto o una combinazione di questi, e quindi ottenere un totale complessivo.
In una tabella pivot è facile modificare il contesto aggiungendo o rimuovendo intestazioni di riga e colonna e aggiungendo o rimuovendo filtri dei dati. È possibile creare una formula come quella precedente, in una misura, e quindi inserirla in una tabella pivot. Ogni volta che si aggiungono intestazioni di colonna o di riga alla tabella pivot, si modifica il contesto di query in cui viene valutata la misura. Anche le operazioni di filtro e slicing influiscono sul contesto. Di conseguenza, la stessa formula, usata in una tabella pivot, viene valutata in un contesto di query diverso per ogni cella.
Contesto filtro
Il contesto di filtro viene aggiunto quando si specificano vincoli di filtro per il set di valori consentiti in una colonna o in una tabella usando gli argomenti di una formula. Il contesto di filtro si applica sopra altri contesti, ad esempio il contesto di riga o di query.
Ad esempio, una tabella pivot calcola i valori per ogni cella in base alle intestazioni di riga e di colonna, come descritto nella sezione precedente sul contesto di query. Tuttavia, all'interno delle misure o delle colonne calcolate aggiunte alla tabella pivot, è possibile specificare espressioni di filtro per controllare i valori usati dalla formula. È anche possibile cancellare in modo selettivo i filtri in determinate colonne.
Per altre informazioni su come creare filtri all'interno delle formule, vedere Funzioni filtro.
Per un esempio di come cancellare i filtri per creare totali complessivi, vedere la funzione ALL.
Per esempi su come cancellare e applicare filtri in modo selettivo nelle formule, vedere la funzione ALLEXCEPT.
Di conseguenza, è necessario esaminare la definizione di misure o formule usate in una tabella pivot in modo da essere a conoscenza del contesto di filtro quando si interpretano i risultati delle formule.
Determinazione del contesto nelle formule
Quando si crea una formula, Power Pivot per Excel verifica prima la sintassi generale e quindi i nomi di colonne e tabelle forniti rispetto alle possibili colonne e tabelle nel contesto corrente. Se Power Pivot non riesce a trovare le colonne e le tabelle specificate dalla formula, verrà visualizzato un messaggio di errore.
Il contesto viene determinato come descritto nelle sezioni precedenti, usando le tabelle disponibili nella cartella di lavoro, le eventuali relazioni tra le tabelle ed eventuali filtri applicati.
Ad esempio, se sono stati appena importati alcuni dati in una nuova tabella e non sono stati applicati filtri, l'intero set di colonne nella tabella fa parte del contesto corrente. Se si hanno più tabelle collegate da relazioni e si sta lavorando in una tabella pivot filtrata aggiungendo intestazioni di colonna e usando i filtri dei dati, il contesto include le tabelle correlate ed eventuali filtri sui dati.
Il contesto è un concetto efficace che può anche rendere difficile la risoluzione dei problemi delle formule. È consigliabile iniziare con formule e relazioni semplici per vedere come funziona il contesto e quindi iniziare a sperimentare con formule semplici nelle tabelle pivot. La sezione seguente fornisce anche alcuni esempi di come le formule usano diversi tipi di contesto per restituire dinamicamente i risultati.
Esempi di contesto nelle formule
-
La funzione RELATED espande il contesto della riga corrente per includere i valori in una colonna correlata. In questo modo è possibile eseguire ricerche. L'esempio in questo argomento illustra l'interazione tra filtro e contesto di riga.
-
La funzione FILTRO consente di specificare le righe da includere nel contesto corrente. Gli esempi di questo argomento illustrano anche come incorporare filtri in altre funzioni che eseguono aggregazioni.
-
La funzione TUTTE imposta il contesto all'interno di una formula. È possibile usarlo per ignorare i filtri applicati come risultato del contesto di query.
-
La funzione ALLEXCEPT consente di rimuovere tutti i filtri tranne uno specificato dall'utente. Entrambi gli argomenti includono esempi che forniscono informazioni dettagliate sulla creazione di formule e sulla comprensione di contesti complessi.
-
Le funzioni EARLIER e EARLIEST consentono di scorrere le tabelle eseguendo calcoli, facendo riferimento a un valore da un ciclo interno. Se si ha familiarità con il concetto di ricorsione e con i cicli interni ed esterni, si apprezzerà il potere fornito dalle funzioni EARLIER e EARLIEST. Se non si ha familiarità con questi concetti, seguire attentamente i passaggi dell'esempio per vedere come vengono usati i contesti interni ed esterni nei calcoli.
Integrità referenziale
In questa sezione vengono illustrati alcuni concetti avanzati relativi ai valori mancanti in Power Pivot tabelle connesse da relazioni. Questa sezione può essere utile se si hanno cartelle di lavoro con più tabelle e formule complesse e serve aiuto per comprendere i risultati.
Per i nuovi concetti relativi ai dati relazionali, è consigliabile leggere prima l'argomento introduttivo Panoramica sulle relazioni.
Integrità referenziale e relazioni di Power Pivot
Power Pivot non richiede l'applicazione dell'integrità referenziale tra due tabelle per definire una relazione valida. Viene invece creata una riga vuota all'estremità "uno" di ogni relazione uno-a-molti e viene usata per gestire tutte le righe non corrispondenti della tabella correlata. Si comporta in modo efficace come un SQL outer join.
Nelle tabelle pivot, se si raggruppano i dati in base al lato uno della relazione, tutti i dati non corrispondenti sul lato molti della relazione verranno raggruppati e inclusi nei totali con un'intestazione di riga vuota. L'intestazione vuota equivale approssimativamente al "membro sconosciuto".
Informazioni sul membro sconosciuto
Il concetto di membro sconosciuto probabilmente è familiare se si è lavorato con sistemi di database multidimensionali, ad esempio SQL Server Analysis Services. Se il termine non è recente, l'esempio seguente spiega cos'è il membro sconosciuto e come influisce sui calcoli.
Si supponga di creare un calcolo che somma le vendite mensili per ogni negozio, ma a una colonna della tabella Vendite manca un valore per il nome dello store. Dato che le tabelle per Store e Sales sono connesse dal nome dello store, cosa ci si aspetterebbe di fare nella formula? Come deve essere visualizzato il gruppo di tabelle pivot o i dati sulle vendite non correlati a un negozio esistente?
Questo problema è comune nei data warehouse, in cui le tabelle dei fatti di grandi dimensioni devono essere correlate logicamente alle tabelle delle dimensioni che contengono informazioni su archivi, aree e altri attributi usati per categorizzare e calcolare fatti. Per risolvere il problema, eventuali nuovi fatti non correlati a un'entità esistente vengono assegnati temporaneamente al membro sconosciuto. Ecco perché i fatti non correlati verranno visualizzati raggruppati in una tabella pivot sotto un'intestazione vuota.
Trattamento dei valori vuoti rispetto alla riga vuota
I valori vuoti sono diversi dalle righe vuote aggiunte per includere il membro sconosciuto. Il valore vuoto è un valore speciale usato per rappresentare valori Null, stringhe vuote e altri valori mancanti. Per altre informazioni sul valore vuoto e su altri tipi di dati DAX, vedere Tipi di dati nei modelli di dati.