使用ALLEXCEPT和ALLSELECTED的嵌套上下文

时间:2018-01-18 23:36:27

标签: powerbi powerpivot dax excel-2016

我现在面临一个问题,我在任何在线研究中找不到答案。

我的计算方法如下......

top_selected_tier:=CALCULATE(
    min(Table1[waterfall_tier]),
    ALLSELECTED(Table1)
)

...在切片[waterfall_tier]字段(使用切片器或过滤器下拉列表)后,在度量窗格中显示正确的值。

但是,当我在计算列中引用该度量时...

[test_top_tier]=[top_selected_tier]

......我得到了不同的价值。它基本上返回表中的最低值,而不管应用哪组过滤器/切片器。

我需要测试的是行级别的[waterfall_tier]字段是否与通过切片器选择的[top_selected_tier]的当前最低值匹配,如测量窗格中所报告的那样。

同样,在另一个计算列中,我试图对表中给定日期的所有“已填充”请求进行求和,并且我不知道如何构造公式以仅对选择<求和/ em>值(通过切片器/过滤器下拉列表)。相反,此公式会对当天的所有值进行求和,而不管应用的过滤器/切片器的集合。

[all_filled]=CALCULATE(
    sum([requests]),
        FILTER(ALLEXCEPT(Table1,Table1[request type],Table1[date]),
            [request type]="filled"
        )
)

实际上我需要公式在表的ALLSELECTED子集上返回ALLEXCEPT ...如果这有意义吗?

2 个答案:

答案 0 :(得分:0)

请注意CALCULATE的功能:

  1. 添加了新的过滤器上下文。
  2. 该函数将现有行上下文转换为等效的过滤器上下文。
  3. 前面的同时发生。

答案 1 :(得分:0)

计算的列不是动态的,这就是为什么要获得固定值的原因。 (请参见this article)

关于计算列,您需要记住的一个重要概念是在数据库处理期间对它们进行计算,然后将其存储在模型中。

这意味着在开始时没有过滤器的情况下,列值仅被评估一次,因此“ ALLSELECTED”数据集就是整个表。

在PowerBI中(很难),您无法创建动态列。