【问题标题】:How to Sum the aggregates of a child group如何对子组的聚合求和
【发布时间】:2016-02-10 13:42:48
【问题描述】:

这应该很容易,但我卡住了。

我有一个表格列出了一些关于资格的数据 - 为了实现这个数据集本质上是每个学生一行的数据集在资格上分组,而父分组在“衡量”上(这只是一个一桶资格)。

其中一列试图计算出每个度量/资格中的学生人数(嗯,更准确地说是在特定领域具有值的学生人数,由另一个领域加权) .在下面的屏幕截图中,它是右侧的“Pred. Avg”列。

因此,对于 Qualification Row Grouping,该列的计算方式为:

=CountDistinct(Iif(IsNothing(Fields!AVG_PTS.Value) = False, Fields!Learner_ID.Value, Nothing), "Qual") * Lookup(Fields!Qual_Code.Value, Fields!Qual_Code.Value, Fields!size.Value, "DS_KS5Nationals_LKP")

这很好用 - 最右边一列中的 35 和 11.5 的值对于这些行是正确的。最上面一行应该做的只是简单地将其他行中的值相加,得到这个度量中的学生人数,在这种情况下给出 46.5。为此,我使用的表达式是:

=Sum(CountDistinct(Iif(IsNothing(Fields!AVG_PTS.Value) = False, Fields!Learner_ID.Value, Nothing), "Qual") * Lookup(Fields!Qual_Code.Value, Fields!Qual_Code.Value, Fields!size.Value, "DS_KS5Nationals_LKP"), "Measure")

但是,正如您在屏幕截图中看到的那样,这将返回 2917。

所以我的问题是;为什么这不起作用,并且鉴于它不起作用,我如何在父组中聚合子组内的聚合结果?

编辑:

好的,我已经确定以下工作正常:

=Sum(CountDistinct(Iif(IsNothing(Fields!AVG_PTS.Value) = False, Fields!Learner_ID.Value, Nothing), "Qual"), "Measure")

问题在于返回 11.5 的 Qual 行的权重为 0.5。 IE。它实际上返回 23,而 Lookup(Fields!Qual_Code.Value, Fields!Qual_Code.Value, Fields!size.Value, "DS_KS5Nationals_LKP") 是用于返回 0.5 并将其更改为 11.5 的那一行......所以问题变成了; “我如何强制 ...*Lookup(Fields!Qual_Code.Value, Fields!Qual_Code.Value, Fields!size.Value, "DS_KS5Nationals_LKP") 进入“Qual”范围,就像 CountDistinct() 已经在里面一样?

【问题讨论】:

    标签: reporting-services ssrs-2008-r2 reportbuilder3.0


    【解决方案1】:

    这里的问题是您试图使用只返回一个值的查找函数来聚合值。有几种方法可以做到这一点。一种选择是使用LookupSet 函数来获取适用的权重。一个更好的选择是组合数据集中的数据,以便在不使用查找的情况下使用权重。这样,该函数可以重新计算任何分组级别,而无需在其上强制范围。此外,CountDistinct 会忽略“Nothing”,因此您无需额外的 IIf 语句即可。希望对您有所帮助。

    【讨论】:

    • 是的,你是对的。修改数据集让一切变得简单......感谢您的建议!
    猜你喜欢
    • 1970-01-01
    • 2014-09-19
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多