2012-02-04 8 views
13

Robię obliczenia na tych danych, które spowodują błąd #Error. Podstawową przyczyną jest dzielenie przez zero. Mógłbym przeskoczyć niezbędną pracę dookoła, aby uniknąć dzielenia przez zero, ale może być łatwiej ukryć tekst # Błąd i pokazać pustą komórkę. Czy można ukryć # Błąd i nic nie wyświetlać?SSRS ukryj # Błąd wyświetlany w komórce

Edit

Wyrażenie dla tekstu może wyświetlać #Error jest coś wzdłuż tych linii:

Fields!Field1.Value/Fields!ValueThatMightBeZero.Value 

mogę obejść ten problem z jakimś brzydkim kontroli, ale to może być łatwiej po prostu złapać #Błąd. (Prosta kontrola iif wokół ekspresu nie działa, ponieważ SSRS najpierw ocenia klauzulę "prawda" i "fałsz", jeśli otrzyma dzielenie przez zero w obu klauzulach, zwróci błąd #, nawet jeśli klauzula ta nie byłaby użyta).

Odpowiedz

12

Istnieje funkcja ISERROR, ale to nie zmniejszy kod trzeba sobie z tym poradzić. Jeśli nie podoba Ci się zwykła praca związana z iif, to myślę, że musisz użyć własnego kodu osadzonego w raporcie. W tym kodzie możesz spróbować obsługi catch. Tworzenie funkcji, które można połączyć z =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 dla niestandardowego kodu - IMO jest łatwiejsze niż skomplikowane wyrażenie w każdej komórce. – thomasswilliams

0

Możesz użyć IsNumeric, aby sprawdzić każde wyrażenie i wyświetlić 0 lub lepiej, ale nie wyświetlaj niczego, ponieważ 0 może mieć jakieś znaczenie.

IsNumeric - Zwraca wartość typu Boolean wskazującą, czy wyrażenie może być ocenione jako liczba.

Na przykład:

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

lub

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

Nie jestem teraz w pobliżu SSRS, ale zaktualizowałem moje pytanie, aby uzyskać więcej informacji. Will IsNumeric "Catch" # Błąd, jeśli zostanie zwrócony przez moje wyrażenie. Innymi słowy, czy mogę zawinąć IsNumeric wokół całego mojego wyrażenia i użyć go do określenia, czy mam # Błąd? – poke

+1

@poke: Myślę, że masz rację, a # Err będzie podniesiony, nawet jeśli 'IIF' jest zawarty w IsNumeric. –

+0

@JamieF: Masz rację, to NIE działa. Chociaż prosty "Iif" do sprawdzenia wartości mianownika działa dla mnie na SQL 2008R2 (jeśli tylko złapać dzielenie przez 0). '= Iif (Fields! Value_Denominator.Value = 0," ", (Fields! Value_Numerator.Value/Fields! Value_Denominator.Value))" Interesujące, ale błędy nie są bardzo spójne, np. Infinity, -Infinity, NaN ... – xm1994

9

Jest brzydki, ale tutaj jest sposób znalazłem, aby pracować w wyrażeniu i bez funkcji niestandardowej.

Musisz również sprawdzić w mianowniku i zastąpić niezerowym dzielnikiem tak, aby dzielenie przez 0 nigdy się nie zdarzyło (chociaż chcielibyśmy, aby pierwsza połowa IIF spowodowała zwarcie i nie dotarła do niego wcale): Używam 1.
Oczywiście to będzie wtedy dawało niepoprawną wartość, ale potem utrzymuję zewnętrzny IIF, aby pokazać cokolwiek chcę, gdy mianownik ma 0 (pokazuję 0 w moim przykładzie).

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

Zmień czcionkę kolor tła, jeśli Fields!Value_Denominator.Value=0 i nie będzie wyświetlony komunikat o błędzie.

+1

dlaczego to było głosowanie? wydaje się rozsądnym rozwiązaniem –

+3

+1 - to dziwne rozwiązanie, ale +1 za myślenie po wyjęciu z pudełka :). – JonH

+0

OMG To działa !!! Bardzo dziękuję –

0

pomocą NULLIF funkcję:

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

ten jest dobrym rozwiązaniem. Jednak myślę, że można to nawet poprawić. Zamiast umieszczać formatowanie warunkowe na "Białe", proponuję zamiast tego umieścić wyrażenie warunkowe ukryte na True. W takim przypadku po wyeksportowaniu do programu Excel komórka nie będzie zawierała niczego, w przeciwieństwie do zmiany koloru czcionki. W obszarze Widoczność -> Ukryty = Iif (Fields! Denominator.Wartość = 0, prawda, fałsz)

0

Inną alternatywą dla sugestii jest dodanie części formuły, która może spowodować błąd.

Przykład: a/b, jeśli b = 0, to równanie daje błąd.

{= IIF (b = 0, PRAWDA, FAŁSZ)}

4

Dodać niewielką wartość drugiego słowa -

Field1.Value/(Fields ValueThatMightBeZero.Value + 0,00001!) Pola

!

To zwróci 0.