Problema con il calcolo delle percentuali

Il software per la BI di Microsoft, leader nel mercato

roberto3003
Messaggi: 11 | Topic creati
Iscritto il: mer 15 nov 2023, 10:31

Problema con il calcolo delle percentuali

Messaggio da roberto3003 »

Un saluto a tutti. Premetto che sono nuovo nell'utilizzo di Power BI ma mi si presenta un problema di questo tipo. Il mio modello si compone di una tabella che chiameremo dati vendite in cui ho inserito una serie di dati riguardanti le vendite e un'altra tabella che chiameremo negozi in cui risultano essere inseriti i codici dei vari punti vendita e la loro ripartizione geografica in particolare nord- owest, nord-est, centro, sud e isole. Ho creato una misura che si chiama marginalita 2020 che contiene la differenza tra i costi e i ricavi dei vari punti vendita. Allora se
inserisco la seguente misura:
margine 2020% per regione =
var tot = CALCULATE([margine 2020],ALL('negozi'[codice negozio]))
return
[margine 2020]/tot
ottengo le percentuali del margine 2020 suddivise per i vari negozi ma se inserisco
margine 2020% per area geografica =
var tot = CALCULATE([margine 2020],ALL('negozi'[area geofrafica]))
return
[margine 2020]/tot

mi da sempre come risultato 1

Non capisco deve si trovi il problema.
Un ringraziamento a chi vorrà aiutarmi
Roberto


Avatar utente

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

Problema con il calcolo delle percentuali

Messaggio da Andrea90 »

@roberto3003,

Il codice che utilizzi nelle misure e che riporti sul forum va inserito nei tag code. Così:

Codice: Seleziona tutto

margine 2020% per regione =
VAR tot =
    CALCULATE ( [margine 2020], ALL ( 'negozi'[codice negozio] ) )
RETURN
    [margine 2020] / tot
Se non sai come fare leggi gli annunci di staff che ci sono alcuni tutorial utili.

Per il tuo problema, come quasi sempre accade quando si parla di DAX e di "novizi", è legato ad aspetti teorici che non vengono approfonditi prima di cimentarsi nella creazione di misure.

ALL() è una formula che ora è tradotta con REMOVEFILTERS() --> https://learn.microsoft.com/en-us/dax/r ... nction-dax

E come dice il nome rimuove dal contesto valutativo attuale l'influenza di uno o più campi.

Ora, tu hai creato una sola tabella nella quale hai inserito queste due misure (o comunque che le alterni)? Sulle righe hai per caso il valore del campo [codice negozio] preso dalla tabella negozi?

Se la risposta a queste domande è si allora ti si dovrebbe accendere una lampadina pensando alla funzione che esegue REMOVEFILTERS()

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
roberto3003
Messaggi: 11 | Topic creati
Iscritto il: mer 15 nov 2023, 10:31

Problema con il calcolo delle percentuali

Messaggio da roberto3003 »

Ti ringrazio della pronta risposta. Vorrei precisarti come è composto il modello che sto studiando. Le tabelle sono le seguenti:
1) dati vendita che ha come campi: data, codice negozio, codice articolo, codice costo, codice ricavo, pezzi venduti, pezzi resi, ricavo unitario, costo unitario, categoria articoli
2) articoli che ha come campi: articolo, categoria, codice articolo
3) negozi che ha come campi: affitto 2020, affitto 2021, affitto 2022, altre spese 2020,altre spese 2021, altre spese 2022, costo personale 2020,costo personale 2021,costo personale 2022, area geografica, codice negozio, comune, data di apertura, provincia, regione, tipologia
4) calendario che ha come campi: data, anno, mese, giorno

Le relazioni sono le seguenti:
1) articoli con dati vendite mediante il campo codice articolo
2) negozi con dati vendita mediante il campo codice negozio
3) calendario con dati vendite mediante il campo data

Ho creato le seguenti misure:

Codice: Seleziona tutto

