ALLEXCEPT su Tabella Dimenzioni L’argomento è risolto

Non è propriamente un programma di BI, ma nelle sue versioni più recenti anche Excel può fare grandi cose!

Moderatore: Utilizzo_prof_Excel

Rispondi

Gennaro_64
Messaggi: 107 | Topic creati
Iscritto il: dom 11 apr 2021, 12:47
Ringraziato: 5 volte

ALLEXCEPT su Tabella Dimenzioni

Messaggio da Gennaro_64 »

Buon giorno,

Credo di avere appreso il funzionamento della Funzione DAX "ALLEXCEPT" dal tutorial di Lodovico D'Incau e ci sto smanettando un po' per provarne il funzionamento


Provo a spiegare la mia difficoltà.
Ho creato due tabelle: una tabella dei fatti (le vendite) ed una tabella delle dimensioni (le sedi dei reparti).
Nell'immagine sotto si può notare la relazione che ho creato tra le due

Immagine

Nell'immagine che segue invece possiamo vedere la pivot risultato (18.750 prodotti venduti tra Milano e Roma) con sopra due filtri che ho aggiunto.

Immagine

Uno dei filtri agisce sulla tabella delle dimensioni (le Province), mentre l'altro agisce sulla tabella dei fatti (i prodotti).
Entrambi i filtri "condizionano" il risultato "ACT" come è corretto che sia.

Poi ho aggiunto due misure che rendono "insensibile" il risultato della pivot ai filtri con una sola eccezione.
Per una misura (ACT_ALLEXCEPT_in) l'eccezione è un campo (Reparto) interno alla tabella dei fatti.
Per l'altra misura (ACT_ALLEXCEPT_out) l'eccezione è un campo (PROV) esterno alla tabella dei fatti: il campo appartiene infatti alla tabella delle misure.

Tuttavia, come si vede dal file che allego di esempio, solo nella misura (ACT_ALLEXCEPT_in), interna alla tabella dei fatti, la Funzione DAX "ALLEXCEPT" funziona ed il risultato della misura effettivamente è sensibile solo al filtro "Reparto".

Invece, nella misura (ACT_ALLEXCEPT_out), esterna alla tabella dei fatti, il risultato è "sensibile" a tutti i filtri.

Sbaglio io in qualcosa?
Come costruire una misura con la la Funzione DAX "ALLEXCEPT" (o qualcosa di analogo) che punti a filtri esterni alla tabella dei fatti?

Spero di essere stato chiaro.
Grazie
Allegati
Base_Dati_ALLECEPT.xlsx
(217.67 KiB) Scaricato 14 volte


Avatar utente

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

ALLEXCEPT su Tabella Dimenzioni

Messaggio da Andrea90 »

Ciao Gennaro_64,

Sinceramente la domanda non mi risulta chiara, cosa intendi per "una misura che punti a filtri esterni alla tabella dei fatti"?

Seconda cosa, per cominciare a far riflettere su quello che si fa quando si costruisce un report in dax, quello che tu indichi come filtro "REPARTO" da che tabella l'hai ottenuto?

Terza cosa, c'è secondo te differenza tra scrivere:

ALLEXCEPT(Vendite;Vendite[REPARTO])

e scrivere:

ALLEXCEPT(Sedi;Sedi[REPARTO])

E se si quale?

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

Autore del topic
Gennaro_64
Messaggi: 107 | Topic creati
Iscritto il: dom 11 apr 2021, 12:47
Ringraziato: 5 volte

ALLEXCEPT su Tabella Dimenzioni

Messaggio da Gennaro_64 »

Ciao Andrea,
Grazie per l'attenzione dedicata al mio caso.

Provo a rispondere alle tue richieste di chiarimento.
Andrea90 ha scritto: mar 16 nov 2021, 19:42 Sinceramente la domanda non mi risulta chiara, cosa intendi per "una misura che punti a filtri esterni alla tabella dei fatti"?
Nel file allegato, nell'editor di Power Query ed in Power Pivot, trovi due tabelle: una che contiene le vendite (fact table) ed una che contiene talune dimensioni (le sedi dei Reparti).

Una delle due misure che ho creato contiene una Funzione (ALLEXCEPT) che esclude tutti i filtri attivati eccetto uno, il campo [PROV], che si trova nella tabella delle dimensioni, la tabella Sedi, diversa da quella delle vendite.
Andrea90 ha scritto: mar 16 nov 2021, 19:42 Seconda cosa, per cominciare a far riflettere su quello che si fa quando si costruisce un report in dax, quello che tu indichi come filtro "REPARTO" da che tabella l'hai ottenuto?
Il campo [REPARTO] è presente in entrambe le tabelle ed è quello utilizzato per creare la relazione tra le due.
Poiché il [REPARTO] non è presente nelle misure che ho creato, l'ho collocato (prelevato dalla tabella Vendite), tra i filtri dei campi della pivot per evidenziare il funzionamento (anomalo) di ALLEXCEPT.
Andrea90 ha scritto: mar 16 nov 2021, 19:42 Terza cosa, c'è secondo te differenza tra scrivere:

