包含特定值的特定字段的SSRS CountRows

Lan*_*uge 7 sql visual-studio reporting-services

我正在建立一份SSRS报告.我有一个包含几个字段的DataSet,其中一个是Doc_Type.Doc_Type可以包含多个值,其中一个是"Shipment".

在我的报告中,我想计算等于'发货'的Doc_Types数量.这就是我正在使用的,它不起作用:

=CountRows(Fields!Doc_Type.Value = "Shipments")
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:"textrun的值表达式'Doc_Type.Paragraphs [0] .TextRuns [0]'的范围参数对聚合函数无效.范围参数必须设置为字符串常量等于包含组的名称,包含数据区域的名称或数据集的名称.

Han*_*ist 8

您需要使用IIF来评估字段并对结果进行求和.如果表达式在表中,则可以使用:

=SUM(IIF(Fields!Doc_Type.Value = "Shipments", 1, 0))
Run Code Online (Sandbox Code Playgroud)


Anu*_*wal 6

有很多方法可以实现这一目标.

方法1

你可以设置这样的表达式

=SUM(IIf(Fields!Doc_Type.Value = "Shipments", 1, 0), "YourDataSetName")
Run Code Online (Sandbox Code Playgroud)

请记住,SSRS区分大小写,因此请正确放置数据集名称和字段名称.

方法2

更喜欢在SQL中处理它,因为我希望将业务逻辑保留在RDL之外.

您可以使用窗口功能来获取装运数量.

另外注意在计数的情况下我没有添加ELSE 0条件.因为那会产生错误的结果.伯爵并不关心里面的价值是什么.它只计算所有非空值.ELSE NULL将工作.

SELECT Column1, Column2, Column3,
       SUM(CASE WHEN Doc_Type = 'Shipments' THEN 1 ELSE 0 END) OVER() ShipmentCount_UsingSum
       COUNT(CASE WHEN Doc_Type = 'Shipments' THEN 1 END) OVER() ShipmentCount_UsingCount
FROM myTable
JOIN....
WHERE .....
Run Code Online (Sandbox Code Playgroud)

现在,您可以在报告中使用此字段.