在SSRS中,如何添加一行来聚合与过滤器不匹配的所有行?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在SSRS中,如何添加一行来聚合与过滤器不匹配的所有行?相关的知识,希望对你有一定的参考价值。
我正在编写一份报告,显示按类型分组的交易。
Type Total income
------- --------------
A 575
B 244
C 128
D 45
E 5
F 3
Total 1000
我只想提供占总收入10%以上的交易类型的详细信息(即A-C)。我可以通过对组应用过滤器来完成此操作:
Type Total income
------- --------------
A 575
B 244
C 128
Total 1000
我要显示的是在总行上方的单行,其中包含已过滤掉的所有类型的总数(即D-F的总和):
Type Total income
------- --------------
A 575
B 244
C 128
Other 53
Total 1000
这甚至可能吗?我已尝试在组内使用运行总计和有条件隐藏的行。我在Iif
里尝试过Sum
。似乎没有什么能做我需要的东西,而且我正在对范围问题进行讨论(例如“值表达式具有指定数据集范围的嵌套聚合”)。
如果有人能给我任何指示,我会非常感激。
编辑:应该已指定,但目前数据集实际返回单个事务:
ID Type Amount
---- ------ --------
1 A 4
2 A 2
3 B 6
4 A 5
5 B 5
使用Tablix中的行组完成分组。
一种解决方案是在数据集的SQL源中而不是在SSRS内部解决此问题:
SELECT
CASE
WHEN CAST([Total income] AS FLOAT) / SUM([Total income]) OVER (PARTITION BY 1) >= 0.10 THEN [Type]
ELSE 'Other'
END AS [Type]
, [Total income]
FROM Source_Table
尝试在SQL中解决此问题,请参阅SQL Fiddle。
SELECT I.*
,(
CASE
WHEN I.TotalIncome >= (SELECT Sum(I2.TotalIncome) / 10 FROM Income I2) THEN 10
ELSE 1
END
) AS TotalIncomePercent
FROM Income I
在此之后,创建两个总和组。
- SUM(TotalIncome * TotalIncomePercent)/ 10
- SUM(TotalIncome * TotalIncomePercent)
第二种方法可能是在SSRS中使用计算列。尝试使用上面的case表达式创建计算列。如果它允许您创建它,您可以使用它与SQL方法相同的方式。
1)要显示收入大于10%,请使用行可见性条件,如= iif(reportitems!total_income.value / 10 <= I.totalincome,true,false)此处reportitems!total_income.value是所有收入文本框值的总和细节组的总价值。和I.totalincome是当前的字段值。
2)在细节组外添加一行以获得其他收入并使用表达式= reportitems!total_income.value-sum(iif(reportitems!total_income.value / 10 <= I.totalincome,I.totalincome,nothing))
以上是关于在SSRS中,如何添加一行来聚合与过滤器不匹配的所有行?的主要内容,如果未能解决你的问题,请参考以下文章