Allego file identico a quello della volta scorsa, ho solo aggiunto la lookup table "Calendario"
edit:sostituito file tramite allegandolo attraverso il forum.
Il problema principale è sempre lo stesso, come penso l'80% che immagino si hanno su DAX, il contesto o meglio capirlo.
L'esercizio come avrete già capito è visualizzare, per ogni giorno del mese di Gennaio 2015, il totale venduto e al suo fianco, il totale venduto incrementale.
La Sales Amount measure è una semplice
Codice: Seleziona tutto
Sales Amount := Sumx(Sales,Sales[Quantità]*Related(ADV_Products_LUT[Prodotto_Prezzo]))
Codice: Seleziona tutto
Running Total Sales Amount := CALCULATE([SALES_AMOUNT],filter(all(Calendario[Date]),Calendario[Date]<=max(Calendario[Date])))
Parto dal mio ragionamento:
1- Devo fare la stessa operazione di somma di Sales Amount ma devo far si che la misura avvenga con un filtro diverso, attualmente è il context filter determinato dalla mia Calendario[Date] inserita come riga di matrice.
2- Sappiamo che per "cambiare il filtro" devo utilizzare CALCULATE.
3- So che devo far in modo che il mio context filter non venga applicato, altrimenti la mia tabella viene filtrata per ogni data del filter context (01/01/2015, 02/01/2015 e cosi via) è sarei nella situazione del punto 1, aggiungo quindi come secondo argomento della CALCULATE la funzione FILTER.Come si elimina un context filter ? Mettendo una ALL() intorno alla tabella da filtrare.
4- Ora teoricamente, se non uso misure, sono nel "mondo normale", non ho al momento nessuno tipo di filtro applicato.
5- Devo definire l' espressione per filtrare la tabella Calendario[Date] (quindi più la colonna che la tabella) e qui mi confondo.
Voglio solo le righe che soddisfano la seguente espressione-> la data della riga è <= alla massima data della colonna.
Per quanto detto nel mio altro post, "max(Calendario[Date])" secondo il mio ragionamento dovrebbe essere "31/12/2017" in quanto non ho nessun contesto che interferisce con questa funzione,ne quello di filtro (eliminato tramite ALL()) ne row context, si esiste il row context di filter ma la mia funzione max() non è affetta da questo contesto e la mia funzione non è una measure quindi non avviene alcun "context transition".
Ho provato anche a ragionare "per assurdo", mettiamo quindi che la mia funzione max() venga influenzata dal filter context, prendiamo per esempio la riga della data "02/01/2015". La mia Calendario[Date] avrebbe solo la riga con quella data ed il massimo di 1 data è solo quella data.
Ma allora perché usare max ? Se tolgo max dovrebbe essere la stessa ... e invece no.
Scusate... sarò il vostro incubo