domingo, 10 de agosto de 2014

SSRS Suma condicional en cuadro de texto

Después de un buen rato de estar buscando información sobre mi error sumando valores de un campo y estar cambiando de formatos los números, encontré una solución que ayuda en la mayoría de los casos (hasta ahora en todos los que he probado), así que me animo a escribir por si alguien más está estancado con esto :)
Para simular un contador de las filas que cumplen una condición (nuestro filtro), valor que queremos en un cuadro de texto, la fórmula sería así:

=SUM( iif(Fields!Campo1.Value = "Algo", 1, 0), "Dataset1" )

Eso contará todas las filas de DataSet1 donde el campo llamado Campo1 es igual al texto "Algo". Fácil no? Y qué pasa si quiero sumar un valor de la misma fila? También se puede, sólo hay que indicar el campo a sumar:

=SUM( iif(Fields!Campo1.Value = "Algo", Fields!Campo2.Value, 0), "Dataset1" )

Donde Campo2 contiene números.
Pero acá es donde nos podemos topar con el error:



[rsAggregateOfMixedDataTypes] The Value expression for the textrun ‘Textbox201.Paragraphs[0].TextRuns[0]’ uses an aggregate function on data of varying data types. Aggregate functions other than First, Last, Previous, Count, and CountDistinct can only aggregate data of a single data type.

¿Por qué? Porque depende del formato del número del campo que estamos sumando, si es un entero/doble/etc es como debemos dar formato al número 0 que pusimos en la condición del iif. Acá es donde se usa el truco para evitar tener que revisar cuál es el formato y luego ver cuál es la conversión correcta desde ssrs, se puede usar la siguiente forma:

=SUM( iif(Fields!Campo1.Value = "Algo", Fields!Campo2.Value, NOTHING), "Dataset1" )

Poner nothing en vez de 0 es como considerar que el valor es nulo y como los nulos no cuentan en las sumas... taraaaan... el error de formato desaparece y tenemos el resultado esperado para la suma ;)

Referencias:
Suma condicional de valores (inglés)

No hay comentarios:

-