Pagina 1 di 1

Somma su pivot non coerente

Inviato: lun 17 mag 2021, 15:42
da DarioDalfe
Buon pomeriggio a tutti,

torno da voi perché, purtroppo, non riesco a risolvere un problema con alcune misure e la loro rappresentazione all'interno di una tabella pivot. I valori esposti nelle singole righe sono corretti ma i totali non coincidono. Ho usato il più possibile sumx senza risultato.

Immagine


Sotto le varie misure
Ricavi Budget

Codice: Seleziona tutto

=ROUND(
CALCULATE(
SUMX(
Input_BDGActual;
Input_BDGActual[Importo]);
Input_BDGActual[Tipologia]="Ricavi");
0)
Costi Budget

Codice: Seleziona tutto

ROUND(
CALCULATE(
SUMX(
Input_BDGActual;
Input_BDGActual[Importo]);
Input_BDGActual[Tipologia]<>"Ricavi");
0)
Costi Consuntivi

Codice: Seleziona tutto

=ROUND(
SUMX(
Calc_Costi;
Calc_Costi[Importo]);
0)

Avanzamento Commessa --> % calcolata prendendo come base i costi di budget attesi

Codice: Seleziona tutto

IF(
[ComApertaChiusa]=0;
1;
	IF(
	[RicaviBdgRev]=1;
	0;
		IF(
		[CostiBdgRev]=0;
		0;
			DIVIDE(
			[CostiCons];
			[CostiBdgRev]
			)
		)
	)
)
Produzione

Codice: Seleziona tutto

VAR Classe = SUMX(
		Input_Commesse;
		Input_Commesse[Classe1key]
		)
VAR Preventivi = SUMX(
		Input_Commesse;
		Input_Commesse[Preventivi]
		)
VAR StatoComm = SUMX(
		Input_Commesse;
		Input_Commesse[StatoKey]
		)

RETURN

IF([FatturatoSaldo]>0 && [CostiBdgRev]=0 && [RicaviBdgRev]=0;
[Fatturato];
	IF(Classe=0;
	0;
		IF(Preventivi=1;
		0;
			IF([CostiBdgRev]=0 && [RicaviBdgRev]=0;
			0;
				IF(StatoComm =0 && [FatturatoSaldo]>0;
				[Fatturato];
					IF(StatoComm=0 && [RicaviBdgRev]>1;
					[RicaviBdgRev];
						IF(Classe=1 &&Preventivi=1;
						0;
							IF([RicaviBdgRev]=1;
							[PropostaProdConsuntivo];
								IF([RicaviBdgRev]*[Avanzamento%Commessa]>[RicaviBdgRev];
								[RicaviBdgRev];
								[RicaviBdgRev]*[Avanzamento%Commessa]
								)
							)
						)
					)
				)
			)	
		)
	)
)


I dati esposti nelle singole righe sono corretti e li ho confrontati con altre tabelle che compilo manualmente. Gli scostamenti li trovo sulla colonna totale produzione e %avanzamento che non tengono conto dei valori ma eseguono il calcolo % sul totale colonna ricavi bdg e costi consuntivi.

Grazie a chi saprà indicarmi la strada.

Dario

Immagine

Somma su pivot non coerente

Inviato: lun 17 mag 2021, 16:01
da Enrico Galli
Ciao. Tralasciando una sintassi sicuramente migliorabile in molti punti (ti ricordo inoltre che il forum possiede un tag per il rendering del codice con sintassi evidenziata, stavolta te l'ho aggiunto io), mi viene da dire questo: visto che il tuo calcolo di Produzione non ha una logica unica, ma variabile a seconda di quello che risulta dalle precedenti misure, devi fare in modo che il calcolo venga fatto riga per riga (e poi sommato) anche per il subtotale. Come? Creando una tabella temporanea con tutti i valori visibili del tuo campo riga (che non sapendo come si chiama identificherò con [Codice prodotto]), e "attaccandole" i valori di produzione calcolati.
Quindi, mantenendo la misura [Produzione] come l'hai scritta tu, la nuova misura "Produzione corretta" potrebbe diventare qualcosa tipo:

Codice: Seleziona tutto

=
SUMX(
	ADDCOLUMNS(
		VALUES(Input_Commesse[Codice Prodotto]);
		"@prod"; [Produzione]
	);
	[@prod]
)
Naturalmente sarebbe tutto moooooolto più semplice se ci fosse un file allegato, anziché degli screenshot di scarsa utilità

Somma su pivot non coerente

Inviato: lun 17 mag 2021, 16:33
da DarioDalfe
Enrico, che dire. Grazie mille. Ho risolto subito.
Ti chiedo un altro paio di cose visto che me le hai segnalate:
- dove trovo il tag di cui parli? mi dispiace se hai dovuto perdere tempo;
- in che modo miglioreresti la sintassi?
- il file che utilizzo è molto "pesante" e non mi permette il caricamento, quali altre alternative ho per snellire le future richieste di assistenza?

grazie ancora comunque. con i vostri suggerimenti sto avanzando velocemente!

Somma su pivot non coerente

Inviato: lun 17 mag 2021, 18:14
da Enrico Galli
Grazie per il feedback :)
Guarda gli annunci dello staff, in particolare:
- viewtopic.php?f=4&t=43
- viewtopic.php?f=4&t=13

Per la tua sintassi: sembra tu sia convinto che usare SUMX sia meglio in qualsiasi situazione, ma in certi casi tutto quello che fai è allungare il codice.
Esempio:

Codice: Seleziona tutto

=
ROUND(
	CALCULATE(
		SUMX(
			Input_BDGActual;
			Input_BDGActual[Importo]
		);
		Input_BDGActual[Tipologia]="Ricavi"
	);0
)
Può essere scritto così (puoi fare anche una sola misura, ma io preferisco farne due):

Codice: Seleziona tutto

Totale Importo=
SUM ( Input_BDGActual[Importo] )

Ricavi Budget =
ROUND(
	CALCULATE (
		[Totale Importo];
		Input_BDGActual[Tipologia]="Ricavi"
	);0
)
E altri casi simili. Gli IF nidificati sono sostituibili con uno SWITCH (e meglio leggibili), esempio:

Codice: Seleziona tutto

Avanzamento commessa =
SWITCH (
	TRUE ();
	[ComApertaChiusa]=0; 1;
	[RicaviBdgRev]=1; 0;
	[CostiBdgRev]=0; 0;
	DIVIDE(
		[CostiCons];
		[CostiBdgRev]
	)
)
Spero di averti dato qualche indicazione utile :wave: