在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,

退一步从您的解决scheme和雅各提出的,我认为这可能是有用的创build另一个表可以聚合所有的计算(特别是考虑到你可能有超过2个表与文件特定的属性)。

所以我创build了一个包含(只)唯一文件名的表,因此这种关系可以通过这种方式可视化:

在这里输入图像说明

添加必要的措施要简单得多(不需要计算列)。 我已经testing了两种情况:

1)为属性值文件大小创build简单的SUM度量。 然后把这两项措施和工作分开:-)。

2)使用SUMX函数有一个更通用的解决scheme。 然后, 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进行计算(如果需要过滤掉,则使用简单的计算/filter组合)。 在文件大小的情况下,我也使用SUMX,即使它并不是真的需要,因为表中每个文件名只包含1条logging 。 如果将有2个实例,则根据所需的结果使用SUMX或AVERAGEX。

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

希望这可以帮助。

你看起来有关系的概念OK,但是就CALCULATE()而言,无论是在结构方面还是在不能简单地使用“裸”数字列的事实上,你都不在正确的轨道上,他们需要以某种方式打包。

你所期望的方法是正确的,一旦你得到一个简单的版本运行的东西,你将能够切片,并在任何相关的维度骰子。

最佳做法可能是采取以下几种措施来build立起来:

 [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])

    根据你想使用的math,你可能会发现,产生一个有用的平均值,你需要使用SUMX,但除以案例的数量,即COUNTROWS('sizeTable'[文件])。

  2. 你可能会认为这些总数是不相关的,并简单地引入一个error handling元素,例如:

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

注意,所有这一切都假设当你创build你的透视时,你是从'sizetable'中'拖'文件域。