Filtri data a TOPN

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

mvoltolini
Messaggi: 5 | Topic creati
Iscritto il: gio 27 lug 2023, 16:44

Filtri data a TOPN

Messaggio da mvoltolini »

Ciao a tutti,

dopo molto tempo ho ripreso lo studio di DAX e PowerBI. In un esercizio ho generato una tabella calcolata su datamodel SQL Server che mi calcoli i 10 articoli più venduti.

Codice: Seleziona tutto

=CALCULATETABLE(
    TOPN(
        10,
        SUMMARIZE(
            factVenditeCorpo,
            dimArticoli[nomeArticolo],
            "Totale Venduto", SUM(factVenditeCorpo[totaleRiga]),
            "Totale Volume", SUM(factVenditeCorpo[qtaVenduta])
        )
    ),
    FILTER(
        factVenditeTesta,
        factVenditeTesta[dataVendita] IN DATESBETWEEN(dimCalendario[data], "01/01/2022", "05/01/2022")
    )
)
Per esercizio ho aggiunto una funzione FILTER per "tagliare" i dati con un filtro impostato da report PowerBI però non so come passare il range alla funzione DATESBETWEEN. Mi potete dare un input per capire come si fa questa operazione?

Grazie mille


Avatar utente

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

Filtri data a TOPN

Messaggio da Andrea90 »

@mvoltolini

Prima nota:

Codice: Seleziona tutto

SUMMARIZE(
            factVenditeCorpo,
            dimArticoli[nomeArticolo],
            "Totale Venduto", SUM(factVenditeCorpo[totaleRiga]),
            "Totale Volume", SUM(factVenditeCorpo[qtaVenduta])
        )
Non si usa SUMMARIZE() per creare delle colonne calcolate nella tabella virtuale, si usa ADDCOLUMNS() in aggiunta a SUMMARIZE().

Seconda nota:

Codice: Seleziona tutto

FILTER(
        factVenditeTesta,
        factVenditeTesta[dataVendita] IN DATESBETWEEN(dimCalendario[data], "01/01/2022", "05/01/2022")
    )
Non si filtrano intere tabelle, non è performante ed è inoltre incline ad errori perché passerai un intera tabella (e tutte le sue colonne) come argomenti filtro. Inoltre devi essere consapevole del fatto che se passi "factVenditeTesta" alla funzione FILTER() questa utilizzerà solo le righe visibili nel contesto filtro attivo al momento del calcolo e questa cosa può cambiare tantissimo l'output ottenuto.

Terza nota:

Codice: Seleziona tutto

DATESBETWEEN(dimCalendario[data], "01/01/2022", "05/01/2022")
Sai come verrà letto dal sistema quel "05/01/2022" ? Per te dovrebbe essere il 5 Gennaio ?

Per essere sicuri io non utilizzo le stringhe testuali, bensì sfrutto la funzione DATE() ad esempio: DATE ( 2022, 01, 05 ) per indicare che si parla del 5 di gennaio.


Se la tabella factVenditeTesta filtra la tabella factVenditeCorpo con una relazione 1 a molti e se la tabella factVenditeTesta è legata alla tua tabella Calendario puoi filtrare direttamente la factVenditeCorpo che utilizzerai dentro SUMMARIZE() cosi da passare alla formula una tabella già filtrata secondo le tue richieste.

Detto questo per maggior supporto è necessario avere un file demo (non serve identico all'originale, basta un modello dati caricato con qualche riga presa a caso delle sole colonne che utilizzerai ed il risultato desiderato scritto a mano).

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
mvoltolini
Messaggi: 5 | Topic creati
Iscritto il: gio 27 lug 2023, 16:44

Filtri data a TOPN

Messaggio da mvoltolini »

Ciao Andrea e grazie per le informazioni. Le due date le ho messe io manualmente per poter chiudere la formula e verificare che la tabella calcolata venisse correttamente ricalcolata con il cambio del range. In allegato ho messo lo schema del mio datamodel usato per esercizio.

Per quanto riguarda l'upload del file di esempio devo caricare il mio file model.bim?
Allegati
SchemaDataModel.png
SchemaDataModel.png (102.5 KiB) Visto 25 volte
Avatar utente

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

Filtri data a TOPN

Messaggio da Andrea90 »

@mvoltolini

1) Quella relazione bidirezionale tra Calendario e FactVenditeTesta che cosa è? Perché ti serve una bidirezionale?

2) Hai altre relazioni bidirezionali all'interno del modello.... perché le stai usando? Una relazione tra tabelle dovrebbe essere il più possibile una 1 a molti.

3) Del .bim non è importante a noi serve un file allegato con un paio di righe d'esempio delle sole tabelle che sono necessarie per la problematica che stai riscontrando. Tanto alla fine si tratta di prendere una tabella di testa (es° due fatture) ed una di corpo (qualche riga per ciascuna delle due fatture inserite nella prima) con i dati che devi sommare (es° TotaleRiga) e la tabella Calendario.

Se la tabella Calendario è legata correttamente alla tabella della testata e quest'ultima è collegata correttamente a quella del corpo allora un filtro su un campo data dovrebbe espandersi fino alle righe di corpo fattura. Per quel DATESBETWEEN() oltre alla nota del punto (1) rimane quello che ti ho indicato nel mio primo messaggio ovvero filtrare direttamente la tabella factvenditecorpo presente nel SUMMARIZE().

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
Rispondi