2012-05-03 3 views
13

Ho un rapporto con un campo il cui valore era l'espressione:divisione per zero/soluzione nulla in SSRS Rapporto 2008

Fields!TotalPrice.Value/Fields!TotalSlots.Value 

Anche se a volte TotalSlots era vuota e quindi mi è stato sempre una divisione per errore di runtime zero. Così ho cambiato l'espressione in questo:

=IIF(Fields!TotalSlots.Value > 0, Fields!TotalPrice.Value/Fields!TotalSlots.Value,"unknown") 

ma sto ancora ottenendo una divisione per errore zero. Come faccio a risolvere questo problema con il divisore zero.

risposta

15

VB IIF evaluates all arguments, quindi genera un errore se uno degli argomenti genera un errore:

La formula può essere scritto come:

=IIF(Fields!TotalSlots.Value > 0, 
    Fields!TotalPrice.Value/
    IIF(Fields!TotalSlots.Value > 0, 
     Fields!TotalSlots.Value, 
     1), 
    "unknown") 

Quindi anche quando TotalSlot è zero, la formula ha vinto ancora incontrare un problema di divisione

+1

Potrebbe non essere applicabile qui, ma per quanto riguarda i casi in cui il divisore può essere negativo? – Homer

+2

Sostituisci entrambe le occorrenze di '> 0' con' <> 0' e dovresti andare bene per i divisori negativi. –

1

Non penso che il tuo errore sia sul calcolo. Prima di tutto, SSRS tratta automaticamente questa situazione. Vedi la mia terza colonna. E la quarta mostra la tua espressione:

enter image description here

Il tuo problema è probabilmente da qualche altra parte

23

La risposta di Jamie F è corretta. Come suggerimento, è possibile aggiungere una funzione al codice del report per rendere la divisione un po 'più facile da implementare in più celle, ad es.

Public Function Divider (ByVal Dividend As Double, ByVal Divisor As Double) 
If IsNothing(Divisor) Or Divisor = 0 
    Return 0 
Else 
    Return Dividend/Divisor 
End If 
End Function 

È quindi possibile chiamare questo in una cella in questo modo:

=Code.Divider(Fields!FieldA.Value, Fields!FieldB.Value) 
+0

Ricevo un errore "Valore di ritorno del compilatore nativo Funzione" Divider "non restituisce un valore su tutti i percorsi di codice, potrebbe verificarsi un'eccezione di riferimento null in fase di esecuzione quando viene utilizzato il risultato" Qualsiasi aiuto è apprezzato. fuori, ho dovuto inserire i miei caratteri di ritorno dopo aver copiato e incollato il codice in SSRS. Se qualcuno sta avendo lo stesso problema, assicurati di avere il codice esattamente come sopra nella finestra di espressione .. – BilliD

1

Questo sembra solo accade quando la divisione è uno dei risultati di un IIF, se non basta scrivere una formula per dividere l'uno con l'altro, ad es

=IIF(thing=1,10/0,0) 

Prima di aver valutato cosa, ha già provato a calcolare entrambi i risultati, causando un errore. Non è possibile utilizzare IIF in questo modo per proteggere da zero, è necessario mettere l'IIF sulla riga inferiore della divisione, ad es.

=IIF(thing=1, 10/IIF(divisor=0,-99999999999,divisor),0) 

Questo non è soddisfacente, dal momento che abbiamo introcudes un piccolo numero strano non zero come il risultato, ma può essere ok se si desidera solo un non-errore.

Tecnicamente, il #error è la risposta corretta.

+0

ho appena creato 1 se 0 e poi l'IIF principale sostituisce il tutto con 0 ma questo mi ha portato in pista, anche se sarebbe stato qualcosa di simile in corso sotto il cofano. – workabyte