繁体   English   中英

在PowerPivot / DAX中汇总相关表的值

[英]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。

这是指向我在Excel(2010)中的源文件的链接。

希望这可以帮助。

您似乎希望具有关系的概念,但是就结构或不能简单地使用“裸”数字列这一事实而言,就CALCULATE()而言,您的走法并不正确。以某种方式打包。

您所希望的方法是正确的,因为一旦获得运行的简单版本,就可以在任何相关维度上对其进行切片和切块。

最佳实践可能是使用以下几种方法来建立这一点:

[xdim] = CALCULATE(SUM('attrstable'[value]), 'attrstable'[attribute] = "xdim")
[ydim] = CALCULATE(SUM('attrstable'[value]), 'attrstable'[attribute] = "ydim")
[dimPerSize] = ([xdim] + [ydim]) / VALUES('sizeTable'[size])

但是,取决于准确地设置数据透视表的方式,这也可能会引发错误,因为它将尝试使用总计中的整个“大小”列。 有两种主要的处理策略:

  1. 使用“迭代”公式(例如SUX()或AVERAGEX())在“文件”字段中逐个进行迭代,然后对总计求和或求平均值,例如

    [ItdimPerSize] = AVERAGEX(VALUES('sizeTable'[file]),[dimPerSize])

    根据要使用的数学,您可能会发现产生的有用平均值,需要使用SUMX,但要根据案例数(即COUNTROWS('sizeTable'[file]))进行确定。

  2. 您可能会认为总数无关紧要,只需引入一个错误处理元素即可使它们为空白,例如

    [NtdimPerSize] = IF(HASONEVALUE('sizeTable'[file]),[dimPerSize],BLANK())

注意,所有这些都假定在创建数据透视表时,您是从“大小表”中“拖入”文件字段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM