2009-05-18 9 views
6

Ich habe einen Bericht mit einem Dataset, das eine Spalte mit booleans hat. In der Tabellenfußzeile möchte ich x/y anzeigen, wobei x ist, wie viele Zeilen, die true und y waren, wie viele Zeilen es insgesamt gab.SSRS: So zählen Sie echte Zeilen

Zur Zeit habe ich dies:

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

Aber der erste wird als letzter Teil derselben. Ich habe dann folgendes versucht:

Aber das erzeugt einen Fehler, den ich denke, ich kann verstehen. Ich dachte, wenn ich die booleans in Zahlen umwandele, wo true 1 und false 0 ist, dann könnte es gut funktionieren. Aber wie kann ich das tun? Oder ist es ein klügerer Weg, dies alles zusammen zu tun?

Update: Habe jetzt auch

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

Und bekam ein negatives Ergebnis ... ò.ó

fand auch eine Art und Weise, die gearbeitet, die ich als Antwort gepostet. Aber ich werde es nicht akzeptieren, als eine Antwort noch Incase jemand einen besseren Weg, dies zu tun =)

Antwort

9

ich kann Ihnen sagen, warum die Dinge schief gelaufen ist ...

  • Count (Fields! Transfered.Value) ist einfach die Anzahl der Zeilen. aka CountRows()
  • Sum (Fields! Transfered.Value) versucht, zu aggregieren "true" oder "false" = Fehler
  • Sum (CInt (Fields! Transfered.Value)) wird Summe -1 und 0, weil VB .NET true = -1
  • Sum (IIF (Fields! Transfered.Value, 1, 0)) behebt das Zeichen Ausgabe = Ihre Lösung

die extra IIF Um zu vermeiden, können Sie die Summe verwenden negieren alle -1s

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

Am Ende wäre jede Lösung in Ordnung und beide sind gleichermaßen kludgy

+2

Vielen Dank! Die Dinge sind jetzt klarer: D (Warum sollte sich jemand dafür entscheiden, wahr zu machen = -1 ??) – Svish

+3

Dunno. Um Leute dazu zu bringen, VB.Net zu hassen? ;-) – gbn

+1

Nun, das haben sie schon gut gemacht: p C# FTW! – Svish

1

einen Weg gefunden, es zu tun, obwohl es wahrscheinlich eine besseren klare und logische Weise ...

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

Ich bin heute darauf gestoßen und habe zumindest verifiziert, dass ich nicht der Einzige war, der einen negativen Summenwert für Bools aus SSRS bekam. Vielen Dank.

Meine Lösung war ABS für absoluten Wert zu verwenden. Ich mag das besser, als nur den Ausdruck zu negieren, nur weil es einfacher ist, visuell zu sehen, wo das '-' übersehen werden könnte, wenn Sie den Ausdruck nicht sorgfältig lesen.

aber es ist im Wesentlichen genau das gleiche

0

Hier ist eine Art und Weise, wo Sie auf einem gruppierten Wert zählen

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

Der zweite Teil

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

entfernen 1 von der Zählung, wenn es hat True und False Wert oder wenn es nur einen eindeutigen false Wert gibt.