Da Tabella a Misura L’argomento è risolto

Il software per la BI di Microsoft, leader nel mercato
Avatar utente

Andrea90
Messaggi: 2193 | Topic creati
Iscritto il: dom 28 giu 2020, 19:41
Luogo: Bologna
Ringraziato: 666 volte
Contatta:

Da Tabella a Misura

Messaggio da Andrea90 »

xalbex,

Se ti connetti in live no non credo tu possa perché in realtà non stai importando nulla in Pbi, se invece sei in. import mode puoi modificarlo.

Andrea


Se hai gradito l'aiuto che hai ricevuto considera di contribuire alle spese per il mantenimento del forum facendo una libera DONAZIONE --> Link

Ricordarsi di segnare come "RISOLTE" le discussioni per le quali si è ricevuto un feedback positivo. Per vedere come fare --> Link
Avatar utente

Autore del topic
xalbex
Messaggi: 41 | Topic creati
Iscritto il: dom 30 ott 2022, 11:07
Luogo: Parma
Ringraziato: 4 volte

Da Tabella a Misura

Messaggio da xalbex »

Ragazzi ritorno da voi perché sto impazzendo.
Forse non ho ancora ben capito le logiche di PowerBI e per questo mi confondo un pò.
Ho fatto miliardi di prove ma non riesco a risolvere il problema.
Parto dall'inizio.
Ho una tabella dei fatti - FactDPF - che ha questo aspetto:
.....
2021 | C1| D2 | P1 | 0,15
2021 | C1| D1 | P1 | 0,26
2022 | C1| D1 | P1 | 0,30
2022 | C1| D1 | P1 | 0,41
2022 | C1| D1 | P1 | 0,41

2022 | C1| D1 | P2 | 0,24
2022 | C1| D1 | P2 | 0,23
2022 | C1| D1 | P2 | 0,10

2023 | C1| D1 | P2 | 0,15
2023 | C1| D2 | P3 | 0,20
.....

C1 e D1 sono attributi Cliente, P1 e P2 relativi al prodotto, 2021, 2022, 2023 gli anni di riferimento, mentre i numeri le quantità di Ordinato.

Creo una misura utilizzando questo codice:

Codice: Seleziona tutto

#Righe= 
CALCULATE(
    COUNTROWS(
        SUMMARIZE(
            FactDPF,
            FactDPF[Anno],
            FactDPF[Cliente],
            FactDPF[Deposito],
            FactDPF[Prodotto]
        )
    ),
    FactDPF[Anno] IN {2021,2022},
    FactDPF[Deposito] = "D1",
    FactDPF[Prodotto] IN {"P1", "P2"}
)
Il risultato che ottengo è #Righe = 3, come mi aspettavo.
Suppongo che SUMMARIZE restituisca una tabella di questo tipo:
2021 | C1| D1 | P1
2022 | C1| D1 | P1
2022 | C1| D1 | P2
Per cui il numero di righe è esattamente 3.

Se cambio il codice:

Codice: Seleziona tutto

MisuraORD= 
CALCULATE(
    SUMX(
        SUMMARIZE(
            FactDPF,
            FactDPF[Anno],
            FactDPF[Cliente],
            FactDPF[Deposito],
            FactDPF[Prodotto]
        ),
        SUM(FactDPF[Ordinato])
    ),
    FactDPF[Anno] IN {2021,2022},
    FactDPF[Deposito] = "D1",
    FactDPF[Prodotto] IN {"P1", "P2"}
)
Ottengo MisuraORD= 5,85 .
Da quello che penso di aver capito, una volta riassunta la tabella, viene calcolata per ciascuna riga la somma dell'ordinato totale (perché manca il RowContext).
Per cui si otterrebbe:
2021 | C1| D1 | P1 | 1,95
2022 | C1| D1 | P1 | 1,95
2022 | C1| D1 | P2 | 1,95
Infatti, 1,95 = 0,26 + 0,30 + 0,41 + 0,41 + 0,24 + 0,23 + 0,10.
Il SUMX restituisce la somma delle 3 righe che è appunto 5,85 (1,95 + 1,95 + 1,95).
Penso il sistema ragioni così perché se cambio SUMX in AVERAGEX ottengo SommaORD = 1,95 , ovvero (1,95 + 1,95 + 1,95) / 3.

Ma come faccio a dire al sistema di calcolarmi per ciascuna riga della tabella riassunta la somma legata al contesto della riga stessa?
Per intenderci, come faccio ad avere una cosa di questo tipo:
2021 | C1| D1 | P1 | 0,26
2022 | C1| D1 | P1 | 1,12 (0,3 + 0,41 + 0,41)
2022 | C1| D1 | P2 | 0,57 (0,24 + 0,23 + 0,10)
Per poi ottenere MisuraORD= 1,95 con SUMX o MisuraORD= 0,65 con AVERAGEX?????????

Ho provato ad inserire ADDCOLUMNS in questo modo:

Codice: Seleziona tutto

