Intercettare la data listino corretta L’argomento è risolto

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

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

Intercettare la data listino corretta

Messaggio da alex77 »

Buongiorno a tutti,
apro un nuovo topic anche se il report è lo stesso del mio post precedente, perché si tratta di nuovo argomento, penso sia più corretto così e più comodo anche per chi fa una ricerca.
Il report riguarda il calcolo del valore di magazzino. In allegato immagine del modello dati.
Mi sono reso conto che il listino (listino mensile, per ogni codice un nuovo listino ogni fine mese), non è strutturato come pensavo. Per alcuni codici il listino non è aggiornato di mese in mese ma si ferma ad una data nel passato (questo credo sia un problema di elaborazione dell'ERP, che genera il listino, e vedrò di sistemarlo con la software house) per cui, se l'ultimo listino è 30/04/2022 ci sono alcuni codici non presenti in questo listino e magari si fermano al 30/11/2021.
Attualmente per il calcolo del valore giacenza usavo questa misura (che funzionava):

Codice: Seleziona tutto

DAX.Valore Giacenza TEST =
VAR vDataMax =
    MAXX ( ENDOFMONTH ( dimcalendario[Data] ), [Data] )
VAR vValore =
    SUMX (
        ADDCOLUMNS (
            VALUES ( dimArticoli[Articolo Codice] ),
            "_ValoreGiacenza",
                'Misure DAX'[DAX.Giacenza Modificata]
                    * CALCULATE ( MAX ( fListino[Prezzo Listino] ), dimCalendario[Data] = vDataMax )
        ),
        [_ValoreGiacenza]
    )
RETURN
    vValore
Ma mi sono reso conto che appunto, non valorizza i codici con listino, diciamo così, non aggiornato. Dovrei intercettare la data listino massima, per ciascun codice, minore o uguale alla data calendario. Ho provato così, funziona se filtro dei codici, ma non funziona se non metto filtri (perchè evidentemente dove imposto il filtro per intercettare il valore del listino alla data massima, il calcolo non filtra per codice):

Codice: Seleziona tutto

DAX.Valore Giacenza TEST2 =
VAR vDataListino =
    CALCULATE (
        MAX ( fListino[Data Listino] ),
        FILTER (
            VALUES ( fListino ),
            fListino[Data Listino] <= MAX ( dimCalendario[Data] )
        )
    )
VAR vTabDataListino =
    ADDCOLUMNS (
        VALUES ( dimArticoli[Articolo Codice] ),
        "@DataListino", vDataListino
    )
VAR vValore =
    SUMX (
        ADDCOLUMNS (
            VALUES ( dimArticoli[Articolo Codice] ),
            "_ValoreGiacenza",
                'Misure DAX'[DAX.Giacenza Modificata]
                    * CALCULATE (
                        MAX ( fListino[Prezzo Listino] ),
                        dimCalendario[Data] = MAXX ( vTabDataListino, [@DataListino] )
                    )
        ),
        [_ValoreGiacenza]
    )
RETURN
    vValore
Grazie per un eventuale aiuto

Alessandro
Allegati
Modello dati.png
Modello dati.png (40.95 KiB) Visto 148 volte


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:

Intercettare la data listino corretta

Messaggio da Enrico Galli »

Ciao. prova a scriverla così:

Codice: Seleziona tutto

DAX.Valore Giacenza TEST3 =
VAR vDataListino =
    CALCULATE (
        MAX ( fListino[Data Listino] ),
        fListino[Data Listino] <= MAX ( dimCalendario[Data] )
    )
VAR vTabDataListino =
    ADDCOLUMNS (
        VALUES ( dimArticoli[Articolo Codice] ),
        "@DataListino", vDataListino
    )
VAR vValore =
    SUMX (
        ADDCOLUMNS (
            VALUES ( dimArticoli[Articolo Codice] ),
            "_ValoreGiacenza",
                'Misure DAX'[DAX.Giacenza Modificata]
                    * CALCULATE ( MAX ( fListino[Prezzo Listino] ), vTabDataListino )
        ),
        [_ValoreGiacenza]
    )
RETURN
    vValore
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

Intercettare la data listino corretta

Messaggio da alex77 »

Ciao Enrico Galli ,
grazie per la risposta. Purtroppo la soluzione da te proposta non sembra funzionare. Rispetto a prima, in matrice filtrata per articolo, con un articolo con data listino precedente all'ultima (30/04/22) non dà alcun risultato (se su return do come variabile vDataListino non ritorna nessun risultato).
Nella matrice senza articoli filtrati, al posto di dare il risultato "quasi giusto" (cioè con mancanti solo i valori dei codici con listino "vecchio"), dà come risultato qualche centinaio di migliaio di milioni.
Cosa posso fare per aiutare ad aiutarmi?

Grazie

Alessandro
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:

Intercettare la data listino corretta

Messaggio da Enrico Galli »

Torna alla tua versione iniziale, cambiando la prima VAR in:

Codice: Seleziona tutto

VAR maxdata = MAX ( dimCalendario[Data] )
VAR vDataListino =
    CALCULATE (
        MAX ( fListino[Data Listino] ),
        REMOVEFILTERS( dimCalendario ),
        fListino[Data Listino] <= maxdata
    )
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

Intercettare la data listino corretta

Messaggio da alex77 »

Ciao Enrico Galli ,
niente: in matrice filtrata per articolo funziona. Nella somma totale mi dà sempre il valore senza considerare gli articoli con listino vecchio
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:

Intercettare la data listino corretta

Messaggio da Enrico Galli »

Mi arrendo :)
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

