Misura DAX non somma correttamente

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

alex77
Messaggi: 160 | Topic creati
Iscritto il: sab 24 ott 2020, 23:04
Luogo: Treviso
Ringraziato: 11 volte

Misura DAX non somma correttamente

Messaggio da alex77 »

ciao a tutti,
sto cercando di calcolare la differenza tra il valore degli acquisti di un anno con quello risultante dal prodotto delle quantità di quest'anno con il prezzo medio dell'ultimo anno di acquisto. Ho creato la misura che riporto sotto ("DAX.Valore prezzo Medio Ultimo Anno Acquisto"). Funziona a livello di singolo codice, ma non quando nella matrice il dato viene aggregato per categoria. Se vedete nel file di esempio, con dati semplificati, in allegato, il codice "melanzane" (fornitore Marco) dà come risultato 20, corretto, che sommato agli altri 50 dovrebbe darmi 70. Il risultato della categoria "Verdura" è però 80 (pari al valore attuale).
Grazie per un eventuale aiuto

Codice: Seleziona tutto

DAX.Valore Prezzo Medio Ultimo Anno Acquisto = 
VAR vMaxDataPrec =
    MIN ( dimCalendario[Data] ) - 1
VAR vTabAnnoArtPrec =
    CALCULATETABLE (
        SUMMARIZE (
            fMovMag,
            dimArticolo[Articolo Codice],
            "Anno", YEAR ( MAX ( fMovMag[Data Ingresso] ) )
        ),
        FILTER (
            ALL ( dimCalendario ),
            dimCalendario[Anno] <= CONVERT ( YEAR ( vMaxDataPrec ), STRING )
        )
    )
VAR vTabArtPrec =
    SELECTCOLUMNS ( vTabAnnoArtPrec, "Articolo Codice", [Articolo Codice] )
VAR vTabAnnoArtCorr =
    ADDCOLUMNS (
        EXCEPT ( SUMMARIZE ( fMovMag, dimArticolo[Articolo Codice] ), vTabArtPrec ),
        "Anno", YEAR ( vMaxDataPrec + 1 )
    )
VAR vTabAnnoArt =
    UNION ( vTabAnnoArtPrec, vTabAnnoArtCorr )
VAR vTabPrezziPrec =
    ADDCOLUMNS (
        vTabAnnoArt,
        "@Prezzo Precedente",
            CALCULATE (
                [DAX.Prezzo Medio],
                VALUE ( dimCalendario[Anno] ) = MAXX ( vTabAnnoArt, [Anno] )
            ),
        "@Prezzo Periodo",
            CALCULATE (
                [DAX.Prezzo Medio],
                VALUE ( dimCalendario[Anno] )
                    = YEAR ( vMaxDataPrec ) + 1
            )
    )
VAR vTabPrezziBase =
    ADDCOLUMNS (
        vtabPrezziPrec,
        "@PrezzoBase", IF ( [@Prezzo Precedente] = BLANK (), [@Prezzo Periodo], [@Prezzo Precedente] )
    )
VAR vResult =
    SUMX (
        vTabPrezziBase,
        IF ( ISBLANK ( [@PrezzoBase] ), [DAX.Prezzo Medio], [@PrezzoBase] ) * [DAX.Qta]
    )
RETURN
    vResult
Allegati
Esempio.pbix
(79.24 KiB) Scaricato 57 volte


Avatar utente

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

Misura DAX non somma correttamente

Messaggio da Andrea90 »

@alex77,

Se vuoi una mano devi quanto meno spiegare le logiche che hai applicato in quella misura, per ciascuna variabile che hai creato.

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
alex77
Messaggi: 160 | Topic creati
Iscritto il: sab 24 ott 2020, 23:04
Luogo: Treviso
Ringraziato: 11 volte

Misura DAX non somma correttamente

Messaggio da alex77 »

