Confronto totale giornaliero vs media giornaliera per mese 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

Michelerad
Messaggi: 13 | Topic creati
Iscritto il: mer 23 set 2020, 11:48

Confronto totale giornaliero vs media giornaliera per mese

Messaggio da Michelerad »

Salve,

Ho una tabella con migliaia di righe, in ogni riga è presente il campo di tipo data, denominato "Giorno", più molti altri campi. Vorrei ottenere un conteggio di tutte le righe per Giorno e uno che rappresenti la media del suddetto conteggio giornaliero per mese (es. il mese di agosto ho dati per 3 giorni, il giorno x ho 10, il giorno y 20, il giorno z, 30, quindi la media mensile è (30+20+10)/3 = 20). Al fine di ottenere, dopo un import in power query e aggiunta della tabella modificata al modello dati, un grafico pivot, a barre, in cui ho sulle x i giorni e sulle y il valore del conteggio delle righe per giorno. A questo grafico vorrei aggiungere una linea che rappresenti la media giornaliera per mese (in modo da evidenziare i giorni con valori sopra e sotto la media). Vorrei fare tutto con il dax, con diversi raggruppamento in PQ riesco ad arrivarci, ma, essendo molti i dati, temo di appesantire troppo il file.
Allego file con tabella rappresentativa e grafico desiderato, disegnato a mano è un'immagine (spero si veda)


Grazie
Allegati
EsempioMediaMese.xlsx
(211 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:

Confronto totale giornaliero vs media giornaliera per mese

Messaggio da Andrea90 »

Ciao Michelerad,

Per i calcoli con le date serve quasi sempre impostare una Calendar Table.

Per le misure, una bozza può essere la seguente

[Simple Count]

Codice: Seleziona tutto

=COUNTROWS( Dati )
AvgMonth

Codice: Seleziona tutto

=
VAR CurYM =
    MAXX ( Calendario; Calendario[Mese_Anno] )
VAR Num =
    CALCULATE (
        [# SimpleCount];
        ALL ( Calendario[Data] );
        Calendario[Mese_Anno] = CurYM
    )
VAR Den =
    CALCULATE (
        DISTINCTCOUNT ( Dati[Giorno] );
        ALL ( Calendario[Data] );
        Calendario[Mese_Anno] = CurYM
    )
VAR Result =
    IF ( NOT ISBLANK ( [# SimpleCount] ); DIVIDE ( Num; Den ) )
RETURN
    Result
A presto,
Andrea
Allegati
EsempioMediaMese.xlsx
(352.14 KiB) Scaricato 20 volte
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
Michelerad
Messaggi: 13 | Topic creati
Iscritto il: mer 23 set 2020, 11:48

Confronto totale giornaliero vs media giornaliera per mese

Messaggio da Michelerad »

Ciao Andrea, grazie per la risposta. Non mi è chiara la logica usata, potresti descrivermela?
Avatar utente

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

Confronto totale giornaliero vs media giornaliera per mese

Messaggio da Andrea90 »

Ciao Michelerad,

Tralasciando la misura [Simple Count] che risulta essere un semplice conteggio della tabella Dati, la misura AvgMonth si compone di alcune variabili:

Codice: Seleziona tutto

VAR CurYM =
    MAXX ( Calendario; Calendario[Mese_Anno] )
Questa riporta il valore "Anno_Mese" per la data che stai guardando all'interno della matrice (questo è un campo che utilizza la misura per filtrare la tabella Calendario).

Codice: Seleziona tutto

VAR Num =
    CALCULATE (
        [# SimpleCount];
        ALL ( Calendario[Data] );
        Calendario[Mese_Anno] = CurYM
    )
Questa variabile effettua il conteggio della tua tabella dati, ma per solo quei record che hanno come data, una relativa al valore Mese_Anno corrente. Per poter poi effettuare il conteggio su tutta la tabella ho rimosso il filtro applicato dalla singola data (ALL(...)), in questo modo il filtro attivo rimane quello di Mese_Anno

Codice: Seleziona tutto

VAR Den =
    CALCULATE (
        DISTINCTCOUNT ( Dati[Giorno] );
        ALL ( Calendario[Data] );
        Calendario[Mese_Anno] = CurYM
    )
Stessa logica di prima solo che qui si fa un conteggio distinto.

Codice: Seleziona tutto

VAR Result =
    IF ( NOT ISBLANK ( [# SimpleCount] ); DIVIDE ( Num; Den ) )
Il check tramite IF consente di visualizzare l'output desiderato, per le sole date che presentano un valore di [# SimpleCount].

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
Michelerad
Messaggi: 13 | Topic creati
Iscritto il: mer 23 set 2020, 11:48

Confronto totale giornaliero vs media giornaliera per mese

Messaggio da Michelerad »

Grazie
Rispondi