2009-07-30 14 views
19

Sto provando a valutare un prezzo al chilo ($/Kg) in base alle vendite di un prodotto. Funziona bene se il prodotto è stato venduto per tutto il periodo specificato. Tuttavia, se il prodotto non viene venduto, il Kg (il denominatore) finisce con 0 (zero) e si verifica un errore. - Dividi per errore zero.La funzione iif calcola entrambi i percorsi in SSRS o è in cortocircuito?

Ho provato questo

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

Sembra che la funzione iif calcola sia i risultati vero e falso. Come faccio a evitare questo.

Devo utilizzare la funzione switch?

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

risposta

16

Hai ragione, non cortocircuito. Questo fa schifo.

Dovrete fare qualcosa di simile:

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

La funzione di interruttore dovrebbe anche funzionare.

+0

darò un andare e ti faccio sapere .. –

+0

Grazie Robert . Questo funziona. Sto ancora ottenendo il divario per errore zero, quindi ora è solo una questione di cercare l'errore verso il basso. –

+0

Ho trovato il punto in cui si è verificato l'errore. era nell'SQL e non nel rapporto. –

4

Questo accade perché in VBScript tutte le condizioni all'interno di un IIF verranno valutate prima di qualsiasi funzionalità.

+0

Grazie Brian. Ho capito che era il caso. Sospetto che sia il caso di tutti i gusti di VB. –

0

Aggiungere il seguente al codice:

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 

quindi chiamare

=Code.SafeDiv(Revenue,KgSold) 

nella casella di testo epression