Intercettare la data listino corretta

Messaggio da alex77 »

Ah se ti arrendi tu sono spacciato! :D
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:

Intercettare la data listino corretta

Messaggio da Enrico Galli »

Senza il file a disposizione non ho sufficiente competenza per indovinare il codice giusto. E' sempre un trial-and-error col DAX, ma senza i dati su cui fare il trial... resta solo l'error! ;)
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

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

Intercettare la data listino corretta

Messaggio da Enrico Galli »

Dai faccio un ultimo tentativo "a capocchia" ;)

Codice: Seleziona tutto

DAX.Valore Giacenza TEST MONDOBI =
VAR maxdata =
    MAX ( dimCalendario[Data] )
VAR vDataListino =
    CALCULATE (
        MAX ( fListino[Data Listino] ),
        REMOVEFILTERS ( dimCalendario[Data] ),
        fListino[Data Listino] <= maxdata
    )
VAR vTabDataListino =
    ADDCOLUMNS (
        VALUES ( dimArticoli[Articolo Codice] ),
        "@totale",
            'Misure DAX'[DAX.Giacenza Modificata]
                * CALCULATE (
                    MAX ( fListino[Prezzo Listino] ),
                    REMOVEFILTERS ( dimCalendario ),
                    dimCalendario[Data] = vDataListino
                )
    )
VAR vValore =
    SUMX ( vTabDataListino, [@totale] )
RETURN
    vValore
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

Intercettare la data listino corretta

Messaggio da alex77 »

Ciao Enrico Galli ,
andato male anche il tentativo "a capocchia" (ci avevo tanto sperato :D ).
Siccome sono disperato, allego file excel con tutte le tabelle e i dati di 2 soli articoli (di cui uno, ovviamente, con listino che si ferma nel passato) e le misure dax fatte fin qui.
La misura TEST è quella originaria, in cui richiedevo l'uguaglianza tra data calendario (trasformata in fine mese) e data listino.
TEST2 è il mio tentativo di cercare l'ultimo listino disponibile (unica cosa, al posto di MAXX(vTabDataListino,[@DataListino]) ho messo vTabDataListino, perchè, penso sia una limitazione di Excel, non mi accettava MAXX nella condizione TRUE/FALSE).
Se tu, o qualcun altro, ha tempo e voglia di fare un tentativo, grazie in anticipo, perchè oltre alla necessità pratica, muoio di curiosità di capire come si può risolvere! :D
Allegati
MagazzinoTest.xlsx
(732.91 KiB) Scaricato 11 volte
Rispondi