ALLEXCEPT(Vendite;Vendite[REPARTO])

e scrivere:

ALLEXCEPT(Sedi;Sedi[REPARTO])
Eh sì.
Ti prego di non guardare il caso (semplice) ora sottoposto alla tua analisi.
Anch'io, neofita, direi che è la stessa cosa.
Ci potremmo trovare di fronte ad una tabella (nel caso delle Sedi) che è relazionata con più tabelle dei fatti (immaginiamo una tabella Vendite 2020 ed una tabella Vendite 2021) entrambe relazionate con il campo [REPARTO], per cui ultilizzare un filtro basato sul campo [REPARTO] della tabella Vendite 2020, si riuscirebbe a filtrare solo i valori di questa tabella e non anche gli altri.

Hai già fatto qualche test sul file allegato?
Avatar utente

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

ALLEXCEPT su Tabella Dimenzioni

Messaggio da Andrea90 »

Ciao Gennaro_64,

Perdonami, ma non ci siamo:

1) Ti ho chiesto cosa vorresti ottenere con "una misura che punti a filtri esterni alla tabella dei fatti?" e tu mi hai risposto raccontando quello che hai fatto (che si vede già nel file allegato). Quello che ti chiedo è di spiegare meglio che cosa vorresti ottenere.

2) Ho chiesto da dove hai preso il campo [REPARTO] proprio perché volevo arrivare a chiederti: secondo te è più corretto utilizzare un campo di una tabella dimensionale per filtrare un report, oppure lo stesso campo preso dalla tabella dei fatti? E dunque, quale delle due cose hai fatto tu nel file che hai allegato?

3) Comportamenti anomali di ALLEXCEPT non li vedo, quali sono secondo te?

4)
Gennaro_64 ha scritto: mar 16 nov 2021, 20:16 Ci potremmo trovare di fronte ad una tabella (nel caso delle Sedi) che è relazionata con più tabelle dei fatti (immaginiamo una tabella Vendite 2020 ed una tabella Vendite 2021) entrambe relazionate con il campo [REPARTO], per cui ultilizzare un filtro basato sul campo [REPARTO] della tabella Vendite 2020, si riuscirebbe a filtrare solo i valori di questa tabella e non anche gli altri.
Appunto per questo che mi viene da dire perché hai scritto ALLEXCEPT(Vendite;Vendite[REPARTO]) ? Se tu hai una tabella dimensionale che filtra due tabelle dei fatti (Vendite 2020 e Vendite 2021) la misura che hai appena scritto è "sicura"? I campi della tabella dei fatti non vanno usati per filtrare il report (soprattutto se esiste la controparte nella tabella delle dimensioni).

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

Autore del topic
Gennaro_64
Messaggi: 107 | Topic creati
Iscritto il: dom 11 apr 2021, 12:47
Ringraziato: 5 volte

ALLEXCEPT su Tabella Dimenzioni

Messaggio da Gennaro_64 »

Ciao Andrea90
Andrea90 ha scritto: mar 16 nov 2021, 20:31 1) ... Quello che ti chiedo è di spiegare meglio che cosa vorresti ottenere.
Vorrei ottenere una misura (ACT_ALLEXCEPT_out) il cui risultato non sia influenzato dai filtri, eccetto quello del campo Sedi[PROV]

Come puoi vedere dall'immagine sotto, la misura ACT_ALLEXCEPT_out espone un valore di 14.970 (anziché 18.750 che io mi aspetterei) proprio perché questo risultato è influenzato dal filtro Vendite[Prodotto].

Immagine

Andrea90 ha scritto: mar 16 nov 2021, 20:31 2) Ho chiesto da dove hai preso il campo [REPARTO] proprio perché volevo arrivare a chiederti: secondo te è più corretto utilizzare un campo di una tabella dimensionale per filtrare un report, oppure lo stesso campo preso dalla tabella dei fatti?
Io credo che sia più corretto utilizzare un campo di una tabella dimensionale per filtrare un report.
Tuttavia, benché io abbia utilizzato il campo [REPARTO] della tabella dei fatti, credo persista un comportamento anomalo della misura ACT_ALLEXCEPT_out.
Nella videata che segue infatti la misura ACT_ALLEXCEPT_out espone un valore di 14.970 (anziché 18.750 che io mi aspetterei)

Immagine

