繁体   English   中英

Power BI 计算不包括周末和非工作时间的时差

[英]Power BI calculating time difference excluding weekends and non working hours

我有下表并使用此 DAX 公式计算First_change_DateCreate_date之间的持续时间:

Response_time = 
    VAR Minutes = DATEDIFF('otrs ticket Response'[otrs ticket.create_time], 'otrs ticket Response'[First_Change_time],MINUTE)
    var days =INT(Minutes/1440)
    var hourNo=INT(MOD(Minutes,1440) / 60)
    var minuteNO=MOD(Minutes,60)
RETURN
    CONCATENATE( CONCATENATE( CONCATENATE(days,"d "), CONCATENATE(hourNo, "H ")), CONCATENATE(minuteNO, "m "))

我想排除周末(周五、周六)和非工作时间(下午 5:00 - 上午 9:00)

数据:

在此处输入图像描述

我将日期/时间拆分为日期和时间列。 然后我使用日期维度,其中一列是 "Is Working Day" = TRUE() ,基于它是一周中的哪一天(一个简单的计算列)。 在时间维度中,您同样可以识别"Working Hour" = TRUE() ,这也是一个简单的计算。

一旦有了尺寸,就可以很容易地构建包含/排除的计算。

对于我的客户,我创建了一个逻辑。 首先创建了一个WorkingHoursTable

在此处输入图像描述

然后使用以下公式在具有开始和结束日期时间的表中创建一个计算列。

Working Hours Between Dates = 
var startDate = [yourStartDateTime].[Date]
var startTime = [yourStartDateTime] - startDate
var endDate = [yourEndDateTime].[Date]
var endTime = [yourEndDateTime] - endDate

var firstFullDay = startDate + 1
var lastFullDay = endDate - 1

var inBetweenWorkingHours = 
    IF(
        firstFullDay > lastFullDay,
        0,
        SUMX(CALENDAR(firstFullDay, lastFullDay), LOOKUPVALUE(WorkingHoursTable[WorkingHoursInAllDay], WorkingHoursTable[WeekDay], WEEKDAY([Date], 2)))
    )

var firstDayStart = LOOKUPVALUE(WorkingHoursTable[StartTime], WorkingHoursTable[WeekDay], WEEKDAY(startDate, 2))
var firstDayEnd = LOOKUPVALUE(WorkingHoursTable[EndTime], WorkingHoursTable[WeekDay], WEEKDAY(startDate, 2))

var lastDayStart = LOOKUPVALUE(WorkingHoursTable[StartTime], WorkingHoursTable[WeekDay], WEEKDAY(endDate, 2))
var lastDayEnd = LOOKUPVALUE(WorkingHoursTable[EndTime], WorkingHoursTable[WeekDay], WEEKDAY(endDate, 2))

var effectiveStartTime = IF(startTime < firstDayStart, firstDayStart, startTime)
var effectiveEndTime = IF(endTime > lastDayEnd, lastDayEnd, endTime)
        
return 
    IF(
        startDate = endDate,
        24 * IF(effectiveEndTime > effectiveStartTime, effectiveEndTime - effectiveStartTime, 0),
        var firstDayWorkingHour = 
            24 *
            IF(
                startTime > firstDayEnd,
                0,
                firstDayEnd - effectiveStartTime
            )

        var lastDayWorkingHour = 
            24 *
            IF(
                endTime < lastDayStart,
                0,
                effectiveEndTime - lastDayStart
            )
        
        return firstDayWorkingHour + lastDayWorkingHour + inBetweenWorkingHours
    )

在这个公式中,您只需正确设置前 4 个变量。 然后它将计算总工作时间。 单位将以小时为单位。

编辑:正如我从您的帖子中看到的那样,您的周末是周五和周六,您需要使用略有不同的 WEEKDAY 功能。 您可以将 1 作为第二个参数发送到 WEEKDAY function,而不是 2。您还需要修改WorkingHoursTableWeekDay列。

在此之后,您可以使用公式将其解析为“9d 20H 52m”。

这对计算工作时间很有帮助,有没有办法引入假期

例如 1 月 1 日还是圣诞节?

我确实有一个包含此信息的日历表,但不确定如何将其添加到此计算中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM