假设班次是:
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 中执行此操作?
尝试以下操作。除了
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)
)