Mi è stato chiesto più volte di fare una lista delle buone prassi in DAX. Ho pensato, dopo un po’ di riflessione, si stravolgere il quesito e postare un articolo in cui dico cosa NON fare, per diverse ragioni, tra cui:
- in questo modo spero di stimolare i lettori allo studio del DAX – “perché NON fare una certa cosa” solitamente incuriosisce di più (o spaventa?);
- la lista di cosa NON fare è più corta di quella di cosa fare;
- ritengo più importante evitare problemi (cosa NON fare) rispetto ad ottimizzare (cosa fare).
Assunto quanto sopra, ecco la lista di cosa NON fare in DAX (in ordine decrescente di pericolosità):
- NON invocare la context transition in una tabella priva di chiave primaria (esempio: la tabella dei fatti); se è necessario farlo (cosa che discuterei, non mi è mai capitato che sia veramente necessario) bisogna assolutamente, prima, creare una colonna indice in Power Query (non è possibile scriverla in DAX) che funga da chiave primaria;
- NON usare ALLSELECTED se non se ne conosce, almeno, la semantica apparente (ignorare i filtri di una visual e lasciare quelli esterni alla visual stessa – in realtà, come accennato, questa semantica è apparente, ALLSELECTED non conosce le visual) e, in ogni caso, NON annidare ALLSELECTED in una misura chiamata in un’iterazione;
- NON filtrare tabelle intere ma il numero minimo di colonne necessario ad imporre quanto desiderato nel filter context;
- NON annidare più di due iterazioni;
- NON usare colonne di tipo Data/Ora ma solo Data. Se servono sia la data che l’ora di un fatto, separate la colonna di tipo Data/Ora in due con Power Query, in modo che una contenga la sola data e l’altra il solo orario;
- NON usare USERELATIONSHIP in una colonna calcolata, è un esercizio tedioso e inutile (a meno che non vogliate confrontarvi con uno dei casi più complessi del DAX a scopo didattico, il codice che ne deriva è così complesso da essere fortemente sconsigliato), bensì potete usare LOOKUPVALUE.
Mi piacerebbe ricevere segnalazioni e suggerimenti dai lettori su cosa potrei avere scordato. Commentate!
Buon DAX!