Ciao,
certo, spero di aver capito la richiesta:
vMaxDataPrec: calcolo l'ultima data dell'anno precedente a quello preso in considerazione
vTabAnnoArtPrec: genero una tabella combinata, partendo dalla tabella fatti, degli articoli e dell'ultimo anno di acquisto precedente all'anno in considerazione:
vTabArtPrec= dalla tabella precedente estraggo solo i codici
vTabAnnoArtCorr: genero tabella dei codici acquistati solo nell'anno corrente (come differenza tra tutti gli articoli nella tabella fatti e gli articoli della tabella vTabArtPrec) e aggiungo l'anno corrente
vTabAnnoArt: unisco la tabella vTabAnnoArtPrec e la Tabella vTabAnnoArtCorr
vTabPrezziPrec = Aggiungo alla tabella vTabAnnoArt
- una colonna "@Prezzo Precedente" che, usando la misura DAX.Prezzo medio, calcola il prezzo medio dell'anno in riga
- una colonna "@Prezzo Periodo" che, sempre usando DAX.Prezzo medio, calcola il prezzo dell'anno in analisi
vTabPrezziBase: altra tabella in cui testo nella tabella vTabPrezziPrec se @Prezzo Precedente è nullo e quindi prende come prezzo base il @Prezzo Periodo, altrimenti tiene @Prezzo Precedente e genero quindi @Prezzo base
vResult: con SUMX, aggrego i dati di vTabPrezziBase, moltiplicando @Prezzo base, per la quantità dell'anno di analisi (usando la misura DAX.Qta)
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:

Misura DAX non somma correttamente

Messaggio da Enrico Galli »

Ciao, ho la versione di luglio di PowerBI (in azienda siamo un po' lenti ad aggiornare), e si rifiuta di aprire il tuo file in quanto incompatibile... quali "diavolerie" ultra-sperimentali ci hai messo dentro? :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
Avatar utente

Autore del topic
alex77
Messaggi: 160 | Topic creati
Iscritto il: sab 24 ott 2020, 23:04
Luogo: Treviso
Ringraziato: 11 volte

Misura DAX non somma correttamente

Messaggio da alex77 »

Ciao @Enrico Galli !
Accidenti, e dire che ne uso ben poche delle cose sperimentali. Secondo te basta che disattivo le anteprime delle nuove funzioni? Non saprei come fare a rendertelo compatibile (sempre che tu lo voglia :D )
Avatar utente

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

Misura DAX non somma correttamente

Messaggio da Andrea90 »

@alex77,

Ho riscritto la prima parte della tua misura:

Codice: Seleziona tutto

VAR CY =
    YEAR ( MAX ( dimCalendario[Data] ) )
VAR PY =
    CY - 1
VAR ArtCY =
    CALCULATETABLE (
        ADDCOLUMNS ( SUMMARIZE ( fMovMag, fMovMag[Articolo Codice] ), "@LastY", CY ),
        dimCalendario[Anno] = CY
    )
VAR list_art =
    SELECTCOLUMNS ( ArtCY, "Articolo Codice", [Articolo Codice] )
VAR ArtPY =
    CALCULATETABLE (
        ADDCOLUMNS (
            SUMMARIZE ( fMovMag, fMovMag[Articolo Codice] ),
            "@LastY", CALCULATE ( YEAR ( MAX ( fMovMag[Data Ingresso] ) ) )
        ),
        dimCalendario[Anno] <= PY,
        EXCEPT ( VALUES ( dimArticolo[Articolo Codice] ), list_art )
    )
VAR vTabAnnoArt =
    UNION ( ArtCY, ArtPY )
Ad esempio utilizzavi SUMMARIZE per creare nuove colonne, e non si fa... sempre ADDCOLUMNS + SUMMARIZE

Da qui in poi sinceramente non capisco la logica che applichi, considera che per come sei filtrato al momento, quel vTabAnnoArt restituisce un qualcosa di simile (sulla riga di grand total della matrice, sulle altre ovviamente devi considerare i vari contesti filtro):

Pere 2023
Mele 2022
Melanzane 2021
Zucchine 2022

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
Rispondi