Risposte valide in un periodo variabile L’argomento è risolto

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

Marco
Messaggi: 43 | Topic creati
Iscritto il: mar 3 mag 2022, 15:11
Ringraziato: 1 volta

Risposte valide in un periodo variabile

Messaggio da Marco »

Buongiorno a tutti, tempo fa mi avevate già dato una mano per un problema analogo, ma ora il modello è più articolato e non riesco a riprodurre la soluzione.
Ho la necessità di contare le risposte secondo le modalità indicate nella tabella Giudizi mese: il mio tentativo sta nella misura Risposte valide... :oops:
Vi sintetizzo il problema per punti.
  • le risposte valide non sono le risposte totali, ma in funzione del periodo di analisi che voglio prendere in considerazione attraverso il filtro sulla tabella Indagini
  • nel periodo di analisi prescelto, le risposte validi sono solo quelle delle aziende considerate valide, ossia quelle aziende che hanno risposto a tutte le indagini nel periodo di analisi preso in considerazione
  • secondo il mio ragionamento, quindi, il numero di risposte disponibili per un'azienda deve essere uguale al numero di indagini disponibili nel periodo di analisi selezionato (indagini selezionate)
Nel mio tentativo, nella misura Risposte valide, ho creato una tabella temporanea per definire le aziende valide, ma il filtro o qualcos'altro non funziona, quando inserisco la misura nell'oggetto che filtra per tipo di risposta (Giudizi mese).
Dove sbaglio? :shifty: :evil:

Grazie mille!!!
Allegati
Sondaggio.pbix
(80.37 KiB) Scaricato 4 volte


Avatar utente

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

Risposte valide in un periodo variabile

Messaggio da Andrea90 »

@Marco,

Questa è la tua misura:

Codice: Seleziona tutto

Risposte valide = 
VAR TmpCampione = 
    ADDCOLUMNS( Campione,
    "@Risposte", CALCULATE( [#Risposte]),
    "@Indagini", CALCULATE( [#Indagini] )
    )
VAR TmpCampioneValido =
    FILTER( 
        ADDCOLUMNS(
        TmpCampione,
        "@Validità", IF( [@Risposte] - [@Indagini] = 0, "Valida", "Non valida" )
        ),
        [@Validità] = "Valida"
    )
VAR ContaValide = COUNTROWS( TmpCampioneValido )
VAR TmpGiudizi =
    ADDCOLUMNS(
        'Giudizi mese',
        "@Valide", ContaValide
    )
RETURN
    ContaValide
1) TmpGiudizi non serve a nulla visto che poi richiami come output quella sopra, pertanto rimuovila pure (scrivi codice DAX quanto più pulito possibile perché sennò non ci capirai nulla).

2) Usi due volte ADDCOLUMNS() sulla stessa tabella, se alla fine vuoi ottenere tre colonne basta scrivere una volta ADDCOLUMNS() con le 3 espressioni che ti serve valorizzare.

3) Nella variabile TmpCampioneValido hai creato una colonna chiamata "@Validità" che esegue semplicemente il check se [@Risposte] è uguale a [@Validità]... perché associ il flag "Valida" se i due numeri coincidono. Ora se ci rifletti un attimo questo codice è del tutto superfluo... Così come il codice che hai utilizzato per creare la VAR TmpCampione con le due colonne aggiunte... perché basta filtrare direttamente la tabella corretta per avere il risultato che ti serve.

4) Ho segnato "corretta" al punto precedente perché qui il problema (come quasi sempre accade) è a livello di modello dati. Nella tua matrice tu inserisci il campo [Giudizi] sulle righe. Ora dimmi quale contesto filtro attivo è presente nella prima riga di quella matrice? Seconda domanda, guardando il tuo modello dati, ed il contesto filtro attivo, non noti che c'è qualcosa che non va rispetto alle misure che stai richiamando?

Il risultato desiderato quale è (a livello di numero intendo), questo (parlo della sola colonna Misura)?:
Immagine

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
Marco
Messaggi: 43 | Topic creati
Iscritto il: mar 3 mag 2022, 15:11
Ringraziato: 1 volta

Risposte valide in un periodo variabile

Messaggio da Marco »

Grazie per la risposta.
Sulla ridondanza del codice lo so: quando parto con i tentativi non lo "ripulisco", in particolare non ho nemmeno cancellato quello inutile (1).
Il numero desiderato non è 155, ma 132, ossia 22 aziende valide per 6 indagini selezionate.
Il mio tentativo era quello di creare una tabella "virtuale" delle aziende valide, in funzione delle 6 indagini selezionate come filtro, per poi filtrare la tabella Risposte.
Nel contesto di filtro dell'oggetto che hai riportato tu il totale della Misura dovrebbe essere 132, spaccato per ogni Giudizio mese che ho messo in riga.
E se tagliassi anche per le indagini selezionate, in colonna, mi aspetterei dei totali verticali pari a 22 per tutte e sei le indagini, mentre nei totali orizzontali i valori spaccati per ogni giudizio che sommerebbe 132.
Immagine
Avatar utente

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

Risposte valide in un periodo variabile

Messaggio da Andrea90 »

@Marco
Andrea90 ha scritto: sab 20 gen 2024, 11:59 Ora dimmi quale contesto filtro attivo è presente nella prima riga di quella matrice? Seconda domanda, guardando il tuo modello dati, ed il contesto filtro attivo, non noti che c'è qualcosa che non va rispetto alle misure che stai richiamando?
La risposta a queste domande serve per instradarti alla soluzione, che se non ho capito male dovrebbe essere una cosa simile:

