#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