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]'的范围参数对聚合函数无效.范围参数必须设置为字符串常量等于包含组的名称,包含数据区域的名称或数据集的名称.
您需要使用IIF来评估字段并对结果进行求和.如果表达式在表中,则可以使用:
=SUM(IIF(Fields!Doc_Type.Value = "Shipments", 1, 0))
Run Code Online (Sandbox Code Playgroud)
有很多方法可以实现这一目标.
方法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)
现在,您可以在报告中使用此字段.
| 归档时间: |
|
| 查看次数: |
14041 次 |
| 最近记录: |