说我有两张桌子。 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的基本概念。
答案 0 :(得分:1)
您好Redstreet,
从你的解决方案和雅各布提出的解决方案中退后一步,我认为创建另一个聚合所有计算的表可能很有用(特别是考虑到你可能有超过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。
This is the link to my source file in Excel (2010).
希望这有帮助。
答案 1 :(得分:0)
你看起来有关系的概念没问题但你在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())
注意,所有这一切都假设您在创建枢轴时正在“拖入”来自'sizetable'的文件字段。