Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powerbi 功率BI计算时差,不包括周末和非工作时间_Powerbi - Fatal编程技术网

Powerbi 功率BI计算时差,不包括周末和非工作时间

Powerbi 功率BI计算时差,不包括周末和非工作时间,powerbi,Powerbi,我有下表,并使用此DAX公式计算首次更改日期和创建日期之间的持续时间: 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) /

我有下表,并使用此DAX公式计算首次更改日期创建日期之间的持续时间:

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()
,它基于一周中的哪一天(一个简单的计算列)。在时间维度中,您同样可以识别
“工时”=TRUE()
,这也是一个简单的计算


一旦尺寸设置到位,就可以很容易地构建包含/排除的计算。

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

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

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
    )
日期之间的工作时间= 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= 如果( firstFullDay>lastFullDay, 0, SUMX(日历(firstFullDay,lastFullDay),查找值(工作小时表[WorkingHoursInAllDay],工作小时表[WeekDay],工作日([Date],2))) ) var firstDayStart=LOOKUPVALUE(工作小时表[StartTime],工作小时表[WeekDay],工作日(startDate,2)) var firstDayEnd=LOOKUPVALUE(工作小时表[EndTime],工作小时表[WeekDay],工作日(startDate,2)) var lastDayStart=LOOKUPVALUE(工作小时表[StartTime],工作小时表[WeekDay],工作日(endDate,2)) var lastDayEnd=LOOKUPVALUE(工作小时表[EndTime],工作小时表[WeekDay],工作日(endDate,2)) var effectiveStartTime=IF(startTimelastDayEnd,lastDayEnd,endTime) 返回 如果( 开始日期=结束日期, 24*如果(effectiveEndTime>effectiveStartTime,effectiveEndTime-effectiveStartTime,0), var firstDayWorkingHour= 24 * 如果( 开始时间>第一天结束, 0, 第一天结束-有效开始时间 ) var lastDayWorkingHour= 24 * 如果( endTime 在这个公式中,您只需正确设置前4个变量。然后它将计算总工作时间。单位为小时

编辑:正如我从你的帖子中看到的,你的周末是星期五和星期六,你需要使用稍微不同的工作日功能。您可以将1作为第二个参数发送到WEEKDAY函数,而不是2。您还需要修改
工作时间表
工作日


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

正如您所提到的,将数据/时间分为两列日期和时间是最好的方法。这段视频显示,几天来,它的工作:。。。。我只需要把它和剩下的时间和分钟结合起来。老实说,这个解决方案似乎很棒。现在,我正试图修改它以匹配我的数据并查看。但在前4个参数中“[Date]”的真正含义是什么?在
工作时间表中也是如此?我的意思是
WeekDay
1的哪一天?@OmarAlSaghier对我来说,工作日1是星期一。您可以创建一个工作日为1=周日的表。只需确保正确使用工作日功能即可。它的第二个参数要求一周的开始日期。@OmarAlSaghier检查WorkingDaySimes的类型“[Total working hours]列。确保它是十进制的。@Omarasaghier在您之前的评论中,您说过您使用了
WEEKDAY([Date],1)
作为WEEKDAY函数。这意味着您假设一周的第一天为周日。为了与此方法保持一致,周五和周六分别为6和7。在您的评论中指出,它们是(5,6)。对于周末,00:00-00:00对我来说很有意义。然而,我没有那个挑战,所以不是百分之百确定。