仅合计已过滤的最大值

时间:2018-07-17 13:36:19

标签: powerbi dax

我正在尝试使用DAX创建度量。我从这样的表中的数据开始。数据表名为1025。

![enter image description here

我要做的是确定每个SUBLINE_NBR1的MAX BUDGET_AMOUNT1,然后将所有选定的SUBLINE_NBR1的MAX值相加。因此,对于此屏幕截图,您所看到的应该总共产生6,919。即1,184 + 630 + 0 + 5,105 ... SUBLINE_NBR1 31-02的BUDGET_AMOUNT1的最大值+ SUBLINE_NBR1 31-13的BUDGET_AMOUNT1的最大值+ SUBLINE_NBR1 32-00的BUDGET_AMOUNT1的最大值+ SUBLINE的BUDGET_AMOUN11的最大值-03。

我能够确定每个SUBLINE_NBR1的最大值。我是通过这种方式做到的:

Budget = CALCULATE(MAXX('1025','1025'[BUDGET_AMOUNT1]),DISTINCT('1025'[SUBLINE_NBR1]))

使用此度量,并且未在表中选择任何记录,我得到5105,这是我期望的,因为5105是所有SUBLINE_NBR1记录中BUDGET_AMOUNT1的最大值。如果我选择一条记录,那么我会得到它的价值。例如,如果我选择一条630作为BUDGET_AMOUNT1的记录,我将得到630作为“预算”度量结果,这也是预期的,因为630是它的MAX BUDGET_AMOUNT1值。如果选择两个或两个以上记录,则我得到的BUDGET_AMOUNT1 MAX值中的最大值。例如,如果我选择630之一,选择1,184之一,则得到1,184。再次,如预期的那样。到目前为止,一切都很好。

现在,我不想返回更大的BUDGET_AMOUNT1 MAX值,而是要对所选SUBLINE_NBR1值的所有MAX值求和,然后返回该和。例如,如果我选择表格的第四行和第七行,我想从度量中获取1,814(1,184 + 630)。如果选择表的前七行,我仍然希望从度量​​中获得1,814(仍然为1,184 + 630 ... SUBLINE_NBR1 31-02的最大值+ SUBLINE_NBR1 31-13的最大值)。但是我似乎在上下文方面遇到麻烦了?我想。

我尝试了很多事情,如下所示。 (我不会全部列出它们。)但是我离解决方案还很遥远。

我尝试过:

Budget = 
var MaxVal = SUMX('1025',CALCULATE(MAXX('1025','1025'[BUDGET_AMOUNT1]),DISTINCT('1025'[SUBLINE_NBR1])))

但是它会添加每一行...而不仅仅是MAX值。它为所有记录返回52,571,或者为任何选定记录返回所有BUDGET_AMOUNT1值的总和。

我也尝试过:

Budget = 
var MaxVal = CALCULATE(MAXX('1025','1025'[BUDGET_AMOUNT1]),DISTINCT('1025'[SUBLINE_NBR1]))
return SUMX('1025',MaxVal)

但是我不确定自己在做什么。它返回的数值非常高(这20条记录为102,100)。似乎正在尝试添加所有选定的值...等等。跨过SUBLINE_NBR1个组时,它们添加不正确。无论如何,这显然也不是我想要的。

可能有一个简单的解决方案,但是,是的……我很茫然,可以肯定会使用您的帮助!

2 个答案:

答案 0 :(得分:1)

Budget =
SUMX (
    VALUES ( '1025'[SUBLINE_NBR1] ),
    CALCULATE ( MAX ( '1025'[BUDGET_AMOUNT1] ) )

工作原理: 首先,VALUES在您的上下文中生成一个唯一的SUBLINE_NBR1列表(如果SUBLINE_NBR1中有空格并希望忽略它们,则也可以使用DISTINCT代替VALUES)。

第二,SUMX在SUBLINE_NBR1的列表上进行迭代,为它们中的每一个计算“最大预算额”,然后将这些最大值相加。

答案 1 :(得分:0)

@RADO的解决方案很好,但这是要考虑的另一种选择:

= SUMX(
      SUMMARIZE('1025',
          '1025'[SUBLINE_NBR1],
          "MaxVal", MAX('1025'[BUDGET_AMOUNT1])),
      [MaxVal])

SUMMARIZE函数创建一个表,将不同的SUBLINE_NBR1值进行分组(很像SQL GROUP BY),并在聚合调用BUDGET_AMOUNT1时取其最大值{{1} 1}}。没有过滤器,该表为:

Summarize Output

然后MaxVal遍历上表的每一行并添加SUMX列。