如何对子组的聚合求和
How to Sum the aggregates of a child group
这应该很容易,但我卡住了。
我有一个 table 列出了一些关于 Qualifications 的数字——为了实现这个数据集,基本上是每个学生一行的数据集被分组到 Qualification 和 Parent Grouping在 "Measure" 上(这只是一桶资格)。
其中一列正在尝试计算学生人数(嗯,更准确地说,学生人数 具有 特定字段中的值,由另一个字段加权)在每个 Measure/Qualification 中。在下面的屏幕截图中,它是右侧的 "Pred. Avg" 列。
因此对于资格行分组,该列的计算公式为:
=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")
然而,正如您在屏幕截图中看到的,这个 returns 2917 代替了。
所以我的问题是;为什么那行不通,而且鉴于它行不通,我如何在父组内汇总子组内的聚合结果?
编辑:
好的,我已确定以下内容正常工作:
=Sum(CountDistinct(Iif(IsNothing(Fields!AVG_PTS.Value) = False, Fields!Learner_ID.Value, Nothing), "Qual"), "Measure")
问题是 returns 11.5 的 Qual 行被加权为 0.5。 IE。它实际上是 returns 23,而 Lookup(Fields!Qual_Code.Value, Fields!Qual_Code.Value, Fields!size.Value, "DS_KS5Nationals_LKP")
是针对返回 0.5 并将其更改为 11.5 的那一行……所以问题就变成了; "how do I force that ...*Lookup(Fields!Qual_Code.Value, Fields!Qual_Code.Value, Fields!size.Value, "DS_KS5Nationals_LKP")
into the "Qual" 范围,就像 CountDistinct()
已经在?
这里的问题是您正在尝试使用只有 returns 一个值的查找函数来聚合值。有几种方法可以做到这一点。一种选择是使用 LookupSet 函数来获取适用的权重。一个更好的选择是合并数据集中的数据,以便在不使用查找的情况下获得权重。这样,该函数就可以重新计算任何分组级别,而无需对其施加作用域。此外,CountDistinct 忽略 "Nothing" 因此您可以不使用额外的 IIf 语句。希望对您有所帮助。
这应该很容易,但我卡住了。
我有一个 table 列出了一些关于 Qualifications 的数字——为了实现这个数据集,基本上是每个学生一行的数据集被分组到 Qualification 和 Parent Grouping在 "Measure" 上(这只是一桶资格)。
其中一列正在尝试计算学生人数(嗯,更准确地说,学生人数 具有 特定字段中的值,由另一个字段加权)在每个 Measure/Qualification 中。在下面的屏幕截图中,它是右侧的 "Pred. Avg" 列。
因此对于资格行分组,该列的计算公式为:
=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")
然而,正如您在屏幕截图中看到的,这个 returns 2917 代替了。
所以我的问题是;为什么那行不通,而且鉴于它行不通,我如何在父组内汇总子组内的聚合结果?
编辑:
好的,我已确定以下内容正常工作:
=Sum(CountDistinct(Iif(IsNothing(Fields!AVG_PTS.Value) = False, Fields!Learner_ID.Value, Nothing), "Qual"), "Measure")
问题是 returns 11.5 的 Qual 行被加权为 0.5。 IE。它实际上是 returns 23,而 Lookup(Fields!Qual_Code.Value, Fields!Qual_Code.Value, Fields!size.Value, "DS_KS5Nationals_LKP")
是针对返回 0.5 并将其更改为 11.5 的那一行……所以问题就变成了; "how do I force that ...*Lookup(Fields!Qual_Code.Value, Fields!Qual_Code.Value, Fields!size.Value, "DS_KS5Nationals_LKP")
into the "Qual" 范围,就像 CountDistinct()
已经在?
这里的问题是您正在尝试使用只有 returns 一个值的查找函数来聚合值。有几种方法可以做到这一点。一种选择是使用 LookupSet 函数来获取适用的权重。一个更好的选择是合并数据集中的数据,以便在不使用查找的情况下获得权重。这样,该函数就可以重新计算任何分组级别,而无需对其施加作用域。此外,CountDistinct 忽略 "Nothing" 因此您可以不使用额外的 IIf 语句。希望对您有所帮助。