Evitare colonne calcolate + tabelle correlate per SUMMARIZE

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

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

Evitare colonne calcolate + tabelle correlate per SUMMARIZE

Messaggio da xalbex »

Ciao ragazzi,
ritorno da voi per una questione che riguarda le colonne calcolate.
So che è sempre meglio preferire una misura alle colonne calcolate perché in generale la misura è una query, la colonna calcolata è un dato che viene salvato nelle tabelle del dataset.
Mi sono espresso bene? Ho capito?

Vi sottopongo questa misura:

Codice: Seleziona tutto

ObIN(Dig) = 
AVERAGEX(
    ADDCOLUMNS(
        SUMMARIZE(
            '(Sales)1. Sales Order Analysis',
            '(Sales)3. Product'[Trade Unit #],
            '(Sales)6. Time_Requested Shipping Date'[yearWeekKey]
        ),
        "ORD",
        CALCULATE(
            [Ord_DtCarico(Sales)],
            '(Sales)1. Sales Order Analysis'[DataOrdine] > '(Sales)1. Sales Order Analysis'[LunedìDataCarico],
            '(Sales)1. Sales Order Analysis'[DataCarico] >= '(Sales)1. Sales Order Analysis'[LunedìDataCarico] &&
            '(Sales)1. Sales Order Analysis'[DataCarico] <= '(Sales)1. Sales Order Analysis'[LunedìDataCarico] + 6
        )
    ),
    [ORD]
)
Le domande sono 2:
1. '(Sales)1. Sales Order Analysis'[LunedìDataCarico]: è una colonna calcolata che in pratica restituisce il lunedì (come data) di una certa settimana.
La settimana in corso, per esempio, avrebbe come LunedìDataCarico = 8/5/2023.
Come fare per evitare questa colonna calcolata e calcolare questo valore all'interno della misura?

2. '(Sales)3. Product'[Trade Unit #] e '(Sales)6. Time_Requested Shipping Date'[yearWeekKey]: sono due campi che di tabelle dimensionali collegate alla tabella dei fatti '(Sales)1. Sales Order Analysis'.
Nello specifico si tratta del codice prodotto e della settimana di richiesta spedizione.
Vorrei utilizzare le anagrafiche (PRODOTTO e TEMPO) che ho collegato al dataset piuttosto che queste sopra.
Come mi ha spiegato tempo fa Enrico Galli :thumbup: SUMMARIZE permette di fare un GroupBy di tabelle collegate DIRETTAMENTE alla tabella dei fatti (in questo caso '(Sales)1. Sales Order Analysis') che si passa come primo argomento (ovvero NO: PRODOTTO --> DIM PRODOTTO --> FACT, mentre SI: PRODOTTO --> FACT) e nel mio dataset è effettivamente così.
Tuttavia riscontro quest'errore:
Immagine

Grazie per il vostro tempo.
Alberto.


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:

Evitare colonne calcolate + tabelle correlate per SUMMARIZE

Messaggio da Enrico Galli »

Ciao. Che sia SEMPRE meglio usare una misura al posto di una colonna calcolata non è affatto vero: sono strumenti diversi che vanno usati per scopi diversi. Nel tuo caso, è assolutamente legittima a mio parere la creazione di una colonna con il lunedì della settimana, se è questo il campo che ti serve, così come si creano colonne nella tabella calendario con il giorno di fine mese, di fine trimestre, e quant'altro occorra. Va però creata nella dimensione calendario, NON nella fact!

Per la 2, puoi mostrare il codice che ti restituisce quell'errore?
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

Evitare colonne calcolate + tabelle correlate per SUMMARIZE

Messaggio da xalbex »

Ciao Enrico Galli grazie per la celere risposta.
La colonna calcolata è stata creata nella Fact proprio per via dell'errore al punto 2.
Il codice è lo stesso solo che al posto di '(Sales)6. Time_Requested Shipping Date'[yearWeekKey] (campo della tabella Dim del dataset) ho inserito Tempo[Year.Week (ISO)] della "mia" tabella TEMPO collegata direttamente alla tabella '(Sales)1. Sales Order Analysis' dei fatti.
Può essere un problema legato al fatto che il suddetto collegamento ha anche relazioni non attive (come da foto)?
Immagine
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:

Evitare colonne calcolate + tabelle correlate per SUMMARIZE

Messaggio da Enrico Galli »

Io la tua immagine non riesco a vederla. Ti consiglio innanzi tutto una nomenclatura più chiara e semplice delle tabelle, perché questa che stai usando alimenta non di poco la confusione
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:

Evitare colonne calcolate + tabelle correlate per SUMMARIZE

Messaggio da Enrico Galli »

xalbex ha scritto: mar 9 mag 2023, 11:23 Può essere un problema legato al fatto che il suddetto collegamento ha anche relazioni non attive (come da foto)?
A occhio e croce, non credo, ma mi dici a che servono quelle relazioni inattive? La dimensione tempo si deve collegare alle fact solo ed esclusivamente sul campo di massima granularità (data, suppongo)

EDIT: forse ho capito: hai più campi data nella fact. In questo caso ci può stare
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

Evitare colonne calcolate + tabelle correlate per SUMMARIZE

Messaggio da xalbex »

Enri non mi parlare di nomenclatura...mi piacerebbe cambiarla, ma dato che non è l'unico dataset collegato al progetto se cambio i nomi delle tabelle mi perdo gli originali e dopo quando parlo con i colleghi non ci capiamo.

Per le relazioni non attive, nella fact ci sono più dati temporali (tipo data di spedizione, data ordine, data fatturazione, ...).
Le relazioni multiple mi servono per il calcolo di misure che sfruttano quelle relazioni (USERELATIONSHIP è la funzione che uso).
Può essere quindi un tema legato a questo che da l'errore al punto 2.?

Inoltre già che ci sono...
Se una Fact non ha un campo che "si parla" col campo della mia tabella (costringendoti a collegarla ad una tabella DIM intermedia), qual'è la strada migliore se poi volessi utilizzare SUMMARIZE?
Guarda foto che si capisce meglio.
Immagine
In questo caso non potrei utilizzare

Codice: Seleziona tutto

SUMMARIZE(
	Fact,
	Prodotto[Codice]
)
perché otterrei l'errore postato sopra.
Avatar utente

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

Evitare colonne calcolate + tabelle correlate per SUMMARIZE

Messaggio da xalbex »

EDIT: ho scritto una cavolata.

Allora perché mi viene restituito quell'errore?
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:

Evitare colonne calcolate + tabelle correlate per SUMMARIZE

Messaggio da Enrico Galli »

Inizio a non seguirti più. Quell'immagine con le tabelle in snowflake apparentemente non ha senso: "Prodotto" ha un Codice univoco, che va in relazione 1-n con "Dim", che deve avere ID univoco (perché poi va in 1-n con la fact su quel campo). Perciò significa che a ciascun codice possono corrispondere più ID? E in ogni caso a che serve quella prima relazione? Puoi filtrare per codice direttamente da "Dim"...
Per quanto riguarda il SUMMARIZE, l'errore mostrato indica che la colonna, scritta in quel modo, non esiste, o fa parte di una tabella che non è in relazione con quella indicata come primo argomento della funzione. Dove stia il problema puoi verificarlo solo tu, perché noi non abbiamo niente
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

Evitare colonne calcolate + tabelle correlate per SUMMARIZE

Messaggio da xalbex »

Dim è un'anagrafica prodotto che contiene solo il codice e il relativo ID (che gli serve per comunicare con Fact).
La relazione corretta tra Prodotto e Dim (come dici giustamente tu) sarebbe 1-1 (campo Codice).
Non filtro direttamente usando Dim perché:
1. Prodotto è un'anagrafica con molti più dettagli relativi al prodotto.
2. Prodotto è legata ad altre 4 tabelle Dim di anagrafiche prodotti di altri 4 dataset differenti (nell'img ho riportato un esempio fatto ad hoc).

Fact NON ha il Codice prodotto, ma un ID.
Per questo motivo non posso collegare Prodotto con Fact, ma devo passare per Dim.

Per l'errore devo guardare meglio.
Grazie Enrico.
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:

Evitare colonne calcolate + tabelle correlate per SUMMARIZE

Messaggio da Enrico Galli »

Non mi hai convinto. Se la relazione è 1-1, si tratta di una relazione "inutile": tutte le colonne di una tabella possono essere spostate nell'altra, senza variare la cardinalità.
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