Andrea90 ha scritto: mar 16 nov 2021, 20:31 3) Comportamenti anomali di ALLEXCEPT non li vedo, quali sono secondo te?
Se ho compreso bene il funzionamento di ALLEXCEPT, tutte le volte che io "non filtro" il campo [PROV], il risultato della misura ACT_ALLEXCEPT_out dovrebbe essere 18.750 (cioè dovrebbe ignorare tutti i filtri esistenti di tutte le tabelle eccetto quelli che io ho imposto sul campo [PROV] della tabella dimensionale.
Se ho capito male, sono qui ad apprendere.
Andrea90 ha scritto: mar 16 nov 2021, 20:31 4) .... Se tu hai una tabella dimensionale che filtra due tabelle dei fatti (Vendite 2020 e Vendite 2021) la misura che hai appena scritto è "sicura"? I campi della tabella dei fatti non vanno usati per filtrare il report (soprattutto se esiste la controparte nella tabella delle dimensioni).
OK.
Grazie per la dritta: lo terrò bene a mente.

C'è comportamento anomalo di ALLEXCEPT?

Gennaro
Avatar utente

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

ALLEXCEPT su Tabella Dimenzioni

Messaggio da Andrea90 »

Gennaro_64,
Gennaro_64 ha scritto: mar 16 nov 2021, 21:44 Come puoi vedere dall'immagine sotto, la misura ACT_ALLEXCEPT_out espone un valore di 14.970 (anziché 18.750 che io mi aspetterei) proprio perché questo risultato è influenzato dal filtro Vendite[Prodotto].
Ed è corretto che sia così, perché ALLEXCEPT ti sta rimuovendo dal contesto filtro, tutti i filtri applicati dalla tabella "Sedi", ad eccezion fatta di quello [PROV]. Dunque se tu mi filtri per prodotto (che è un campo della tabella Vendite è corretto che produca effetti sul report).
Gennaro_64 ha scritto: mar 16 nov 2021, 21:44 Io credo che sia più corretto utilizzare un campo di una tabella dimensionale per filtrare un report.
Ottimo
Gennaro_64 ha scritto: mar 16 nov 2021, 21:44 Tuttavia, benché io abbia utilizzato il campo [REPARTO] della tabella dei fatti, credo persista un comportamento anomalo della misura ACT_ALLEXCEPT_out.
Nella videata che segue infatti la misura ACT_ALLEXCEPT_out espone un valore di 14.970 (anziché 18.750 che io mi aspetterei)
Spiegato sopra il motivo
Gennaro_64 ha scritto: mar 16 nov 2021, 21:44 Se ho compreso bene il funzionamento di ALLEXCEPT, tutte le volte che io "non filtro" il campo [PROV], il risultato della misura ACT_ALLEXCEPT_out dovrebbe essere 18.750 (cioè dovrebbe ignorare tutti i filtri esistenti di tutte le tabelle eccetto quelli che io ho imposto sul campo [PROV] della tabella dimensionale.
Sbagliato, ALLEXCEPT rimuove l'effetto dei filtri della tabella che tu indichi, ad eccezione di quelli indicati come secondo argomento, non è che rimuove tutti i filtri a prescindere.

Il fatto che con il tuo ALLEXCEPT in ottieni una misura "indipendente" è semplicemente dovuto dal fatto che tu hai utilizzato un ALLEXCEPT su di una tabella dei fatti, la quale applica il concetto delle Expanded tables, ovvero una tabella dei fatti non "contiene" solo i campi che le appartengono direttamente, ma anche tutti i campi di quelle tabelle dimensionali a cui lei è legata da una relazione 1 a molti. Per questo è in grado di rimuovere tutti i filtri provenienti anche dalle tabelle dimensionali.

Inoltre se tu prendi due filtri dati (uno con REPARTO preso dalla tabella dei fatti, ed uno con REPARTO preso dalla tabella dimensionale) vedrai che quello dimensionale non produce effetti, mentre quello preso dai fatti si. Il che non è una gran cosa poiché ti riporta ai problemi che ti ho scritto nei messaggi precedenti, dunque utilizzerei:

Codice: Seleziona tutto

=CALCULATE(SUM(Vendite[ACT]);ALLEXCEPT(Vendite;Sedi[REPARTO]))
Infatti, di norma, i campi che sono stati utilizzati per creare le relazioni (quelli del lato molti e dunque della fact table) vengono rimossi dalla vista nel report, proprio per evitare che un utente possa filtrare dei dati utilizzando dei campi della tabella dei fatti.

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

Autore del topic
Gennaro_64
Messaggi: 107 | Topic creati
Iscritto il: dom 11 apr 2021, 12:47
Ringraziato: 5 volte

ALLEXCEPT su Tabella Dimenzioni

Messaggio da Gennaro_64 »

Bene Andrea.
Ho capito.
Mi è tutto più chiaro adesso.
Grazie.
Alla prossima.
Rispondi