Misura su tabelle incrociate (non collegate) L’argomento è risolto

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

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

Misura su tabelle incrociate (non collegate)

Messaggio da xalbex »

Ciao ragazzi.
Quesito interessante (ma anche difficile da spiegare).

Ho due fact tables:
  • Previsioni: contiene dei valori di previsione e consuntivi con i seguenti dettagli codice prodotto / data di edizione previsione / data di uscita merce
  • Giacenze: contiene qtà di stock prodotto con i seguenti dettagli codice prodotto / data di produzione.
L'obiettivo è analizzare le scorte della tabella Giacenze andando a considerare le previsioni che le hanno generate.

Nella tabella Giacenze sono quindi riportate due date "Edition" e "TillTo" che indicano rispettivamente quale settimane di edizione previsione considerare e la settimana ultima di uscita merce che serve all'analisi.

Obiettivi:
1. Creare una misura che, scelta la data di produzione, sommi i valori di previsione con:
  • data di edizione previsione (Previsioni) = Edition (Giacenze)
  • data di uscita merce (Previsioni) >= Edition (Giacenze) & data di uscita merce (Previsioni) <= TillTo (Giacenze)
Per intenderci, se analizzassi la produzione del 7/6/2023 del codice 5555, tale misura dovrebbe restituire 539 + 590 + 500 = 1.629 come valore totale di previsione.

2. Nel report di sinistra a "Pagina 1" del file, una volta cliccata su una riga della tabella "giacenze" evidenziare nella tabella "previsioni" la riga corrispondente alla Edition (Giacenze) selezionata e le settimane di TillTo (Giacenze) necessarie all'analisi.
Per intenderci, se cliccassi sulla riga della produzione del 7/6/2023 del codice 5555, nella tabella "previsioni" sulla sinistra della pagina dovrebbero essere nascoste tutte le righe tranne la prima (che riporta data di edizione produzione 29/5/2023) e tutte le colonne (tranne le prime 3 fino alla settimana di uscita merce del 12/6/2023).

In sintesi, si tratta di tabelle che devono parlarsi tramite una data (quella di edizione della previsione) che non è collegata alla dim table Tempo ne lato Giacenze, ne lato Previsioni.

Spero di essere stato chiaro.
Se vorrete, dal file capirete (moooolto) meglio.
Ho provato sfruttando le funzioni tabellari (SUMMARIZE o SUMMARIZECOLUMNS e VALUES), ma non riesco a calcolare la previsione legandola alla Edition della tabella Giacenze.
Ho provato a giocare con le relazioni del modello, sfruttando la modalità di Filtro "Entrambi" piuttosto che "Singolo", ma con scarsi risultati.
Non ho più idee. :crazy:
Grazie per un vostro aiuto.
Allegati
Prova1.pbix
(89.89 KiB) Scaricato 41 volte


Avatar utente

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

Misura su tabelle incrociate (non collegate)

Messaggio da xalbex »

Ciao ragazzi, ho risolto.
Allego file.
In pratica ho usato:
1. SUMMARIZE COLUMNS per creare una tabella calcolata con tutti i dati necessari allo scopo. In questo modo ho creato il collegamento mancante tra i campi edition delle due tabelle Giacenze e Previsioni.
2. Un filtro d'aggiustamento "AdjFiilter" che mi permette di smorzare i limiti di SUMMARIZECOLUMNS che crea record "inestistenti" (@Andrea90 Andre mi piacerebbe avere un tuo feedback, dato che ciò che so di SUMMARIZECOLUMNS me l'hai insegnato tu in questo post viewtopic.php?p=5027#p5027 :D )
3. Due misure: Inventory e Forecast.

Adesso per ciascuna settimana di produzione , il sistema calcola in automatico l'ammontare di previsione da considerare.

