s-s-rS 聚合聚合

Posted

技术标签:

【中文标题】s-s-rS 聚合聚合【英文标题】:s-s-rS Aggregating Aggregates 【发布时间】:2013-07-30 18:36:09 【问题描述】:

这两天的大部分时间里,我一直在用头撞墙……

我的情况是这样的:

我有一个记录集,已在 s-s-rS 表中分成 4 个组。它们是:

StartPeriod 
  --> Area
     --> Job#
        --> Details

有问题的列包含两个不同的记录计数。一个是有错误的记录数,另一个是该组的记录总数(以便我可以计算百分比)。

例如:

在详细信息级别,我可能有一个有 4 个错误的项目,一个有 6 个错误的项目,总共有 20 条记录。这意味着总记录数是重复的,这意味着我无法将这个数字相加,否则我将重复计算我的总记录数。

StartPeriod - Area - Job# - Item  - Errors - totalRecords
 January    - 123  - Job3 - item1 -   4    -     20
 January    - 123  - Job3 - item2 -   6    -     20

我可以在 Job# 级别解决这个问题,因为我可以简单地说 Max(num_records) 来获得正确的数字....但是,如果我想聚合到区域级别(或更高),我不能让事情发挥作用。我不能做 SUM( Max(num_records) ) 因为这没有任何意义,但是我在 SQL 中安排查询它也不会加起来。

我觉得这是一个相当普遍的问题,所以我不确定我为什么会遇到这么多麻烦。有什么想法可以解决这个问题吗?我希望我能清楚地解释自己。

PS。我正在使用 s-s-rS 2008R2

【问题讨论】:

【参考方案1】:

更好地利用组,数据已经存在于您的查询中。

CountRows("Details")
Sum(Errors, "Details")

这是假设您在详细信息级别创建的组称为“详细信息”。

【讨论】:

我遇到的问题是,当我向上层级时,这不起作用。我收到一条错误消息,提示“值表达式的范围参数对聚合函数无效” 在每个组级别,您需要将“详细信息”替换为适当的组或“范围”,因为它在 s-s-rS 中被调用。在层次结构的顶部,您可能希望使用无作用域重载,即完全删除作用域参数:CountRows() 和 Sum(Errors)。 这让我达到了正确的工作#级别......但是,现在我想将我得到的数字加在一起。例如:Job1 的正确总数为 20,Job2 的正确总数为 30,所以现在当我折叠“Area”组时,我需要看到总数为“50”。相反,我看到平均水平仍在继续...... 为了进一步澄清,我的记录计数字段是在进入 s-s-rS 之前计算的,因为它们基于多个因素/不同的表格。我在 s-s-rS 中添加的不是 count(),而是这些计算出来的数字。 在我自己对您的问题的模拟中,我能够在每个不同的范围级别(组)上求和,并且效果很好。使用 s-s-rS 表达式并假设您的组的名称:在 Job# 级别 Sum(Fields!Errors.Value, "Job#") 上,在 Area 级别 Sum(Fields!Errors. Value, "Area"),在 StartPeriod 级别 Sum(Fields!Errors.Value, "StartPeriod")【参考方案2】:

为您的查询尝试这样的事情:

declare @totcount int
select @totcount = sum(errors) from your_table
select errors, errors/@totcount as [% of total] from your_table 

地区:

declare @totcount int
select @totcount = sum(errors) from your_table
select area, sum(errors)/@totcount as [% of total] 
from your_table 
group by area

【讨论】:

我以前试过这个,这让我可以得到每个工作的正确数字,但是一旦我折叠该组并查看区域聚合......数字不相加 如果你想汇总总比率,算了,坏药。看看我添加的第二个例子。 我不想汇总比率,我的问题是我拥有的“总”数字在我的分组的最低级别并不是唯一的。因此,我必须在“工作”级别消除该字段的聚合,然后在此之后对其求和。抱歉,我知道这可能相当混乱……但我不确定有更好的表达方式。

以上是关于s-s-rS 聚合聚合的主要内容,如果未能解决你的问题,请参考以下文章

嵌套聚合作为组过滤器 s-s-rS 的替代方案

s-s-rS 报告在 IF 子句中使用聚合表达式?

如何使用 s-s-rS 中的聚合函数过滤表?

如何在 s-s-rS 2008 中按聚合/计算列交互排序

s-s-rS:试图隐藏文本框并不断收到数据聚合错误

在强制 s-s-rS 显示每页中的限制记录数后,将在每页而不是整个组上计算聚合