Как написать функцию даты WorkdayDiff в Power Query M Language - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь создать пользовательскую функцию, которая вычисляет разницу в рабочих днях между двумя датами. Я сделал ту же функцию в 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 Ответ

1 голос
/ 01 апреля 2019

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

Причина, по которой вы получаете Type not defined, заключается в том, что в M учитывается регистр, и вам нужно использовать date вместо Date при обращении к типам данных. М также не имеет функции 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
...