不同班次的日期差异(计算结束时间直到班次时间)

问题描述 投票:0回答:1

假设班次是:

Morning   06.00 - 13.59
Afternoon 14.00 - 21.59
Night     22.00 - 05.59

我假设我有一个名为 TimesWork 的数据集和列开始时间(包含语句的开始时间)和结束时间(包含语句的结束时间)。 我有一个名为“班次”的列,我在其中计算了时间是否属于早班、下午班或夜班。

为此,我使用了这个公式,它很有效

Shift = 
IF(
    TIMEVALUE(TimesWork[Start]) >= TIMEVALUE("06:00:00") && TIMEVALUE(TimesWork[End]) <= TIMEVALUE("13:59:59"),
    "Morning",
    IF(
        TIMEVALUE(TimesWork[Start]) >= TIMEVALUE("14:00:00") && TIMEVALUE(TimesWork[End]) <= TIMEVALUE("21:59:59"),
        "Afternoon",
        IF(
            TIMEVALUE(TimesWork[Start]) >= TIMEVALUE("22:00:00") || TIMEVALUE(TimesWork[End]) <= TIMEVALUE("05:59:59"),
            "Night",
            BLANK()
        )
    )
)

如果开始时间是从班次 A 到班次 B 的结束时间(例如,早上开始,下午结束),我创建了一个列,用这个有效的公式向我发出警报

Alert = 
IF(
    (TIMEVALUE(TimesWork[Start]) < TIMEVALUE("13:59") && TIMEVALUE(TimesWork[End]) > TIMEVALUE("14:00")) ||
    (TIMEVALUE(TIMEWORK[Start]) < TIMEVALUE("21:59") && TIMEVALUE(TIMEWORK[End]) > TIMEVALUE("22:00")) ||
    (TIMEVALUE(TIMEWORK[Start]) < TIMEVALUE("05:59") && TIMEVALUE(TIMEWORK[End]) > TIMEVALUE("06:00")),
    "Alert",
    BLANK()
)

现在我需要弄清楚,如果有警报,即一行在一个班次上有开始时间(例如,早上),在另一个班次上有结束时间(例如,下午),那么距下班时间有多少分钟上午班和下午班有多少人。在开始时间为下午 1:56 的示例中结束时间下午 2:15我必须有一个名为“早晨时间”的列,其中从该行中获取 4 分钟(开始时间下午 1:56,轮班结束时间为下午 1:59:59),从该行获取 15 分钟(开始时间 2:下午 00 点 - 轮班开始和结束时间下午 2:15)在“下午时间”栏中。

如何在 powerbi 中执行此操作?

powerbi dax powerbi-desktop
1个回答
0
投票

尝试以下操作。除了

return ...
之外,它们是相同的。
对于
Minute Night
,请注意
+ 1
来处理午夜交叉(
+ 1
= 添加一天)。

Minute Morning = 
  var twStart = TIMEVALUE([Start])
  var twEnd = TIMEVALUE([End])

  var isMorningStart =   ( TIMEVALUE("06:00") <= twStart && twStart < TIMEVALUE("14:00") )
  var isAfternoonStart = ( TIMEVALUE("14:00") <= twStart && twStart < TIMEVALUE("22:00") )
  var isNightStart =     ( TIMEVALUE("22:00") <= twStart || twStart < TIMEVALUE("06:00") )
  var isMorningEnd =     ( TIMEVALUE("06:00") <= twEnd && twEnd < TIMEVALUE("14:00") )
  var isAfternoonEnd =   ( TIMEVALUE("14:00") <= twEnd && twEnd < TIMEVALUE("22:00") )
  var isNightEnd =       ( TIMEVALUE("22:00") <= twEnd || twEnd < TIMEVALUE("06:00") )

  return SWITCH( TRUE(),
    isNightStart && isMorningEnd, DATEDIFF(TIMEVALUE("06:00"), twEnd, MINUTE),
    isMorningStart && isAfternoonEnd, DATEDIFF(twStart, TIMEVALUE("14:00"), MINUTE)
  )


Minute Afternoon = 
  var twStart = TIMEVALUE([Start])
  var twEnd = TIMEVALUE([End])

  var isMorningStart =   ( TIMEVALUE("06:00") <= twStart && twStart < TIMEVALUE("14:00") )
  var isAfternoonStart = ( TIMEVALUE("14:00") <= twStart && twStart < TIMEVALUE("22:00") )
  var isNightStart =     ( TIMEVALUE("22:00") <= twStart || twStart < TIMEVALUE("06:00") )
  var isMorningEnd =     ( TIMEVALUE("06:00") <= twEnd && twEnd < TIMEVALUE("14:00") )
  var isAfternoonEnd =   ( TIMEVALUE("14:00") <= twEnd && twEnd < TIMEVALUE("22:00") )
  var isNightEnd =       ( TIMEVALUE("22:00") <= twEnd || twEnd < TIMEVALUE("06:00") )

  return SWITCH( TRUE(),
    isMorningStart && isAfternoonEnd, DATEDIFF(TIMEVALUE("14:00"), twEnd, MINUTE),
    isAfternoonStart && isNightEnd, DATEDIFF(twStart, TIMEVALUE("22:00"), MINUTE)
  )


Minute Night = 
  var twStart = TIMEVALUE([Start])
  var twEnd = TIMEVALUE([End])

  var isMorningStart =   ( TIMEVALUE("06:00") <= twStart && twStart < TIMEVALUE("14:00") )
  var isAfternoonStart = ( TIMEVALUE("14:00") <= twStart && twStart < TIMEVALUE("22:00") )
  var isNightStart =     ( TIMEVALUE("22:00") <= twStart || twStart < TIMEVALUE("06:00") )
  var isMorningEnd =     ( TIMEVALUE("06:00") <= twEnd && twEnd < TIMEVALUE("14:00") )
  var isAfternoonEnd =   ( TIMEVALUE("14:00") <= twEnd && twEnd < TIMEVALUE("22:00") )
  var isNightEnd =       ( TIMEVALUE("22:00") <= twEnd || twEnd < TIMEVALUE("06:00") )

  return SWITCH( TRUE(),
    isAfternoonStart && isNightEnd, DATEDIFF(TIMEVALUE("22:00"), twEnd + IF(twEnd < TIMEVALUE("00:00") + 1, 0, 1), MINUTE),
    isNightStart && isMorningEnd, DATEDIFF(twStart, TIMEVALUE("06:00") + IF(twEnd < TIMEVALUE("00:00") + 1, 1, 0), MINUTE)
  )
© www.soinside.com 2019 - 2024. All rights reserved.