2011-01-18 91 views
20

Tengo un informe de SSRS que muestra varias páginas de filas. En cada fila hay un campo "TIPO". En ese campo TIPO hay una "M" para el valor o una "P" para el valor. Al final del informe quiero resumir todos los valores de precio para los TIPOS "P". He intentado esto pero prioduced un # error:Suma condicional de SSRS

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

este resume todas las filas

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

Estoy seguro que esto es factible. ¿Algunas ideas? Gracias

+0

¿Por qué se requiere CDbl en este escenario? –

+5

en el escenario OP 'Suma (Fields! EXT_QTY.Value * Fields! PRICE.Value)' estaba produciendo números con tipo decimal y doble y en SSRS cuando realiza SUM, espera SUM tipos similares y '0' es entero . Estaba fallando debido a eso. Entonces la conversión de la parte verdadera y falsa de la instrucción IIF al mismo tipo de datos resuelve el error. – N30

Respuesta

31

encontrado la respuesta ....

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

El SUM falla debido al tipo de comparación - no se puede sumar valores de diferentes tipos, siendo la expresión (probablemente un Double) con 0, un Integer . La respuesta de MikeTWebb hace una conversión de tipo explícita para evitar este error. Esto está bien para este ejemplo específico, que es una Suma, sin embargo, esto no produce un resultado preciso si quiere un promedio (siendo Sum/Count) de los valores donde el Tipo es P. Eso es porque 0 es un valor y estaría incluido en el cálculo del promedio cuando realmente quiere que esos valores sean excluidos del cálculo.

Otra opción es utilizar Nothing en lugar de 0:

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

esto resuelve el error de comparación de tipo sin necesidad de encasillamiento explícita y es una mejor solución cuando se utiliza agregaciones donde si existe el valor o no es significativa al resultado, como Average.

+1

Esto fue perfecto. Definitivamente creo que el uso de Nothing es el camino a seguir como una "regla de oro" debido a cálculos como Average. – Pete

+1

¡Yay! Esto era exactamente lo que necesitaba. Todavía no entiendo quién pensó que 'Nothing' era una buena palabra clave para null. – Akaino