fatt netto anno 2020 = calculate([fatt netto],'calendario'[anno]=2020

Codice: Seleziona tutto

totale costi 2020 = sumx('negozi','negozi'[affitto 2020] + ....+ 'negozi'[costo personale 2020]

Codice: Seleziona tutto

margine 2020 = [fatt netto 2020]-[totale costi 2020]
Ora la seguente misura:

Codice: Seleziona tutto

margine 2020 % per negozio =
var tot = calculate([margine 2020],all('negozi'[codice negozio]))
return
[margine 2020]/tot
mi fa vedere correttamente per negozio il fatturato percentuale dell'anno 2020 mentre la seguente misura (che a me sembra simile)

Codice: Seleziona tutto

margine 2020 % per area geografica =
var tot = calculate([margine 2020],all('negozi'[area geografica]))
return
[margine 2020]/tot
restituisce sempre il valore 1 ossia 100%.

Veramente non mi so spiegare il perché.

Se vorrai ancora aiutarmi te ne sarò molto grato.
Grazie Roberto



Nel frattempo sono riuscito nell'intento con la misura:

Codice: Seleziona tutto

margine 2020 % per area geografica =
	var tot =calculate([margine 2020],all('negozi'))
	return
	[margine 2020]/tot
Ma non mi so spiegare perché funzione

ps: Scusami se ho usato ALL nel mio testo di riferimento lo usa. Modificherò per il futuro
Avatar utente

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

Problema con il calcolo delle percentuali

Messaggio da Andrea90 »

roberto3003 ha scritto: mer 13 dic 2023, 18:20 Ti ringrazio della pronta risposta. Vorrei precisarti come è composto il modello che sto studiando. Le tabelle sono le seguenti:
1) dati vendita che ha come campi: data, codice negozio, codice articolo, codice costo, codice ricavo, pezzi venduti, pezzi resi, ricavo unitario, costo unitario, categoria articoli
2) articoli che ha come campi: articolo, categoria, codice articolo
3) negozi che ha come campi: affitto 2020, affitto 2021, affitto 2022, altre spese 2020,altre spese 2021, altre spese 2022, costo personale 2020,costo personale 2021,costo personale 2022, area geografica, codice negozio, comune, data di apertura, provincia, regione, tipologia
4) calendario che ha come campi: data, anno, mese, giorno

Le relazioni sono le seguenti:
1) articoli con dati vendite mediante il campo codice articolo
2) negozi con dati vendita mediante il campo codice negozio
3) calendario con dati vendite mediante il campo data
Ti dico fin da ora che è inutile scrivere tutto questo papiro di roba, poiché non si può pensare che un utente si metta li a crearsi una mappa di quello che hai scritto per capire i campi e le relazioni presenti nel tuo modello. Si fa molto prima ad allegare un file demo con le sole tabelle che servono per il calcolo ed un paio di righe di dati non sensibili in ciascuna.
roberto3003 ha scritto: mer 13 dic 2023, 18:20 Veramente non mi so spiegare il perché.
Il motivo per il quale ti ho indicato che ALL() ora si traduce nella formula REMOVEFILTERS() non è perché è un errore utilizzarlo, dunque:
roberto3003 ha scritto: mer 13 dic 2023, 18:20 ps: Scusami se ho usato ALL nel mio testo di riferimento lo usa. Modificherò per il futuro
Non c'è nulla di cui scusarsi puoi usarlo tranquillamente. Il motivo è che se ALL() produce lo stesso effetto di REMOVEFILTERS() pensavo fosse più semplice capire che cosa fa, anche solo traducendolo dall'inglese si può intuire che il suo compito è "rimuovere" filtri applicati al contesto filtro attuale.

Ora tu dici che:

Codice: Seleziona tutto

var tot = calculate([margine 2020],all('negozi'[codice negozio]))
è simile a questa:

Codice: Seleziona tutto

var tot = calculate([margine 2020],all('negozi'[area geografica]))
Io invece ti ho fatto due domande alle quali non vedo le tue risposte. Rispondi prima alle due domande così da riuscire a spiegarne il motivo.

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
roberto3003
Messaggi: 11 | Topic creati
Iscritto il: mer 15 nov 2023, 10:31

Problema con il calcolo delle percentuali

Messaggio da roberto3003 »

Allora spero di fare giusto ora. Il mio modello è il seguente:
https://drive.google.com/file/d/1ifJFM ... p=sharing
Sono riuscito a fare quello che volevo utilizzando la misura

Codice: Seleziona tutto

