Aggiungere semestri a un calendario in Power BI

Condividere su Facebook
Condividere su twitter
Condividere su linkato
Condividere su telegramma
Condividere su WhatsApp

Contenuti

In passato ho tenuto corsi di formazione Power BI in varie università 6 mesi e alcuni dei partecipanti mi hanno fatto la stessa domanda. "Qual è il modo migliore per aggiungere semestri a un calendario in modo da poter analizzare i dati degli studenti per semestre?? Ci sono diversi modi per risolvere questo problema. In questo articolo voglio condividere con voi un modo per risolverlo usando DAX in Power BI. userò il database AdventureWorks per dimostrazione. Per mantenere la demo più realistica, rinominerò alcune delle tabelle (Non cambierò i dati).

  • Il tavolo Clienti si chiamerà Studenti
  • La tabella delle vendite si chiamerà Iscrizioni per argomento.
  • Il tavolo Territorio si chiamerà Campus

Non uno scambio perfetto di uno, ma penso che servirà allo scopo. Non cambierò i dati effettivi, ma userò i dati come descritto sopra. So che i dati di iscrizione degli studenti sono diversi da questi, ma non ho quei dati disponibili; questa delega dovrebbe illustrare abbastanza bene il punto dell'articolo.

Il rapporto finale si presenta così.

addemtocal-1-2-5715934

Come è mia abitudine, di seguito ti mostrerò come farlo passo dopo passo. La tecnica che userò è essenzialmente Suonato in DAX che ho trattato in un precedente post sul blog.

Dati di esempio

per iniziare, Ho creato una tabella dei dati anagrafici con le date di inizio e fine del semestre; Ho chiamato questa tabella SemestreDates. Ho dato per scontato che ci sarà 2 semestri in un anno. Certo, alcune università avranno anche 3 oh 4 semestri in un anno; Il principio è lo stesso. Ho chiamato i due semestri di un anno come S1 e S2. Ho anche aggiunto una colonna YYYYSS per creare una colonna semestre e anno univoca. Finalmente, Ho aggiunto una colonna ID semestre per semplificare la scrittura delle formule DAX. Nota che quest'ultima colonna è un numero intero che identifica in modo univoco ogni semestre e viene incrementato di 1 per ogni semestre che passa.

addemtocal-2-1214290

Questa è una semplice tabella che chiunque può creare in Excel. Una volta creato, questa diventa la tabella principale che può essere semplicemente mantenuta ogni anno man mano che vengono pubblicate le nuove date del semestre.

Caricamento della tabella delle date del semestre nel modello di dati di Power BI

Ho caricato la tabella SemesterDates nella cartella di lavoro di AdventureWorks Power BI. In questo caso, Non collegherò la tabella a nessun'altra tabella nel modello di dati. Lo scopo delle relazioni in Power BI è propagare filtra una tabella ad un altro; non ho bisogno di farlo, così, nessuna relazione. Ho anche deciso di nascondere la tabella in modo che non venga visualizzata nella vista Report. Questo perché lo userò solo per scrivere le formule DAX richieste (colonne calcolate) richiesto ai fini della segnalazione. Questa è la mia visione relazionale del modello di dati.

addemtocal-3-1-7207415

Aggiungi colonne calcolate alla tabella del calendario

Lo consiglio sempre, in caso di dubbio, aggiungi misure e colonne non calcolate. Ma ci sono sempre eccezioni a questa regola, come ho spiegato nel mio articolo sul blog. In questo caso, stiamo aggiungendo le colonne calcolate a una tabella di ricerca (Calendario) per migliorarlo e Il tabelle di ricerca sono normalmente più piccoli (meno righe) e, così, l'impatto della dimensione delle colonne calcolate non è poi così male. Cosa c'è di più, Voglio usare il risultato per dividere i miei dati, e una misura non può farlo; ho bisogno di una colonna.

Ho aggiunto tre colonne calcolate AAAA, Semestre e IDSemestre utilizzando le seguenti formule DAX mostrate di seguito. Ho usato la sintassi VAR quindi le formule sono facili da capire. Queste formule sono essenzialmente la tecnica di banding in DAX.

