SSRS:如何计算真行

时间:2009-05-18 14:11:37

标签: sql-server vb.net reporting-services

我的报告中包含一个包含布尔列的数据集。在表格页脚中,我想显示x / y,其中xtruey的行数是总共有多少行。

目前我有这个:

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

但第一部分与最后部分相同。然后我尝试了这个:

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

但这会产生错误,我想我可以理解。我认为如果我将布尔值转换为数字,其中true为1且false为0,那么它可以很好地解决。但是我该怎么做呢?或者它是一种更聪明的方式来一起完成这一切?

更新:现在还尝试了

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

得到了负面结果...... O.o

还找到了一种有效的方法,我将其作为答案发布。但我不会接受它作为答案,但是有人有更好的方法来做到这一点=)

4 个答案:

答案 0 :(得分:9)

我可以告诉你为什么出了问题......

  • Count(Fields!Transfered.Value)只是行数。又名CountRows()
  • Sum(Fields!Transfered.Value)试图聚合“true”或“false”=错误
  • Sum(CInt(Fields!Transfered.Value))将-1和0相加,因为VB.NET true = -1
  • Sum(IIF(Fields!Transfered.Value,1,0))修复了sign issue = your solution

为了避免额外的IIF,你可以使用否定所有-1的总和

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

最后,任何一种解决方案都可以,而且两者都是同样的kludgy

答案 1 :(得分:1)

找出一种方法,尽管可能有一种更清晰,更合理的方式......

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

答案 2 :(得分:1)

我今天遇到了这个,至少证实了我并不是唯一一个从SSRS中得到负值的负值的人。感谢。

我的解决方案是使用ABS作为绝对值。我更喜欢这样做,而不仅仅是否定表达,因为如果你不小心阅读表达,那么在视觉上更容易看到“ - ”可能会错过。

但它基本上完全相同

答案 3 :(得分:0)

这是一种指望分组值

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

第二部分

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

如果它具有TrueFalse值,或者只有一个不同的false值,则从计数中删除1。