【问题标题】:SSRS: How to count true rowsSSRS:如何计算真实行数
【发布时间】:2023-03-12 13:07:01
【问题描述】:

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

目前我有这个:

=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

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

【问题讨论】:

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


    【解决方案1】:

    我可以告诉你为什么会出错...

    • 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)) 修复了符号问题 = 您的解决方案

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

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

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

    【讨论】:

    • 谢谢!事情现在更清楚了:D(为什么有人决定让 true = -1??)
    • 不知道。让人们讨厌VB.Net? ;-)
    【解决方案2】:

    想出了一个方法来做到这一点,虽然可能有更好的更清晰和合乎逻辑的方法......

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

    【讨论】:

      【解决方案3】:

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

      我的解决方案是使用 ABS 作为绝对值。我更喜欢这样,而不是仅仅否定表达式,因为如果您在阅读表达式时不小心,更容易从视觉上看到“-”可能被遗漏的位置。

      但本质上是一模一样的

      【讨论】:

        【解决方案4】:

        这是您依靠分组值的一种方式

        =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。

        【讨论】:

          猜你喜欢
          • 2016-09-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-17
          • 1970-01-01
          • 2012-01-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多