sábado, 14 de abril de 2012
Reporting Services Error División Por Cero
Manejar la división por cero es un verdadero problema, existen 2 formas de corregir este problema.
1.) Utilizar un IIF
2.) Hacer un función para evaluar.
1.) Solución a medias que puede fallar (IIf)
Query:
SELECT detalle.productid,
productos.productname,
detalle.quantity,
detalle.unitprice,
discount
FROM [Order Details] detalle
INNER JOIN products productos
ON detalle.productid = productos.productid
En este caso en particular, donde el campo Discount la cual divide, puede llegar a ser cero, el error será infinity, la solución en este caso será hacer una pequeña corrección al la formula.
=iif(Fields!Discount.Value=0,0,Fields!UnitPrice.Value/Fields!Discount.Value)
Si hacemos un cambio al query, para el que cambio discount tenga valores nulos, esto con el objetivo de hacer mar real nuestro ejemplo.
productos.productname,
detalle.quantity,
detalle.unitprice,
CASE discount
WHEN 0 THEN NULL
ELSE discount
END discount
FROM [Order Details] detalle
INNER JOIN products productos
ON detalle.productid = productos.productid
Aun que la formula tenga el iif siempre nos muestra en mensaje de error, esto por que primero se evalúa los valores globales antes de la parte falsa.
Vea el siguiente ejemplo para solventar este problema de raíz.
2.) Solventar la situación de por medio de una función:
2.1) Seleccione el las propiedades del reporte, clic derecho sobre el reporte y seleccione report properties.
2.2) En la pestaña de code agregue la siguiente función:
2.3) Por ultimo debemos de corregir nuestra formula por:
=code.Calcular(Fields!UnitPrice.Value,Fields!Discount.Value)
Con esto tendremos el resultado esperado:
2.1) Seleccione el las propiedades del reporte, clic derecho sobre el reporte y seleccione report properties.
2.2) En la pestaña de code agregue la siguiente función:
Public Shared Function Calcular(ByVal Valor1 As Decimal, ByVal Valor2 As Decimal) As Decimal If Valor2= 0 Then Return 0 End If Return (Valor1/ Valor2) End Function
2.3) Por ultimo debemos de corregir nuestra formula por:
=code.Calcular(Fields!UnitPrice.Value,Fields!Discount.Value)
Con esto tendremos el resultado esperado:
Suscribirse a:
Comentarios de la entrada (Atom)
5 comentarios:
Excelente resolverlo con la función , me ha sacado de apuros muchas gracias por compartir!!
man agrego ese código en propiedades de reporting y luego en la expresión invoco a code.Calcular me sale error, estoy trabajando con reporting services no con builder
man si no existe dato en las tablas porque no hay registro como se plantearía.
Gracias por compartir este articulo, me ayudo...
Hola Gracias por el aporte, justo me sirvió para resolver el problema que tenia, gracias.
Publicar un comentario