【问题标题】:How to write a WorkdayDiff date function in Power Query M Language如何在 Power Query M 语言中编写 WorkdayDiff 日期函数
【发布时间】:2019-04-01 08:06:41
【问题描述】:

我正在尝试创建一个自定义函数来计算两个日期之间的工作日差异。我在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

【问题讨论】:

    标签: powerbi powerquery powerbi-desktop m


    【解决方案1】:

    您的代码有几个问题。

    您得到Type not defined 的原因是M 区分大小写,在引用数据类型时您需要使用date 而不是Date。 M 也没有Datediff 功能或理解vbMonday 的含义。您必须使用 M 函数,而不是仅仅粘贴 SSRS 代码并希望它能正常工作。

    这是一个在 M 中的可能实现,采用 this post 的样式。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多