在excel(DAX)中查找与当前行的值相关的行

时间:2014-11-17 13:24:54

标签: excel excel-formula powerpivot

有没有办法根据当前行的值使用DAX过滤行(我正在使用电源轴)?

换句话说,如果我有一个表“progress”,其中'ID'在每行中递增,并且'Percentage'列和另一个表包含

我想创建一个名为old percentage =(progress [ID] -1)

的百分比的列

这在excel中是否可行?

我在这里找不到任何直截了当的命令,如果有的话,请原谅我,我仍然是新的力量支点。

我这样做可能是创建一个新列旧ID =进度[ID] -1然后在power pivot中创建一个新表,它是当前表的副本,但后来我用旧ID链接它而不是当前的ID。 然后最后我做了一个旧的百分比列=相关([百分比]);

这是解决问题的有效方法吗?这可以进一步优化吗?

谢谢。

编辑:我添加了一张图片来帮助显示我需要的内容

Calculate Percentage Increase

3 个答案:

答案 0 :(得分:8)

<强> JShmay

如果您使用SUMX functionEARLIER的组合,解决方案会更加简单。

只需使用以下公式添加新的计算列:

=SUMX (
    FILTER ( Progress, EARLIER ( [ID] ) = [ID] + 1 ),
    Progress[PERCENTAGE]
)

EARLIER返回当前行,因此如果将其与前一行进行比较,则可以返回正确的值。这种方法可能不是很直观,但效率更高,可以节省大量时间。

输出应如下所示:

enter image description here

尝试四处游戏以达到理想的效果,但我相信这是最简单,最有效的方法(就处理时间而言)。

希望这有帮助。

更新:在DAX查询中阅读此article about using EARLIER。它可能会有所帮助。

答案 1 :(得分:3)

Petr优雅解决方案的替代方案是使用一种方法来解决这个问题。

在这种情况下哪个最好将取决于您的模型的具体情况,您的表的大小,您使用此计算的频率以及您希望复制它的次数(即,如果您想要添加10个计算)列,这将是一个坏主意)。

我喜欢测量方法,因为它使用了一种非常可重复使用的模式:

=
SUMX (
    VALUES ( Progress[ID] ),
    CALCULATE (
        SUM ( Progress[PERCENTAGE] ),
        FILTER (
            ALL ( Progress ),
            Progress[ID]
                = MAX ( Progress[ID] ) - 1
        )
    )
)

小心使用这种方法的总计 - 关闭它们可能是'正确'的事情。

使用Dax Formatter

来美化公式

答案 2 :(得分:0)

答案是肯定的。但是,我需要看到你所拥有的确切样本。听起来你有两列数据,并希望第三列根据与前两个的交互给你一些答案。根据您所描述的内容,我们不需要使用数据透视表,因此我不会浪费您的时间。