这应该很容易,但我被卡住了。
我有一个表格,其中列出了一些关于资格的数据 - 为了实现哪个数据集基本上是每个学生的一行,正在按照资格分组进行分组,并且父母分组在"测量" (这只是一桶资格)。
其中一个专栏是尝试计算每个测量/资格中的学生人数(嗯,更确切地说, 特定字段中的值,由另一个字段加权) 。在下面的屏幕截图中,它是" Pred。平均"栏目在右边。
因此,对于资格行分组,该列按以下方式计算:
=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。 I.E.它实际上返回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()
已经在?
答案 0 :(得分:1)
这里的问题是您尝试使用仅返回一个值的Lookup函数来聚合值。你可以通过几种方式来做这件事。一种选择是使用LookupSet函数来获得适用的权重。更好的选择是组合数据集中的数据,以便在不使用查找的情况下获得加权。这样,该函数可以重新计算任何分组级别,而无需强制使用范围。此外,CountDistinct忽略“Nothing”所以你可以不用额外的IIf语句。希望有所帮助。