In een eerdere post schreef ik hoe je deling door nul voorkomt in Reporting Services. Het probleem met de custom code die ik gebruikte, was dat de code de waarde 0 teruggaf als een van de getallen 0 of onbekend is.
Als de uitkomst NULL was, gaf de code dus 0 terug. Daardoor stond de waarde 0 in mijn rapporten:

Op internet vond ik betere code om de fout door deling door nul in SSRS te voorkomen.
Oude code:
Public Function Divide(ByVal first As Double, ByVal second As Double) As Double
If second = 0 OR first = 0
Return 0
Else
Return first / second
End If
End Function
Gebruik in een expressie: Code.Divide(Value A, Value B)
Betere code:
Public Function CalcDivision(ByVal Numerator As Object, _
ByVal Denominator As object, ByVal DivideByZeroDefault As Object) As Object
If Denominator <> 0 Then
Return Numerator/Denominator
Else
Return DivideByZeroDefault
End If
End Function
Gebruik in een expressie: =Code.CalcDivision(Field A, Field B,Nothing)
De functie geeft dus NULL terug en niet 0! Betere oplossing!

Ik hoop dat Microsoft het makkelijker maakt om dit soort dingen met minder moeite op te lossen. Ik heb het nog niet geprobeerd in SQL 2014/2016, dus misschien hebben ze al een oplossing om deling door nul te voorkomen. Ze zouden standaard een handige functie in SSRS moeten stoppen, of iets in die richting!
Veelgestelde vragen
Hoe voorkom ik een fout door deling door nul in SSRS?
Voeg een custom code-functie aan het rapport toe die controleert of de noemer niet 0 is voordat hij deelt. Is de noemer 0, dan geeft de functie een standaardwaarde terug die je meegeeft. Je roept hem in een expressie aan met Code.CalcDivision.
Waarom toont mijn SSRS-rapport 0 in plaats van een lege waarde na een deling?
De oude functie Divide gaf 0 terug als een van de getallen 0 of onbekend was. Daardoor verscheen een NULL-uitkomst ook als 0 in het rapport.
Hoe geef ik NULL terug in plaats van 0 bij een deling in SSRS?
Gebruik de functie CalcDivision en geef Nothing mee als derde argument: =Code.CalcDivision(Field A, Field B, Nothing). De functie geeft dan NULL terug als de noemer 0 is.
Welke parameters heeft de functie CalcDivision in SSRS?
Drie parameters van het type Object: Numerator, Denominator en DivideByZeroDefault. Hij geeft Numerator/Denominator terug als de noemer niet 0 is. Anders geeft hij de standaardwaarde terug.
Wat was er mis met de oude functie Divide in de custom code van SSRS?
Hij gaf 0 terug als een van beide getallen 0 was, niet alleen de noemer. Een NULL-uitkomst werd daardoor 0 in het rapport, en dat verbergt ontbrekende data.
1 reactie
=IIf(Isnothing(Sum(Fields!Expr2.Value))=true OR Sum(Fields!Expr2.Value)=0 ,"NULL",Sum(Fields!Expr1.Value)/Sum(Fields!Expr2.Value))
Gerelateerde blogs
SSRS - Subscriptions die op Pending blijven staan
Hoe ververs je de cache van Reporting Services?
SSRS2008R2 - Keep Header Visible While Scrolling