Как написать функцию даты WorkdayDiff на языке Power Query M

#powerbi #powerquery #powerbi-desktop #m

#powerbi #запрос мощности #powerbi-рабочий стол #m

Вопрос:

Я пытаюсь создать пользовательскую функцию, которая вычисляет разницу в рабочих днях между двумя датами. Я выполнил ту же функцию в SSRS:

 Public Function WorkdayDiff(StartDate As Date, EndDate As Date) As Date

  Return Datediff("ww", StartDate, EndDate, vbMonday)   
         Datediff("ww", StartDate, EndDate, vbTuesday)   
         Datediff("ww", StartDate, EndDate, vbWednesday)   
         Datediff("ww", StartDate, EndDate, vbThursday)   
         Datediff("ww", StartDate, EndDate, vbFriday)

End Function
  

Я попытался сделать то же самое сейчас на языке Power Query M, но это заставляет меня говорить:

Тип не определен.

Это мой код в расширенном редакторе Power BI:

 (DateStart as Date, DateEnd as Date) as Date =>

let
    WorkdayDiff = Datediff("ww",DateStart ,DateEnd, vbMonday)  
                Datediff("ww",DateStart ,DateEnd, vbTuesday)   
                Datediff("ww",DateStart ,DateEnd, vbWednesday)   
                Datediff("ww",DateStart ,DateEnd, vbThursday)   
                Datediff("ww",DateStart ,DateEnd, vbFriday)
in
    WorkdayDiff
  

Ответ №1:

В вашем коде есть несколько проблем.

Причина, по которой вы получаете Type not defined , заключается в том, что M чувствителен к регистру, и вам нужно использовать date вместо Date при обращении к типам данных. M также не имеет Datediff функции или не понимает, что vbMonday означает. Вы должны использовать M функций, а не просто вставлять код SSRS и надеяться, что это сработает.

Вот возможная реализация в M в стиле этого поста.

 let
    WorkdayDiff = (StartDate as date, EndDate as date) as number =>
    let
        DateList = List.Dates(StartDate, Number.From(EndDate - StartDate)   1, #duration(1,0,0,0)),
        RemoveWeekends = List.Select(DateList, each Date.DayOfWeek(_, Day.Monday) < 5),
        CountDays = List.Count(RemoveWeekends)
    in
        CountDays
in
    WorkdayDiff