2009-07-30 16 views
19

Tôi đang cố gắng đánh giá Giá mỗi Kilo ($/Kg) dựa trên doanh thu của một sản phẩm. Điều này hoạt động tốt nếu sản phẩm được bán một cách acutally trong khoảng thời gian được chỉ định. Tuy nhiên nếu sản phẩm không được bán Kg (mẫu số) kết thúc bằng 0 (không) và kết quả lỗi. - Chia cho lỗi Zero.Chức năng iif có tính toán cả hai đường dẫn trong SSRS hoặc nó được đoản mạch không?

Tôi cố gắng này

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

Dường như iif hàm được tính cả kết quả đúng và sai. Làm thế nào để tôi có được xung quanh này.

Tôi có nên sử dụng hàm switch thay thế không?

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

Trả lời

16

Bạn nói đúng, nó không ngắn mạch. Điều đó thật tệ.

Bạn sẽ phải làm một cái gì đó như thế này:

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

Chức năng chuyển đổi cũng nên làm việc.

+0

tôi sẽ cung cấp cho nó một đi và cho bạn biết .. –

+0

Cảm ơn Robert . Điều đó không hiệu quả. Tôi vẫn nhận được sự phân chia bằng không lỗi vì vậy bây giờ nó chỉ là một vấn đề săn bắn lỗi xuống. –

+0

Tôi đã tìm thấy nơi xảy ra lỗi. nó nằm trong SQL và không có trong báo cáo. –

4

Điều này xảy ra vì trong VBScript tất cả các điều kiện trong IIF sẽ được đánh giá đầu tiên trước khi bất kỳ chức năng nào xảy ra.

+0

Cảm ơn Brian. Tôi đã nghĩ đó là trường hợp. Tôi nghi ngờ rằng đó là trường hợp cho tất cả các hương vị của VB. –

0

Thêm dòng sau vào code của bạn:

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 

Sau đó gọi

=Code.SafeDiv(Revenue,KgSold) 

trong epression hộp văn bản