2009-07-30 21 views
19

Próbuję ocenić cenę za kilogram ($/kg) na podstawie sprzedaży produktu. To działa dobrze, jeśli produkt został ostro sprzedany w podanym okresie. Jednak jeśli produkt nie jest sprzedawany, Kg (mianownik) kończy się jako 0 (zero) i wynik błędu. - Błąd dzielenia przez zero.Czy funkcja iif oblicza obie ścieżki w SSRS lub czy jest zwarta?

Próbowałem to

=iif(KgSold=0,0,Revenue/KgSold) 

Wydaje się, że funkcja iif oblicza zarówno prawdziwych i fałszywych wyników. Jak sobie z tym poradzić.

Czy powinienem zamiast tego używać funkcji switch?

=switch(KgSold=0,0 
     KgSold<>0,Revenue/KgSold) 

Odpowiedz

16

Masz rację, to nie zwarcie. To jest do bani.

Musisz zrobić coś takiego:

= Iif(KgSold = 0, 0, Revenue)/Iif(KgSold = 0, 1, KgSold) 

Funkcja przełącznik powinien działać.

+0

dam mu szansę i niech wiesz .. –

+0

Dzięki Robert . To działa. Nadal dostaję podział przez zero błędów, więc teraz jest to kwestia polowania na błąd. –

+0

Znalazłem miejsce, w którym wystąpił błąd. to było w SQL, a nie w raporcie. –

4

Dzieje się tak, ponieważ w języku VBScript wszystkie warunki w obrębie IIF będą oceniane przed pojawieniem się jakiejkolwiek funkcjonalności.

+0

Dzięki Brian. Pomyślałem, że tak było. Podejrzewam, że tak jest w przypadku wszystkich smaków VB. –

0

Dodajemy poniższy kod:

Public Function SafeDiv(byval num as double, byval den as double) as object 

    If den = nothing then return nothing 
    If den = 0 then return nothing 

    return num/den 

End Function 

Następnie zadzwonić

=Code.SafeDiv(Revenue,KgSold) 

w epression polu tekstowym