2011-01-18 13 views
20

Ho un rapporto SSRS che visualizza diverse pagine di righe. In ogni riga c'è un campo "TYPE". In quel campo TYPE c'è una "M" per il valore o una "P" per il valore. Alla fine del rapporto voglio riassumere tutti i valori dei prezzi per i TIPI "P". Ho provato questo ma prioduced un #Error:Riassunto condizionale SSRS

=Sum(iif(Fields!TYPE.Value = "P",Fields!EXT_QTY.Value * Fields!PRICE.Value ,0)) 

questo riassume tutte le righe

=iif(Fields!PART_TYPE.Value = "P" , Sum(Fields!EXT_QTY.Value * Fields!PRICE.Value), 0) 

Sono sicuro che questo è fattibile. Qualche idea? Grazie

+0

Perché CDbl è richiesto in questo scenario? –

+5

nello scenario dell'OP 'Sum (Fields! EXT_QTY.Value * Fields! PRICE.Value)' stava producendo numeri con il tipo double e/o decimal e in SSRS quando si esegue SUM, si aspetta SUM tipi simili e '0' è intero . Stava venendo meno a causa di ciò. Quindi la conversione sia della parte vera e falsa dell'istruzione IIF nello stesso tipo di dati risolve l'errore. – N30

risposta

31

trovato la risposta ....

=SUM(IIF(Fields!PART_TYPE.Value ="P",CDbl(Fields!EXT_QTY.Value * Fields!PRICE.Value), CDbl(0.0))) 
11

Il SUM fallisce a causa di digitare il confronto - non è possibile sommare i valori di tipo diverso, essendo l'espressione (probabilmente un Double) con 0, una Integer . La risposta di MikeTWebb fa una conversione di tipo esplicita per ovviare a questo errore. Questo va bene per questo specifico esempio, essendo un Somma, tuttavia questo non produce un risultato accurato se si desidera una media (essendo Sum/Count) dei valori in cui il Tipo è P. Questo perché 0 è un valore e verrebbe incluso nel calcolo della media quando si desidera che tali valori vengano esclusi dal calcolo.

Un'altra opzione è quella di utilizzare Nothing invece di 0:

=Sum(IIF(Fields!TYPE.Value = "P", Fields!EXT_QTY.Value * Fields!PRICE.Value, Nothing)) 

Questo risolve l'errore di confronto di tipo senza bisogno typecasting esplicito ed è una soluzione migliore quando si utilizza aggregazioni in cui se esiste il valore o non è significativo al risultato, come Average.

+1

Questo è stato perfetto. Sicuramente penso che l'uso di Nothing è la via da seguire come "regola generale" a causa di calcoli come Average. – Pete

+1

Yay! Questo era esattamente ciò di cui avevo bisogno. Non riescono comunque a capire chi sia il "Nulla" che sia una buona parola chiave per null. – Akaino