【问题标题】:PowerBi Measure - divide by value based on another valuePowerBi Measure - 除以基于另一个值的值
【发布时间】:2020-10-28 18:22:00
【问题描述】:

我有以下数据集。

    name            duration    date        begintime   time_type
    Person 1        15          20190910    0845        AM  
    Person 1        15          20190910    1000        OV  
    Person 1        15          20190910    1100        AM  
    Person 2        15          20190910    0915        AM  
    Person 2        15          20190910    1015        AM  
    Person 2        15          20190910    0945        AM  
    Person 2        15          20190910    1045        AM

我尝试创建一个按人计算持续时间的度量,但由于第 1 个人在 20190910 上的时间类型为 OV,我需要将总和除以 5。如果此人没有时间类型的 OV那天,我需要除以 8(因为第 2 个人当天没有时间类型的 OV)。可能第 1 个人在另一天没有时间类型 OV,但那一天我需要除以 8。如何在 PowerBi 度量中完成此操作?

更新: 预期的输出应如下所示:

Person 1 - 9    (15 + 15 + 15) / 5
Person 2 - 7.5  (15 + 15 + 15 + 15) / 8

【问题讨论】:

  • 你能展示你的预期输出吗?

标签: powerbi dax


【解决方案1】:

此度量将检查上下文中存在的值是否包含“OV”,并根据该值选择适当的除法值

Measure = 
SUM('Table'[duration]) /
IF(CONTAINSROW(VALUES('Table'[time_type]),"OV")
   ,5 --true
   ,8 --false
)

【讨论】:

  • 预期的结果,我正在寻找不匹配。问题在于规则是如果那天有 EXT,我必须将当天的所有小时数除以 5。那天你的度量除以 8 和 5....
  • 好的,我没有正确解释这个问题,我已经编辑了答案,现在公式返回了你期望的结果
【解决方案2】:

如果我了解您的情况,您每天都会应用除数,因此调整后的除数在不同的日子可能会有所不同。那么你也应该对名字进行交互,否则总数会不正确。

Adjusted Duration = 
SUMX( 
    VALUES( TImes[name] ),
    SUMX(
        VALUES( Times[date] ),
        VAR timeTypeOV =
            CALCULATE(
                COUNTROWS( Times ),
                ALLEXCEPT( Times, Times[name], Times[date] ),
                Times[time_type] = "OV"
            )
        VAR duration =
            CALCULATE(
                SUM( Times[duration] ),
                ALLEXCEPT( Times, Times[name], Times[date] )
            )
        VAR divisor =
            IF( timeTypeOV > 0, 5, 8 )
        RETURN
            DIVIDE( duration, divisor )
    )
)

【讨论】:

猜你喜欢
  • 2023-03-21
  • 1970-01-01
  • 2019-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-25
  • 1970-01-01
相关资源
最近更新 更多