代码之家  ›  专栏  ›  技术社区  ›  Marc Pincince

仅筛选的最大值合计

  •  0
  • Marc Pincince  · 技术社区  · 7 年前

    我试图用DAX创建一个度量。我从这样的表格中的数据开始。数据表名为1025。

    ![enter image description here

    我要做的是确定每个子行的最大预算金额1,然后合计所有选定子行的最大值。所以对于这个屏幕截图,你看到的应该会产生总共6919个。也就是说,1184+630+0+5105…子行预算金额1的最大值为31-02+子行预算金额1的最大值为31-13+子行预算金额1的最大值为32-00+子行预算金额1的最大值为34-03。

    我可以确定每个子行的最大值。我用这种方法做到了:

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

    使用这个度量,并且在表中没有选择记录,我得到5105,这是我所期望的,因为5105是所有子行记录的预算金额1的最大值。如果我选择一个记录,我就得到它的值。例如,如果我选择一个630作为预算金额1的记录,我会得到630作为预算度量结果,这也是预期的,因为630是它的最大预算金额1值。如果我选择两个或多个记录,我将得到预算金额1的最大值。例如,如果我选择一个630和一个1184,我会得到1184。正如所料。到目前为止,一切都很好。

    现在,我不返回更大的预算金额1 max值,而是将所选子行的所有max值相加并返回该值。例如,如果选择表的第四行和第七行,我希望从度量值(1184+630)中得到1814。如果我选择表的前七行,我仍然希望从度量中得到1814(仍然是1184+630…亚线最大值_nbr1 31-02+亚线最大值_nbr1 31-13)。但我似乎对上下文有问题?我想。

    我试过很多东西,比如下面。(我不会把它们都列出来。)但我还远远没有找到解决办法。

    我尝试过:

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

    但是它添加了每一行…不仅仅是最大值。它返回所有记录的52571,或任何选定记录的所有预算金额1值的总和。

    我也试过:

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

    但我不太确定它在做什么。它返回一个过高的数字值(这20条记录为102100)。它似乎正在尝试添加所有选定的值…等等。在穿越亚线nbr1组时没有正确添加。不管怎样,这显然也不是我想要的。

    可能有一个简单的解决方案,但是,是的……我不知所措,一定能得到你的帮助!

    2 回复  |  直到 7 年前
        1
  •  1
  •   RADO    7 年前
    Budget =
    SUMX (
        VALUES ( '1025'[SUBLINE_NBR1] ),
        CALCULATE ( MAX ( '1025'[BUDGET_AMOUNT1] ) )
    

    )

    工作原理: 首先,值在您的上下文中生成一个唯一的子行_nbr1列表(如果子行_nbr1中有空白并且希望忽略它们,您还可以使用distinct而不是values)。

    第二,sumx迭代子行_nbr1的列表,计算每个子行的最大预算金额,然后将最大值相加。

        2
  •  0
  •   Alexis Olson    7 年前

    @氡的解决方案是好的,但还有另一个选择要考虑:

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

    这个 SUMMARIZE 函数创建表分组distinct SUBLINE_NBR1 值(很像SQL GROUP BY )最大值为 BUDGET_AMOUNT1 聚合称之为 MaxVal . 如果没有过滤器,该表是:

    Summarize Output

    然后 SUMX 遍历上表中的每一行并添加 麦克瓦尔 列。