Mi sembra una soluzione piuttosto farraginosa (basti vedere che le dimensioni del file raddoppiano - s'inseriscono infatti info che già sono presenti, di fatto duplicando i dati) ma è l'unica che in questo momento mi ha risolto il problema.
Lascio la discussione aperta qualora qualcuno si sentisse di aggiungere qualcosa.
Allegati
Prova1.pbix
(149.54 KiB) Scaricato 46 volte
Avatar utente

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

Misura su tabelle incrociate (non collegate)

Messaggio da Andrea90 »

@xalbex,

Se il tuo risultato desiderato è quello della tabella intitolata "SUMMARIZECOLUMNS + AdjFiilter + Misure: Inventory e Forecast" mi spieghi come si legge il valore riportato sulla riga di totale? Dove non hai nulla nel contesto valutativo?

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

Misura su tabelle incrociate (non collegate)

Messaggio da xalbex »

La riga totale ti dice che si sono generati 900 qty di stock superfluo e che le forecast che potrebbero averle generate ammontano a 3.419.
È il primo step di un’analisi più ampia.
Avatar utente

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

Misura su tabelle incrociate (non collegate)

Messaggio da Andrea90 »

@xalbex,

Mah, comunque se quello che vuoi ottenere sono i valori riportati in quella tabella forse basta:

Codice: Seleziona tutto

TotFcst =
SUMX (
    SUMMARIZE ( Giacenze, Giacenze[Codice*], Giacenze[Edition] ),
    VAR edition_date =
        CALCULATE ( SELECTEDVALUE ( Giacenze[Edition] ) )
    VAR tillto_date =
        CALCULATE ( SELECTEDVALUE ( Giacenze[TillTo] ) )
    VAR cod_cli =
        CALCULATE ( SELECTEDVALUE ( Giacenze[Codice*] ) )
    RETURN
        CALCULATE (
            SUM ( Previsioni[Fcst] ),
            Prodotti[Codice] = cod_cli,
            Previsioni[EditionDate] = edition_date,
            Previsioni[ActualDate] >= edition_date,
            Previsioni[ActualDate] <= tillto_date
        )
)
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

Misura su tabelle incrociate (non collegate)

Messaggio da xalbex »

Ciao Andre, perché scrivi "mah" cosa sto sbagliando?

La tua misura è BRILLANTE!
Proprio quello che cercavo, ma che non riuscivo a sintetizzare.
Con 10 righe ha ricreato il risultato che io ho raggiunto con mille passaggi!
Bravo davvero :thumbup: adoro la sintesi!

Ti chiedo solo info accademiche perché non mi sarebbe mai venuto in testa di utilizzare un SUMX, VAR e SELECTEDVALUE in questo modo.
Quando ho visto la tua misura, ho cominciato a leggerla mentalmente in questo modo: "per ciascuna riga della tabella SUMMARIZE (...), definisci edition_date, tillto_date e cod_cli e calcola la somma delle previsioni che soddisfano alcuni requisiti legati a queste variabili (tramite CALCULATE), quindi restituiscimi la somma delle previsioni".

Tuttavia non mi è chiaro l'uso di SELECTEDVALUE.
In questo caso individua le 3 variabili correttamente perché ciascuna delle tre variabili è "unica" nella tabella SUMMARIZE(codice, edition)???
Non ci avrei mai pensato... :clap:
Avatar utente

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

Misura su tabelle incrociate (non collegate)

Messaggio da Andrea90 »

xalbex ha scritto: gio 26 ott 2023, 11:16 perché scrivi "mah" cosa sto sbagliando?
Non dico che stai sbagliando, dico che non mi suona del tutto chiaro ancora, ma questo dipende molto dal fatto che non conosco le logiche che ci sono sotto all'analisi che stai affrontando... ma se sono chiare a te ben venga :thumbup:

Si SELECTEDVALUE() è la formula abbreviata di IF() + HASONEVALUE() dunque riporta il valore richiesto se e solo se per quel dato contesto valutativo esiste un solo record (e nel tuo caso lo è, tranne che nella riga dei totali).
Per i totali ho inserito il tutto in un SUMMARIZE dunque ho le 3 righe distinte, dove eseguo il calcolo, e poi le riepilogo con quel SUMX().

Dunque per le righe della matrice quel SUMMARIZE avrà una sola riga e dunque farà la somma solo di un record, sulla riga dei totali invece avrà tre righe distinte, e per ognuna andrò a calcolare quel SUM ( Previsioni[Fcst] ) per il contesto modificato da CALCULATE.

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

Misura su tabelle incrociate (non collegate)

Messaggio da xalbex »

Chiaro anche nelle spiegazioni.
La risoluzione di un problema o di un quesito è una cosa, insegnare come hai fatto tu in questo frangente è un'altra...ti stimo.
Grazie ancora!
Rispondi