MisuraORD= 
CALCULATE(
    SUMX(
    	ADDCOLUMNS(
        	SUMMARIZE(
            		FactDPF,
            		FactDPF[Anno],
           		FactDPF[Cliente],
            		FactDPF[Deposito],
            		FactDPF[Prodotto]
        	),
        	"SommaORD", SUM(FactDPF[Ordinato])
        )
    ), [SommaORD]
    FactDPF[Anno] IN {2021,2022},
    FactDPF[Deposito] = "D1",
    FactDPF[Prodotto] IN {"P1", "P2"}
)
Ma ottengo sempre MisuraORD= 5,85 con SUMX o MisuraORD= 1,95 con AVERAGEX.

Mi sto davvero perdendo...HELP!
:crazy:
Grazie.
Avatar utente

Andrea90
Messaggi: 2193 | Topic creati
Iscritto il: dom 28 giu 2020, 19:41
Luogo: Bologna
Ringraziato: 666 volte
Contatta:

Da Tabella a Misura

Messaggio da Andrea90 »

xalbex,

Prova questa per la somma:

Codice: Seleziona tutto

=
VAR TempTab =
    CALCULATETABLE (
        SUMMARIZE (
            FactDPF,
            FactDPF[Anno],
            FactDPF[Cliente],
            FactDPF[Deposito],
            FactDPF[Prodotto]
        ),
        FactDPF[Anno] IN { 2021, 2022 },
        FactDPF[Deposito] = "D1",
        FactDPF[Prodotto] IN { "P1", "P2" }
    )
VAR AddCol_Temp =
    ADDCOLUMNS ( TempTab, "@TotORD", CALCULATE ( SUM ( FactDPF[Ordinato] ) ) )
VAR Result =
    SUMX ( AddCol_Temp, [@TotORD] )
RETURN
    Result

Per la media sostituisci SUMX con AVERAGEX.

Se avrai altre domande da porre in futuro apri nuove discussioni, non accodarti nuovamente a questa.

Andrea
Se hai gradito l'aiuto che hai ricevuto considera di contribuire alle spese per il mantenimento del forum facendo una libera DONAZIONE --> Link

Ricordarsi di segnare come "RISOLTE" le discussioni per le quali si è ricevuto un feedback positivo. Per vedere come fare --> Link
Avatar utente

Enrico Galli
Messaggi: 890 | Topic creati
Iscritto il: dom 28 giu 2020, 19:03
Luogo: San Giovanni in Persiceto (BO)
Ringraziato: 325 volte
Contatta:

Da Tabella a Misura

Messaggio da Enrico Galli »

Ciao. Andrea ha costruito la misura in modo diverso (e probabilmente più semplice da leggere e mantenere), ma volendo "sistemare" la tua versione, in particolare l'ultima con ADDCOLUMNS, direi che ti basta racchiudere dentro un CALCULATE l'operazione SUM(FactDPF[Ordinato]) :wave:
Enrico Galli
Link utili: I nostri tutorial | Come inserire: Immagini - Codice - Risolto
Se il forum ti è stato utile, considera di supportarlo con una libera donazione
Avatar utente

Autore del topic
xalbex
Messaggi: 41 | Topic creati
Iscritto il: dom 30 ott 2022, 11:07
Luogo: Parma
Ringraziato: 4 volte

Da Tabella a Misura

Messaggio da xalbex »

Andrea90 Andre grazie...avevo provato ad utilizzare VAR per renderla più leggibile, ma mi dava un errore.
Probabilmente avevo digitato qualcosa di sbagliato, però riguardandola più e più volte, non trovando l'errore, m'ero convinto fosse qualcosa relativo al funzionamento di DAX in PowerBI VS il funzionamento di DAX in SQL Server Management Studio (come guida per le varie funzioni utilizzavo il sito dax.guide...)
Indipendentemente da ciò, come diceva Enrico Galli, oltre a rendere più leggibile la mia misura, hai "semplicemente" aggiunto un CALCULATE.
Allora mi sono detto: ma cosa fa il CALCULATE che SUM non fa?
Nella mia testa CALCULATE serviva a filtrare dei valori E BASTA.
Invece riguardando la teoria relativa a CALCULATE proprio nel sito dax.guide, mi sono imbattuto in questo articolo:
https://www.sqlbi.com/articles/understa ... ransition/
In pratica si dice che CALCULATE oltre a filtrare, se applicato ad un contesto riga, permette la "context transition" che in pratica significa passare dal contesto riga al contesto filtro (cosa che SUM non fa).
Per cui Enrico Galli, grazie mille anche a te perché stamane avevo proprio modificato la misura inserendo CALCULATE davanti al SUM...
Da lì mi si è aperto un mondo e sto facendo mille prove.

GRAZIE MILLE!!!! :clap: :clap: :clap: :clap: :clap: :clap: :clap: :clap:
Avatar utente

Enrico Galli
Messaggi: 890 | Topic creati
Iscritto il: dom 28 giu 2020, 19:03
Luogo: San Giovanni in Persiceto (BO)
Ringraziato: 325 volte
Contatta:

Da Tabella a Misura

Messaggio da Enrico Galli »

Per dirla con le parole di Alberto Ferrari: "CALCULATE è la regina del DAX. E l'ho declinata volutamente al femminile, perché come per tutte le donne... non la si potrà mai capire fino in fondo" :lol:
Enrico Galli
Link utili: I nostri tutorial | Come inserire: Immagini - Codice - Risolto
Se il forum ti è stato utile, considera di supportarlo con una libera donazione
Rispondi