Usa le variabili per migliorare le formule di DAX
Come specialista in modellazione dei dati, scrivere e fare il debug di alcuni calcoli and e DAX può essere impegnativo. È comune che i requisiti di calcolo complessi spesso implicano la scrittura di espressioni composte or complesse. Le espressioni composte possono comportare l'uso di molte funzioni annidate, and possibilmente il riutilizzo della logica dell'espressione.
L'uso di variabili nelle formule DAX consente di scrivere calcoli più complessi and efficienti. Le variabili possono migliorare prestazioni, affidabilità, leggibilità and ridurre la complessità.
In questo articolo verranno illustrati i tre vantaggi first utilizzando un esempio measure per year-over-year (YoY) nella crescita delle vendite. La formula per la crescita delle vendite YoY è le vendite del periodo, meno le vendite per lo stesso periodo lastyear, diviso per le vendite per lo stesso periodo lastyear.
Iniziamo con la seguente definizione measure.
Sales YoY Growth % =
DIVIDE(
([Sales] - CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))),
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
)
Il measure produce il risultato corretto, vediamo now come può essere migliorato.
Migliorare le prestazioni
Si noti che la formula ripete l'espressione che calcola "stesso periodo lastyear". Questa formula è inefficiente perché richiede Power BI per evaluate la stessa espressione due volte. La definizione di measure può essere resa più efficiente usando una variabile VAR.
La definizione di measure seguente rappresenta un miglioramento. Usa un'espressione per assegnare il risultato "stesso periodo lastyear" a una variabile denominata SalesPriorYear. La variabile viene quindi usata due volte nell'espressione RETURN.
Sales YoY Growth % =
VAR SalesPriorYear =
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)
Il measure continua a produrre il risultato corretto, and lo fa in circa metà delle query time.
Migliorare la leggibilità
Nella definizione previousmeasure si noti che la scelta del nome della variabile semplifica la comprensione dell'espressione RETURN. L'espressione è breve e auto-descrittiva and.
Semplificare il debug
Le variabili consentono anche di eseguire il debug di una formula. Per testare un'espressione assegnata a una variabile, si riscrive temporaneamente l'espressione RETURN in modo che restituisca la variabile.
La seguente definizione di measure restituisce solo la variabile SalesPriorYear. Si noti come imposta come commento l'espressione RETURN prevista. Questa tecnica consente di ripristinarla facilmente al termine del debug.
Sales YoY Growth % =
VAR SalesPriorYear =
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
--DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)
SalesPriorYear
Riduci la complessità
Nelle versioni di earlier di DAXle variabili erano not ancora supportate. Espressioni complesse che introducevano nuovi contesti di filter erano necessarie per utilizzare le funzioni di EARLIERorEARLIESTDAX e fare riferimento a contesti esterni di filter. Sfortunatamente, i modelli di dati hanno rilevato che queste funzioni sono difficili da comprendere and uso.
Le variabili vengono sempre valutate al di fuori del filters a cui si applica l'espressione RETURN. Per questo motivo, quando si usa una variabile all'interno di un contesto di filter modificato, ottiene lo stesso risultato della funzione EARLIEST. È quindi possibile evitare l'uso delle funzioni di EARLIERorEARLIEST. Ciò significa che è possibile now scrivere formule meno complesse, and più facili da comprendere.
Si consideri la definizione di colonna calcolata seguente aggiunta alla tabella Subcategory. Valuta un rank per ogni sottocategoria product in base alla colonna Sottocategoria Salesvalues.
Subcategory Sales Rank =
COUNTROWS(
FILTER(
Subcategory,
EARLIER(Subcategory[Subcategory Sales]) < Subcategory[Subcategory Sales]
)
) + 1
La funzione
La definizione di colonna calcolata può essere migliorata usando una variabile anziché la funzione EARLIER. La variabile CurrentSubcategorySales
Subcategory Sales Rank =
VAR CurrentSubcategorySales = Subcategory[Subcategory Sales]
RETURN
COUNTROWS(
FILTER(
Subcategory,
CurrentSubcategorySales < Subcategory[Subcategory Sales]
)
) + 1
Related contenuto
- articolo VARDAX
- Learning path: Usare DAX in Power BI Desktop
- Domande? Provare a chiedere all' community di Power BI