margine 2020 % =
	var tot =calculate([margine2020],all('negozi')
	return
	[margine 2020]/tot
Quindi elimino dal contesto tutte le colonne della tabella negozi tra cui risulta anche area geografica. Ho quindio capito, grazie anche al tuto aiuto, che così facendo il totale di [margine 2020] non dipenderà più dai filtri
che io potrei utilizzare della tabella negozi.

Ok ma perchè prima funzionava per regioni e codice negozio ma non funzionava per area geografica? E' questo che non riesco a capire.
Ciao e grazie ancora
roberto
Avatar utente

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

Problema con il calcolo delle percentuali

Messaggio da Andrea90 »

@roberto3003,
Andrea90 ha scritto: mer 13 dic 2023, 19:48 Io invece ti ho fatto due domande alle quali non vedo le tue risposte. Rispondi prima alle due domande così da riuscire a spiegarne il motivo.
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
roberto3003
Messaggi: 11 | Topic creati
Iscritto il: mer 15 nov 2023, 10:31

Problema con il calcolo delle percentuali

Messaggio da roberto3003 »

Ora, tu hai creato una sola tabella nella quale hai inserito queste due misure (o comunque che le alterni)? Sulle righe hai per caso il valore del campo [codice negozio] preso dalla tabella negozi?

No ho una serie di tabelle che ho messo in immagine nella risposta precedente. Nella tabella dati vendite vi è il codice negozio collegato con la relazione uno a molti con la tabella negozi in cui vi è l'area geografica.
Avatar utente

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

Problema con il calcolo delle percentuali

Messaggio da Andrea90 »

@roberto3003

“ No ho una serie di tabelle che ho messo in immagine nella risposta precedente”

Non intendevo le tabelle del modello, intendevo la tabella che stai utilizzando nel report (oggetto matrice o oggetto tabella), che campi hai messo nelle righe?

Ecco perché chiediamo sempre un report demo in pbi da allegare, si eviterebbero tutta una serie di domande.

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
roberto3003
Messaggi: 11 | Topic creati
Iscritto il: mer 15 nov 2023, 10:31

Problema con il calcolo delle percentuali

Messaggio da roberto3003 »

Ne approfitto. Cosa intendi per report demo?

Allora la matrice che sto utilizzando nel report
1) se nelle righe netto negozi[regioni] e nei valori la misura fatturato netto e la misura fatturato netto percentuale regioni cosi costruita

Codice: Seleziona tutto

fatturato netto percentuale regioni = 
var tot = calculate([fatt netto],all('negozi'[regioni]))
return 
[fatt netto]/tot
tutto funziona
2) se nelle righe metto negozi[area geografica] e nei valori la misura fatturato netto e la misura fatturato netto percentuale per area geografica così costruita

Codice: Seleziona tutto

fatturato netto percentuale area geografica = 
var tot = calculate([fatt netto],all('negozi'[area geografica))
return 
[fatt netto]/tot
il fatturato netto viene regolarmente suddiviso per area geografica mentre la percentuale area geografica in ogni riga rimane 100 per 100.

Roberto
Avatar utente

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

Problema con il calcolo delle percentuali

Messaggio da Andrea90 »

roberto3003 ha scritto: dom 17 dic 2023, 16:00 Cosa intendi per report demo?
Un file di PowerBI, con le sole tabelle nel modello dati che stai utilizzando per il report che riporta l'errore, con delle righe di dati (non tutte ne bastano giusto un paio), eliminando tutti i campi che non servono così da tenere solo lo stretto indispensabile. Con il codice delle misure che stai utilizzando, così che noi apriamo il file e nel giro di poco riusciamo a capire cosa c'è che non va.

Tornando a quello che chiedi, nella prima misura tu usi ALL() con il campo [regioni] preso dalla tabella negozi. Il tuo oggetto matrice (o tabella che sia) ha sulle righe il campo [regioni] quindi se tu sei in una cella di questa matrice con la regione = "A" il contesto valutativo attuale sta filtrando il tuo modello dati per la sola regione "A". Ecco perché tu vedrai il valore corretto. Se tu usi ALL() con quel campo stai dicendo alla misura di rimuovere quel contesto filtro e pertanto, non essendoci altri campi dimensionali che filtrano il modello, la misura ti restituirà il totale di tutte le regioni. Questo numero lo utilizzerai come denominatore per calcolare il tuo valore percentuale.

Nella seconda misura invece tu stai togliendo il filtro del campo [area geografica], ma tu non stai utilizzando quel campo dentro il tuo oggetto matrice e pertanto l'effetto che produce ALL è nullo. E dunque al denominatore avrai comunque il valore della riga corrente (in questo caso per regione). Dunque il valore del numeratore e del denominatore saranno identici ecco perché il rapporto ti darà sempre 1 come risultato.

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