2012-02-04 10 views
13

Sto facendo calcoli su quei dati che a volte causeranno #Errore. La causa sottostante è una divisione per zero. Potrei passare attraverso il lavoro necessario per evitare la divisione per zero, ma potrebbe essere più semplice mascherare il testo #Error e mostrare una cella vuota. È possibile nascondere l'errore # e visualizzare semplicemente nulla?Nascondi SSRS #Errore visualizzato nella cella

Modifica

L'espressione per il testo potrebbe essere visualizzato # errore è qualcosa in queste righe:

Fields!Field1.Value/Fields!ValueThatMightBeZero.Value 

ho potuto lavorare intorno a questo con un po 'brutto controllo, ma potrebbe essere più facile per catturare solo la #Errore. (Un controllo diretto di iif attorno a express non funziona perché SSRS valuta prima sia le clausole true che false; se ottiene una divisione per zero su entrambe le clausole, restituirà #Error, anche se tale clausola non sarebbe stata utilizzata).

risposta

12

C'è una funzione IsError, ma non ridurrà il codice necessario per gestire questa situazione. Se non ti piace il solito iif funziona, quindi penso che è necessario utilizzare il proprio codice incorporato nel report. In quel codice puoi avere un gestore di catch try. Creare una funzione che è possibile chiamare con =Code.MyDivider(Fields!Field1.Value , Fields!ValueThatMightBeZero.Value)

Public Function MyDivider(top As Double, bottom As Double) As Double 
    If top = 0 Then Return 0 
    If bottom = 0 Then Return 0 
    Return top/bottom 
End Function 
+0

+1 per codice personalizzato: IMO più semplice di un'espressione complicata su ogni cella. – thomasswilliams

0

È possibile utilizzare IsNumeric per controllare ciascuna espressione e visualizzare uno 0 o meglio ancora non visualizzare nulla poiché 0 potrebbe avere un significato.

IsNumeric - Restituisce un valore booleano che indica se un'espressione può essere valutata come un numero.

Ad esempio:

=Iif(IsNumeric(Fields!YourValue.Value), Fields!YourValue.Value, Nothing) 

o

=Iif(IsNumeric(Fields!YourValue.Value), Fields!YourValue.Value, 0) 
+0

Al momento non sono di fronte a SSRS, ma ho aggiornato la mia domanda con ulteriori informazioni. Will IsNumeric "Catch" #Error se viene restituito dalla mia espressione. In altre parole, posso avvolgere IsNumeric attorno alla mia intera espressione e usarlo per determinare se ho #Errore? – poke

+1

@poke: Penso che tu abbia ragione, e l'errore # verrà sollevato, anche se 'IIF' è contenuto in un IsNumeric. –

+0

@JamieF: hai ragione, questo NON funziona. Anche se un semplice 'Iif' per verificare il valore del denominatore funziona su SQL 2008R2 (se non altro per catturare la divisione per 0). '= Iif (Fields! Value_Denominator.Value = 0," ", (Fields! Value_Numerator.Value/Fields! Value_Denominator.Value)) Interessante, tuttavia, gli errori non sono molto coerenti, ad es. Infinity, -Infinity, NaN ... – xm1994

9

E 'brutto, ma ecco un modo che ho trovato per farlo funzionare nell'espressione e senza la funzione personalizzata.

Devi anche controllare il denominatore e sostituire un divisore diverso da zero in modo che la divisione per 0 non avvenga mai (anche se vorremmo che la prima metà dell'IIF facesse un cortocircuito e non ci arrivasse affatto): Io uso 1.
Ovviamente questo darà un valore errato ma poi tengo l'IIF esterno per mostrare quello che voglio quando il denominatore è 0 (mostro 0 nel mio esempio).

=IIF(Fields!Value_Denominator.Value=0, 0, Fields!Value_Numerator.Value/IIF(Fields!Value_Denominator.Value=0,1,Fields!Value_Denominator.Value)) 
15

Cambiare il tipo di carattere per essere il colore dello sfondo, se Fields!Value_Denominator.Value=0 e non sarà possibile visualizzare il messaggio di errore.

+1

perché è stato votato? sembra una soluzione ragionevole –

+3

+1 - è una soluzione strana ma +1 per pensare fuori dagli schemi :). – JonH

+0

OMG Funziona !!! Grazie mille davvero –

0

utilizzare la funzione NULLIF:

DECLARE @a int 
DECLARE @b int 

SET @a = 1 
SET @b = 0 

SELECT @a/@b --this returns an error 

SELECT @a/NULLIF(@b,0) -- this returns NULL 
4

Questa è una buona soluzione. Comunque penso che sia possibile anche migliorarlo. Invece di mettere la formattazione condizionale su "Bianco", suggerisco di mettere invece l'espressione nascosta condizionale su True. In questo caso, quando viene esportato in Excel, la cella non conterrà nulla, a differenza del caso di cambiare il colore del carattere. Sotto visibilità -> nascosto = Iif (denominatore!Valore = 0, True, False)

0

Un'altra alternativa ai suggerimenti finora è aggiungere la parte della formula che potrebbe creare l'errore.

Esempio: a/b, se b = 0, quindi l'equazione genera un errore.

{= IIF (b = 0, VERO, FALSO)}

4

Aggiungi un valore basso per la seconda espressione -!

campi Field1.Value/(! Campi ValueThatMightBeZero.Value + 0,00,001 mila)

Questo restituirà 0.

Problemi correlati