Contesto nelle formule DAX

Si applica a
Excel per Microsoft 365 Excel 2024 Excel 2021 Excel 2019 Excel 2016

Il contesto consente di eseguire un'analisi dinamica, in cui i risultati di una formula possono cambiare per riflettere la riga o la selezione 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. Illustra come viene valutato il contesto per le formule nelle colonne calcolate e nelle tabelle pivot.

L'ultima parte di questo articolo include collegamenti a esempi dettagliati che illustrano come i risultati delle formule cambiano in base al contesto.

Comprendere il contesto

Le formule in Power Pivot possono essere interessate dai filtri applicati in una tabella pivot, dalle relazioni tra tabelle e dai filtri usati nelle formule. Il contesto è ciò che rende possibile eseguire l'analisi dinamica. Comprendere il contesto è importante per la compilazione e la risoluzione dei problemi delle formule.

Esistono diversi tipi di contesto: contesto di riga, contesto di query e contesto di filtro.

Il contesto della riga può essere considerato come "la riga corrente". Se è stata creata una colonna calcolata, il contesto di riga è costituito dai valori di ogni singola riga e dai valori nelle colonne correlate 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 subset di dati creato in modo implicito per ogni cella di una tabella pivot, in base alle intestazioni di riga e colonna.

Il contesto del 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.

Inizio pagina

Contesto riga

Se si crea una formula in una colonna calcolata, il contesto di riga per tale 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] + [Imposta] che somma due colonne della stessa tabella. Questa formula si comporta come le formule in una tabella di Excel, che fanno automaticamente riferimento ai valori della stessa riga. Si noti che le tabelle sono diverse dagli intervalli: non è possibile fare riferimento a un valore della riga precedente alla riga corrente usando la notazione di intervallo e non è possibile fare riferimento a un singolo valore arbitrario in una tabella o in una cella. È necessario usare sempre tabelle e colonne.

Il contesto delle righe segue automaticamente le relazioni tra le tabelle per determinare quali righe nelle tabelle correlate sono associate alla riga corrente.

La formula seguente, ad esempio, usa la funzione CORRELATO per recuperare un valore fiscale da una tabella correlata, in base all'area geografica di spedizione dell'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.

= [Trasporto] + RELAZIONATO('Area'[Tassa])

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 a più righe

DAX include inoltre funzioni che eseguono l'iterazione dei calcoli su una tabella. Queste funzioni possono avere più righe correnti e contesti di riga corrente. In termini di programmazione, è possibile creare formule che ricorsivano su un ciclo interno ed esterno.

Si supponga, ad esempio, che la cartella di lavoro contenga una tabella Prodotti e una tabella Vendite . È possibile esaminare l'intera tabella vendite, piena di transazioni che coinvolgono più prodotti, e trovare la quantità più grande ordinata per ogni prodotto in una singola transazione.

In Excel questo calcolo richiede una serie di riepiloghi intermedi, che dovrebbero essere ricompilati se i dati cambiano. Gli utenti esperti di Excel possono creare formule di matrice adeguate. 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(FILTRO(Vendite,[ProdKey]=PRIMA([ProdKey])),Vendite[QtàOrdine])

Per una procedura dettagliata di questa formula, vedere la funzione PRECEDENTE.

In breve, la funzione EARLIER archivia il contesto di riga dell'operazione che precede l'operazione corrente. In ogni momento, la funzione archivia sempre 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 alimenta automaticamente i valori tra i due cicli in modo che sia possibile creare aggregazioni complesse.

Inizio pagina

Contesto di query

Il contesto della query fa riferimento al subset di dati recuperati 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 nella tabella pivot. Il set di dati recuperato rappresenta il contesto di query per ogni cella.

Poiché il contesto può cambiare a seconda della posizione in cui si posiziona la formula, anche i risultati della formula cambiano a seconda che la si usi in una tabella pivot con molti raggruppamenti e filtri o in una colonna calcolata senza filtri e con un contesto minimo.

Si supponga, ad esempio, di creare questa semplice formula che somma i valori nella colonna Profitti della tabella Vendite :

=SOMMA('Vendite'[Profitto])

Se si usa questa formula in una colonna calcolata all'interno della tabella Vendite , i risultati della formula saranno uguali per l'intera tabella, perché il contesto della query per la formula è sempre l'intero set di dati della tabella Vendite . I tuoi risultati avranno profitto per tutte le regioni, tutti i prodotti, tutti gli anni e così via.

Tuttavia, in genere non si vuole vedere lo stesso risultato centinaia di volte, ma invece si vuole ottenere il profitto per un determinato anno, un particolare paese o regione, un particolare prodotto o una combinazione di questi, e quindi ottenere un totale complessivo.

In una tabella pivot è facile cambiare il contesto aggiungendo o rimuovendo intestazioni di colonna e di riga e aggiungendo o rimuovendo filtri dei dati. È possibile creare una formula come quella descritta sopra, in una misura e quindi rilasciarla 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. Le operazioni di slicing e filtro influiscono anche sul contesto. Di conseguenza, la stessa formula usata in una tabella pivot viene valutata in un contesto di query diverso per ogni cella.

