[英]Summing up a related table's values in PowerPivot/DAX
说我有两个桌子。 attrsTable:
file | attribute | value
------------------------
A | xdim | 5
A | ydim | 6
B | xdim | 7
B | ydim | 3
B | zdim | 2
C | xdim | 1
C | ydim | 7
sizeTable:
file | size
-----------
A | 17
B | 23
C | 34
我有这些表通过“文件”字段相关。 我想要attrsTable中的PowerPivot度量,其计算使用大小。 例如,假设我要为A,B,C中的每一个设置xdim + ydim / size。计算公式为:
A: (5+6)/17
B: (7+3)/23
C: (1+7)/34
我希望该度量足够通用,以便以后可以使用切片器按文件或属性进行切片。 我该如何完成?
我试过了:
dimPerSize := CALCULATE([value]/SUM(sizeTable[size])) # Calculates 0
dimPerSize := CALCULATE([value]/SUM(RELATED(sizeTable[size]))) # Produces an error
知道我在做什么错吗? 我可能在这里缺少有关如何在关系中使用DAX的一些基本概念。
嗨Redstreet,
从您的解决方案和Jacob提出的解决方案退一步,我认为创建另一个表来汇总所有计算(可能特别是考虑到您可能有两个以上具有文件特定属性的表)可能是有用的。
因此,我又创建了一个表,该表包含(仅)唯一的文件名,因此可以通过以下方式可视化关系:
添加必要的度量要简单得多(无需计算列)。 我实际上已经测试了2种情况:
1)为属性值和文件大小创建简单的SUM度量。 然后将这两个措施分开并完成工作 :-)。
2)使用SUMX函数具有更通用的解决方案。 然后, DimPerSize计算的最终公式如下所示:
=DIVIDE(
SUMX(DISTINCT(fileTable[file]),[Sum of AttrValue]),
SUMX(DISTINCT(fileTable[file]),[Sum of FileSize]),
BLANK()
)
[AttrValue的总和]为:
=SUM(attrsTable[value])
并且FileSize的总和为:
=SUM(sizeTable[size])
即使SUMX在两种情况下都遍历给定文件名的所有实例,这也都可以正常工作。 因此,对于文件B,它也使用zdim进行计算(如果需要将其过滤掉,则使用简单的计算/过滤器组合)。 就文件大小而言,我也使用SUMX,尽管实际上并不需要它,因为表中每个文件名仅包含1条记录 。 如果将有2个实例,则根据所需结果使用SUMX或AVERAGEX。
希望这可以帮助。
您似乎希望具有关系的概念,但是就结构或不能简单地使用“裸”数字列这一事实而言,就CALCULATE()而言,您的走法并不正确。以某种方式打包。
您所希望的方法是正确的,因为一旦获得运行的简单版本,就可以在任何相关维度上对其进行切片和切块。
最佳实践可能是使用以下几种方法来建立这一点:
[xdim] = CALCULATE(SUM('attrstable'[value]), 'attrstable'[attribute] = "xdim")
[ydim] = CALCULATE(SUM('attrstable'[value]), 'attrstable'[attribute] = "ydim")
[dimPerSize] = ([xdim] + [ydim]) / VALUES('sizeTable'[size])
但是,取决于准确地设置数据透视表的方式,这也可能会引发错误,因为它将尝试使用总计中的整个“大小”列。 有两种主要的处理策略:
使用“迭代”公式(例如SUX()或AVERAGEX())在“文件”字段中逐个进行迭代,然后对总计求和或求平均值,例如
[ItdimPerSize] = AVERAGEX(VALUES('sizeTable'[file]),[dimPerSize])
根据要使用的数学,您可能会发现产生的有用平均值,需要使用SUMX,但要根据案例数(即COUNTROWS('sizeTable'[file]))进行确定。
您可能会认为总数无关紧要,只需引入一个错误处理元素即可使它们为空白,例如
[NtdimPerSize] = IF(HASONEVALUE('sizeTable'[file]),[dimPerSize],BLANK())
注意,所有这些都假定在创建数据透视表时,您是从“大小表”中“拖入”文件字段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.