Immagine

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
Marco
Messaggi: 43 | Topic creati
Iscritto il: mar 3 mag 2022, 15:11
Ringraziato: 1 volta

Risposte valide in un periodo variabile

Messaggio da Marco »

Hai risposto correttamente.
In merito al contesto di filtro di cui mi chiedevi, nella prima matrice, è dato dalla tabella Indagini dalla 12.2 alla 7.23 e dalla tabella Giudizi mese (ogni riga filtra per i valori Giudizi).
Detto ciò, tralasciando le due misure #Risposte e #Indagini che non erano lì come tentativo di trovare il risultato corretto, la terza, Risposte valide, lavora altrove e non nel contesto corretto... Ennesimo, vano, tentativo di filtrare la tabella Risposte... Tutti gli altri tentativi di filtrare correttamente la tabella Risposte identificando le risposte valide, connesse alle aziende valide, sono falliti: probabilmente mi sto perdendo in un bicchiere d'acqua e, da come hai posto le tue risposte, immagino anche che la soluzione sia una cagata mostruosa...
Purtroppo, ahimé, non la vedo ancora.
Avatar utente

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

Risposte valide in un periodo variabile

Messaggio da Andrea90 »

@Marco,

In realtà hai aperto una discussione interessante quindi per arrivare alla risposta un minimo tocca pensarci.

Prendo come esempio la prima cella in alto a sinistra che vedi nell'immagine che ho pubblicato. Quel valore 2 ha come contesto filtro due campi:

1) Tabella Giudizi --> Valore: "Un po' migliorato"
2) Tabella Indagine --> Valore: "12.23"

Il "problema" è che la logica che dovresti applicare è la seguente:

1) Esegui il calcolo del numero di indagini "attive" nel contesto scelto dall'utente (tu ne hai selezionate 6). Questo valore lo devi reperire cercando di rimuovere l'effetto esterno del filtro che hai applicato.

2) Cerca la lista di tutte le aziende dalla tabella Campione (a prescindere dal contesto filtro. Ho sottolineato a prescindere perché ti dovrebbe far accendere la lampadina sull'utilizzo di ALL()).

2.a) Questa lista di aziende la inserisci dentro ad un FILTER il quale avrà come condizione da verificare il fatto che il conteggio delle risposte sia pari al valore ottenuto al campo 1.

3) Calcola il valore della misura [#Risposte] ma considerando la lista di aziende reperita al punto 2.a

Ora la parte più complicata è il punto 2.a perché quando esegui il conteggio delle risposte per ciascuna azienda devi fare in modo di eliminare i filtri attivi dai contesti che ti ho indicato all'inizio. E non puoi utilizzare ALL() perché lui ti rimuove l'intero filtro mentre tu vuoi che il conteggio consideri le indagini che tu hai selezionato nel loro insieme.

C'è un ulteriore "inghippo" che deriva dal fatto che probabilmente avrai eseguito degli "ordina per" sui campi Giudizio e Indagine.

Prova a rivedere quanto ti ho scritto e vedi se ti si accende qualche lampadina, altrimenti chiedi pure.

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
Marco
Messaggi: 43 | Topic creati
Iscritto il: mar 3 mag 2022, 15:11
Ringraziato: 1 volta

Risposte valide in un periodo variabile

Messaggio da Marco »

Ciao, dopo altri tentativi, non sono comunque riuscito a trovare la soluzione. Riprendo i tuoi punti.

Punto 1: l'unico modo che conosco per rimuovere l'effetto esterno è usare ALL.

Codice: Seleziona tutto

#IndAtt = 
CALCULATE(
    DISTINCTCOUNT( Risposte[IDIndagine] ),
    ALL( Indagini )
)
Un altro tentativo è stato il seguente, con due misure.

Codice: Seleziona tutto

#Indagini = 
CALCULATE(
    DISTINCTCOUNT( Risposte[IDIndagine] ),
    ALLSELECTED( Indagini )
)

Codice: Seleziona tutto

#IndAtt = 
CALCULATE(
    [#Indagini],
    RELATEDTABLE( Campione )
)
Punto 2: La lista delle aziende sulla tabella Campione la individuo così.

Codice: Seleziona tutto

ALL( Campione[IDAzienda] )
Punto 2a e punto 3: Applico quanto fatto

Codice: Seleziona tutto

Risposte valide = 
CALCULATE(
    [#Risposte],
    FILTER(
        ALL( Campione[IDAzienda] ),
        [#Risposte] = [#IndAtt]
    )
)
Avatar utente

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

Risposte valide in un periodo variabile

Messaggio da Andrea90 »

@Marco,

Codice: Seleziona tutto

Risposte = 
VAR cnt =
    CALCULATE ( COUNTROWS ( Indagini ), ALLSELECTED ( Indagini ) )
VAR tmp =
    FILTER (
        ALL ( Campione[IDAzienda] ),
            CALCULATE (
                [#Risposte],
                ALLSELECTED ( Indagini ),
                ALLSELECTED ( 'Giudizi mese' )
            ) = cnt
    )
RETURN
    CALCULATE ( [#Risposte], Campione[IDAzienda] IN tmp )
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
Marco
Messaggi: 43 | Topic creati
Iscritto il: mar 3 mag 2022, 15:11
Ringraziato: 1 volta

Risposte valide in un periodo variabile

Messaggio da Marco »

Grazie mille, ero molto lontano dalla soluzione...
Rispondi