Inizio pagina

Contesto del filtro

Il contesto del filtro viene aggiunto quando si specificano vincoli di filtro sul set di valori consentiti in una colonna o in una tabella, usando gli argomenti di una formula. Il contesto del filtro si applica sopra altri contesti, come il contesto delle righe o il contesto della query.

Ad esempio, una tabella pivot calcola i valori per ogni cella in base alle intestazioni di riga e 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 utilizzati dalla formula. È anche possibile cancellare selettivamente i filtri per colonne specifiche.

Per altre informazioni su come creare filtri all'interno delle formule, vedere le funzioni di filtro.

Per un esempio di come i filtri possono essere cancellati per creare totali complessivi, vedere la funzione ALL.

Per esempi su come cancellare e applicare selettivamente filtri all'interno delle formule, vedere la funzione ALLEXCEPT.

È pertanto necessario rivedere la definizione delle misure o delle formule utilizzate in una tabella pivot per conoscere il contesto del filtro durante l'interpretazione dei risultati delle formule.

Inizio pagina

Determinazione del contesto nelle formule

Quando si crea una formula, Power Pivot per Excel verifica prima di tutto 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 errore.

Il contesto viene determinato, come descritto nelle sezioni precedenti, usando le tabelle disponibili nella cartella di lavoro, le eventuali relazioni tra le tabelle e gli eventuali filtri applicati.

Se, ad esempio, sono stati appena importati alcuni dati in una nuova tabella e non sono stati applicati filtri, l'intero set di colonne della tabella fa parte del contesto corrente. Se si hanno più tabelle collegate tra loro da relazioni e si sta usando una tabella pivot filtrata aggiungendo intestazioni di colonna e usando filtri dei dati, il contesto include le tabelle correlate e gli eventuali filtri sui dati.

Il contesto è un concetto potente che può anche rendere difficile la risoluzione dei problemi relativi alle formule. È consigliabile iniziare con formule e relazioni semplici per vedere come funziona il contesto e quindi sperimentare 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 riportato 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 in questo argomento illustrano anche come incorporare filtri in altre funzioni che eseguono aggregazioni.
  • La funzione ALL imposta il contesto all'interno di una formula. È utilizzabile per eseguire l'override dei filtri applicati come risultato del contesto di query.
  • La funzione ALLEXCEPT consente di rimuovere tutti i filtri tranne uno specificato. Entrambi gli argomenti includono esempi che illustrano come creare formule e comprendere contesti complessi.
  • Le funzioni EARLIER e EARLIEST consentono di scorrere le tabelle eseguendo calcoli, facendo riferimento a un valore da un ciclo interno. Se hai familiarità con il concetto di ricorsione e con i cicli interni ed esterni, apprezzerai il potere fornito dalle funzioni EARLIER e PRIMANCE. Se non si ha familiarità con questi concetti, è consigliabile seguire attentamente i passaggi dell'esempio per vedere come vengono utilizzati i contesti interno ed esterno nei calcoli.

Inizio pagina

Integrità referenziale

In questa sezione vengono illustrati alcuni concetti avanzati relativi ai valori mancanti nelle tabelle di Power Pivot connesse da relazioni. Questa sezione può essere utile se si hanno cartelle di lavoro con più tabelle e formule complesse e si ha bisogno di aiuto per comprendere i risultati.

Se non si ha familiarità con i concetti relativi ai dati relazionali, è consigliabile leggere prima l'argomento introduttivo Cenni preliminari 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 che viene usata per gestire tutte le righe non corrispondenti della tabella correlata. Si comporta in effetti come un outer join SQL.

Nelle tabelle pivot, se si raggruppano i dati su un lato della relazione, tutti i dati senza corrispondenza sul lato molti della relazione vengono raggruppati e verranno inclusi nei totali con un'intestazione di riga vuota. L'intestazione vuota è approssimativamente equivalente al "membro sconosciuto".

Informazioni sul membro sconosciuto

Il concetto di membro sconosciuto è probabilmente familiare se si sono usati sistemi di database multidimensionali, ad esempio SQL Server Analysis Services. Se il termine è nuovo, l'esempio seguente spiega cos'è il membro sconosciuto e come influisce sui calcoli.

Si supponga di creare un calcolo che somma le vendite mensili di ogni negozio, ma che in una colonna della tabella Vendite manca un valore per il nome del negozio. Dato che le tabelle per Store e Sales sono collegate dal nome del negozio, cosa ci si aspetta che accada nella formula? In che modo la tabella pivot deve raggruppare o visualizzare i dati sulle vendite che non sono correlati a un negozio esistente?

Questo problema è comune nei data warehouse, in cui grandi tabelle di dati dei fatti devono essere correlate logicamente alle tabelle delle dimensioni che contengono informazioni su negozi, aree e altri attributi utilizzati per la categorizzazione e il calcolo dei fatti. Per risolvere il problema, tutti i nuovi fatti non correlati a un'entità esistente vengono temporaneamente assegnati al membro sconosciuto. Questo è il motivo per cui i fatti non correlati appariranno 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.

Inizio pagina