AAAA = VAR Data Corrente="Calendario"[Data]
         VAR Risultato = CALCOLA(SELEZIONATOVALORE(Date del semestre[AAAA]), 
                                Data odierna >=Date semestre[Da data], 
                                Data odierna <=Date semestre[Ad oggi]
                      )
         RESTITUIRE SE(Risultato = BIANCO(), "Vacanza", Risultato)
Semestre = ERA Data Corrente ="Calendario"[Data]
           VAR Risultato = CALCOLA(SELEZIONATOVALORE(Date del semestre[Semestre]), 
                                  Data odierna >=Date semestre[Da data], 
                                  Data odierna <=Date semestre[Ad oggi]
                        )
           RESTITUIRE SE(Risultato = BIANCO(), "Vacanza", Risultato)
ID Semestre = VAR Data Corrente ="Calendario"[Data]
              VAR Risultato = CALCOLA(SELEZIONATOVALORE(Date del semestre[ID semestre]),
                                     Data odierna >=Date semestre[Da data],
                                     Data odierna <=Date semestre[Ad oggi]
                           )
              RESTITUIRE SE(Risultato = BIANCO(), 0, Risultato)

Il trucco con le formule di cui sopra è fare quanto segue (tenendo conto che è una colonna calcolata)

  • Prendi la data per ogni riga nella tabella del calendario (la formula esegue una riga alla volta, vale a dire, ha un contesto di riga)
  • Inserisci un filtro sulla tabella del semestre in modo che la tabella del semestre visualizzi una singola riga dopo l'applicazione del filtro.
    • L'unica riga deve essere la riga in corrispondenza o dopo la data di inizio, e anche entro o prima della data di fine.
  • Una volta che la tabella del semestre ha una sola riga (dopo l'applicazione dei filtri), estrai il valore univoco da una delle altre colonne nella tabella del semestre e salvalo nella mia nuova colonna calcolata.

Funziona perché gli intervalli di date nella tabella del semestre si escludono a vicenda (non ci sono periodi di date sovrapposti in cui è presente una data data 2 semestri).

Definire misure per informare le statistiche dei dati

Ora siamo pronti per definire le misure necessarie per informare gli approfondimenti dei dati. E come di consueto, prima ho aggiunto un Table Visual al report con il campo "Calendario"[AAAA] e poi continua ad aggiungere ogni misura per assicurarti che le mie formule DAX siano corrette.

La prima misura che ho scritto è contare il numero di studenti. Ricordare, sto usando AdventureWorks qui in realtà, quindi non un sostituto perfetto per le iscrizioni reali. Sto usando la data di acquisto di AdventureWorks come proxy per una data di transazione durante un semestre. tuttavia, Il principio è lo stesso.

Studenti totali in questo semestre = DISTINCTCOUNT(Iscrizioni[Chiave studente])

Successivamente definisco la misura per contare il numero di studenti nel semestre precedente.

Totale studenti Precedente. Semestre = VAR Semestre Corrente = SELECTEDVALUE('Calendario'[ID semestre])
                 VAR Semestre Prec = Semestre Attuale - 1
                 VAR Risultato = CALCOLA([Studenti totali questo semestre], 
                                         TUTTI('Calendario'), 
                                         'Calendario'[ID semestre] = Semestre precedente)
                 RITORNO Risultato

Possiamo definire Chg vs Semestre precedente come segue.

Modifica vs Prec. Semestre = VAR Semestre Corrente = SELECTEDVALUE('Calendario'[ID semestre])
         VAR Semestre Prec = Semestre Attuale - 1
         Risultato VAR = SE(Semestre precedente <> 0, 
                         [Studenti totali questo semestre] - [Totale studenti Precedente. Semestre]
                      )
         RITORNO Risultato

Abbiamo finalmente ottenuto il rapporto desiderato.

addemtocal-1-1-6656891

Ecco la cartella di lavoro di esempio che ho usato in questo post sul blog.

Un'ultima parola

Come ho detto all'inizio, c'è più di un modo per risolvere questo problema, compreso l'uso di Query di potenza invece di DAX. Lo svantaggio dell'utilizzo di DAX (questo metodo) è che devi scrivere le colonne calcolate in ogni nuova cartella di lavoro che crei. Indipendentemente, è un modo semplice e utile per risolvere il problema.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.