Torno da voi per un tema che (so benissimo) è molto complicato da risolvere senza avere un file di riferimento.
TEMA: calcoli lenti di misure
SVOLGIMENTO: ho creato delle misure che a me sembrano piuttosto "semplici", ma che hanno da valutare un database con circa 5mln di righe (in cui ci sono solo i consuntivi di 2 anni, ergo man mano che entreranno degli altri consuntivi il database aumenterà ancor di più le dimensioni, ergo la questione può solo che peggiorare)...
Le misure funzionano secondo gli scopi che mi sono prefissato (e ci ho perso un sacco di tempo per testarle)...
Però non è accettabile aspettare dai 3 ai 5 minuti (li ho cronometrati) per fare in modo che i report che utilizzano quelle misure si aggiornino.
Vorrei davvero condividere con voi il dataset, ma dato che contiene dati aziendali sensibili non posso.
Ne tanto meno posso crearne una bozza perché vai a riempire 5mln di righe con dati "inventati"....non saprei nemmeno come fare.
Per questo faccio un tentativo.
Vi posto le misure che danno "più fastidio" quelle più lente sperando nella vostra onniscienza
PLAN
Codice: Seleziona tutto
PLAN = CALCULATE(
SUMX(
ADDCOLUMNS(
SUMMARIZE(FBFF, Promo[DataRIF*], Promo[CP], Cliente[Cliente], Prodotto[Codice]),
"Stima", IF([MEDIA] = BLANK(), CALCULATE(SUM(FBFF[Stima])), [MEDIA])
),
[Stima]
),
KEEPFILTERS(Tempo[Year] = YEAR(NOW())),
USERELATIONSHIP(Tempo[Data], FBFF[DataRIF*])
)
Nella misura PLAN utilizzo la misura MEDIA:
Codice: Seleziona tutto
MEDIA = CALCULATE(
SUMX(
ADDCOLUMNS(
SUMMARIZE(FBFF, Promo[CP], Cliente[Cliente], Prodotto[Codice]),
"Num", [NUMERICA],
"Ord", CALCULATE(SUM(FBFF[Ordinato]))
),
[Ordinato] / [Numerica]
),
USERELATIONSHIP(Tempo[Data], FBFF[DataRIF*]),
Tempo[Year] > YEAR(NOW())-2,
ALL(Tempo),
Promo[FSO]< NOW()
)
Nella misura MEDIA utilizzo la misura NUMERICA:
Codice: Seleziona tutto
NUMERICA = COUNTROWS(
ADDCOLUMNS(
SUMMARIZE(FBFF, Promo[DataRIF*], Promo[CP], Cliente[Cliente], Prodotto[Codice]),
"Ord", CALCULATE(SUM(FBFF[Ordinato]))
)
)
Note:
-Sorry per l'identazione, non proprio da manuale di alcune funzioni tipo SUMMARIZE, ma a mio modo di vedere le cose identare SUMMARIZE usando una riga per ogni parametro distoglie dalla lettura della misura.
-FBFF è la tabella dei Fatti.
-Promo, Cliente, Prodotto e Tempo sono le tabelle delle Dimensioni.
-Per il calcolo di MEDIA non ho utilizzato AVERAGEX perché il dataset che c'è sotto ha righe non aggregate sul livello di dettaglio che serve a me per il calcolo della media.
-USERELATIONSHIP è utilizzata nelle misure perché la Tabella Tempo è collegata alla Tabella FBFF con una doppia relazione (una attiva e l'altra no).
Quella non attiva è, appunto, Tempo[Data] -> FBFF[DataRIF*].
-La colona [DataRIF*] è "nativa" della tabella Promo (viene calcolata come colonna aggiuntiva che restituisce il mese della promo), ma poi portata anche nella tabella FBFF sulla quale è collegata la Tabella Tempo. Collegare Tempo con Promo non è possibile perché Promo è collegata a FBFF...mi da (ovviamente) errore.
Grazie mille per il tempo che mi dedicherete.