如何对列中的每个值使用度量,然后对结果求和

时间:2019-09-05 17:07:23

标签: powerbi dax

我创建了一种度量来计算机器上的人工/营业时间。我的方法适用于每台机器。但是,当我想获取整个机队的总人工/运营小时数时,该度量无法得出正确的结果

我相信我的问题是,我在计算总劳动时间和总使用时间的度量中没有指定任何机器。但是,我不知道如何将其合并到DAX中。

对于我使用的小时数:

Hours Used = 
  var __MinVal = MIN(SMU_Usage_Lookup[LTDSMU])
  var __MaxVal = MAX(SMU_Usage_Lookup[LTDSMU])

return
  __MaxVal - __MinVal

SMU_Usage_Lookup表看起来像这样

Machine  Date      LTDSMU
A        1/1/2016  1
B        1/1/2016  42
A        1/2/2016  6
B        1/2/2016  53
A        1/3/2016  11
B        1/3/2016  62
C        1/3/2016  513
C        1/4/2016  523

当创建表格视觉并将机器带入机器时,我得到正确的结果。

Machine  Hours Used  Labor Hours  Man/Op Hours
A        10          1            .10
B        20          5            .25
C        10          2            .20

我的问题是,如果我为所有计算机输入“总计”,或者只是摆脱“计算机”列。我得到这样的东西

Hours Used  Labor Hours  Man/Op Hours
522         8            .02

这是不正确的,我知道发生了什么。我的计算方法是计算所用的小时数,就像每台机器只是一台机器一样。它采用Min LTDSMU并将其从Max LTDSMU中减去,而与机器无关。我需要做的是添加每台机器的使用小时数。因此,在这种情况下为10 + 20 +10。我需要显示结果

Hours Used  Labor Hours  Man/Op Hours
40          8            .2

先谢谢了。让我知道您是否需要进一步澄清。

1 个答案:

答案 0 :(得分:1)

将其包装在SUMX中。我会给出函数的定义,但是您已经用问题标题完美地做到了。

Hours Used = 
SUMX (
  VALUES ( 'SMU_Usage_Lookup'[Machine] ),
  CALCULATE (
    var __MinVal = MIN(SMU_Usage_Lookup[LTDSMU])
    var __MaxVal = MAX(SMU_Usage_Lookup[LTDSMU])
    return
      __MaxVal - __MinVal
  )
)

这里不需要VAR,因此您也可以按以下方式重构和缩小:

Hours Used = 
SUMX (
  VALUES ( 'SMU_Usage_Lookup'[Machine] ),
  CALCULATE ( MAX ( 'SMU_Usage_Lookup'[LTDSMU] ) - MIN ( 'SMU_Usage_Lookup'[LTDSMU] ) )
)

有关其他内容,请查看this question for what CALCULATE is doing there