2009-05-18 12 views
6

Mam raport z zestawem danych, który ma kolumnę z wartościami logicznymi. W stopce tabeli chcę wyświetlić x/y, gdzie x to liczba wierszy, które były true i y, czyli liczba wierszy w sumie.SSRS: Jak liczyć prawdziwe wiersze

Obecnie mam to:

=Count(Fields!Transfered.Value).ToString() + "/" + CountRows().ToString() 

Ale pierwszy staje się tak samo jak w ostatniej części. Następnie wypróbowałem to:

=Sum(Fields!Transfered.Value).ToString() + "/" + CountRows().ToString() 

Ale to generuje błąd, który, jak sądzę, mogę zrozumieć. Pomyślałem, że jeśli przekonwertowałem booleans na liczby, gdzie true wynosi 1, a false wynosi 0, to może to dobrze się udać. Ale jak mogę to zrobić? Czy jest to mądrzejszy sposób na zrobienie tego wszystkiego razem?

Aktualizacja: Czy teraz też starał

=Sum(CInt(Fields!Transfered.Value)).ToString() + "/" + CountRows().ToString() 

I got wynik negatywny ... o.o.

Także sposób, który pracował, co napisałem jako odpowiedź. Ale nie zaakceptuję tego jako odpowiedzi, ale ktoś może to zrobić lepiej =)

Odpowiedz

9

mogę powiedzieć, dlaczego coś poszło nie tak ...

  • Count (Fields! Transfered.Value) jest po prostu liczba wierszy. aka CountRows()
  • Sum (Fields! Transfered.Value) próbuje agregować "true" lub "false" = błąd
  • Sum (CInt (Fields! Transfered.Value)) podsumuje -1 i 0, ponieważ VB NET prawda = -1
  • Sum (IIF (Fields! Transfered.Value, 1, 0)) rozwiązuje problem znak = rozwiązanie

Aby uniknąć dodatkowego IIF, można użyć negować sumę w końcu oba rozwiązania byłyby w porządku i wszystkie oba są jednakowo kludgy

+2

Dzięki! Sprawy są teraz wyraźniejsze: D (Dlaczego ktokolwiek zdecydowałby się uczynić true = -1 ??) – Svish

+3

Dunno. Aby ludzie nienawidzili VB.Net? ;-) – gbn

+1

Tak czy inaczej, wykonali dobrą robotę: p # FTW! – Svish

1

Wyjaśniłem sposób, aby to zrobić, chociaż prawdopodobnie jest lepszy, bardziej przejrzysty i logiczny sposób ...

=Sum(IIF(Fields!Transfered.Value, 1, 0)).ToString() + "/" + CountRows().ToString() 
1

Natknąłem się na to dzisiaj i przynajmniej zweryfikowaliśmy, że nie byłem jedynym, który dostał ujemną sumę dla bools z SSRS. Dzięki.

Moim rozwiązaniem było użycie ABS dla wartości bezwzględnej. Podoba mi się to lepiej niż negowanie tego wyrażenia wyłącznie dlatego, że łatwiej jest wizualnie zobaczyć, gdzie "-" może zostać pominięte, jeśli nie jesteś ostrożny w czytaniu wyrażenia.

ale to w zasadzie dokładnie to samo

0

Oto sposób, gdzie można liczyć na zgrupowane wartości

=CountDistinct(IIF(Fields!TrueOrFalseField.Value, 
        Fields!GroupedField.Value, 
        "BadValueToBeRemovedFromCount")) 
       -IIF(CountDistinct(Fields!TrueOrFalseField.Value)=1 
           and First(Fields!TrueOrFalseField.Value) 
        , 0, 1) 

Druga część

-IIF(CountDistinct(Fields!TrueOrFalseField.Value)=1 
            and First(Fields!TrueOrFalseField.Value) 
         , 0, 1) 

Usuń 1 od liczby czy to ma wartość True i False lub jeśli istnieje tylko jedna odrębna wartość: false.