在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 Fiddle

另一答案

尝试在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中,如何添加一行来聚合与过滤器不匹配的所有行?的主要内容,如果未能解决你的问题,请参考以下文章

SSRS如果参数与列值不匹配,如何隐藏Tablix?

SSRS如何在折线图上为我的x轴添加日期范围?

在 servlet 过滤器中,如何确定哪个 servlet 与 URL 匹配?

如何根据2个数据源过滤SSRS报告

SSRS:前5大周末

如何通过 $project 中提供的 _id 与 mongodb 聚合进行 $match?