So in creating an SSRS report recently which contained percent calculations in the totals I came across a divide by zero error I could not get around. All the checks for null/0 in the world wouldn't get rid using the expression editor.
Here is the formula for the detail level where it works fine:
Margin = (Price-Cost)/Price
and checking for zero values
Margin = Iif((Price-Post)=0 or Price=0),0, (Price-Cost)/Price
But for totals, it throws an error
Margin = (Sum(Price) - Sum(Cost))/Sum(Price)
Margin = Iif(((Sum(Price)-Sum(Cost))=0 or Price=0)),0, (sum(Price)-sum(Cost))/sum(Price)
SHOULD be straight forward,,,,, but not. It appears to be too complex in some way for the expression to be calculated and just returns errors.
So, and I'm borrowing here, I'm going to repost something simple but brilliant that was posted by William Mendoza on his blog site:
In the Menu; got to Report > Report Properties > Code and paste the code bellow
Public Function Quotient(ByVal numerator As Decimal, denominator As Decimal) As Decimal
If denominator = 0 Then
Return 0
Else
Return numerator / denominator
End If
End Function
To call the function go to the the Textbox expresion and type:
=Code.Quotient(SUM(fields!FieldName.Value),SUM(Fields!FieldName2.Value))
in this case I am putting the formula at the Group level so I am using sum. Otherwise it would be:
=Code.Quotient(fields!FieldName.Value,Fields!FieldName2.Value)
Thanks William for your post and help
Works perfectly. I've been hesitant at using custom code, but it beats the IIF statements anyway, which are also ineligible. At least this saves us a lot of code :)
ReplyDelete