使用M / Power Query的动态最小和最大日期

时间:2017-12-18 16:47:51

标签: powerquery m

我有一个使用M即时创建的日历表。

它是这样开始的:

let
    StartDate = #date(2016, 1, 1),
    EndDate = #date(2018, 12, 31),
    //Used for 'Offset' Column calculations, you may Hard code CurrentDate for testing e.g. #date(2017,9,1)
    CurrentDate = DateTime.Date(DateTime.FixedLocalNow()),
    // Specify the last month in your Fiscal Year, e.g. if June is the last month of your Fiscal Year, specify 6
    FiscalYearEndMonth = 6,
    #"==SET PARAMETERS ABOVE==" = 1,
    #"==Build Date Column==" = #"==SET PARAMETERS ABOVE==",
    ListDates = List.Dates(StartDate, Number.From(EndDate - StartDate)+1, #duration(1,0,0,0)),
    ...
    ... 

是否可以使前两行动态化,以便从数据库表中获取最小和最大日期?所以这两行:

let
    StartDate = #date(2016, 1, 1),
    EndDate = #date(2018, 12, 31),

我使用以下内容将另一个表加载到模型中 - 我可以以某种方式使用此加载中的Date列来动态设置StartDate和EndDate吗?

let
    Source = Sql.Database("ourServer", "ourDB"),
    tb_ModelFact = Source{[Schema="dbo",Item="tb_ModelFact"]}[Data],
    #"Changed Type" = Table.TransformColumnTypes(tb_ModelFact,{{"Date", type datetime}}),
    #"Filtered Rows" = Table.SelectRows(#"Changed Type", each true),
    #"Changed Type1" = Table.TransformColumnTypes(#"Filtered Rows",{{"Amount", type number}})
in
    #"Changed Type1"

修改

所以我试过这个

StartDate = List.Min(Fact[Date]),
EndDate = List.Max(Fact[Date]),

....并得到了这个神秘的错误?

Expression.Error: We cannot convert the value #datetime(2016, 1, 6, 0, 0, 0) to type Date.
Details:
    Value=06/01/2016 00:00:00
    Type=Type

声明后的后续M代码中出现此错误吗?

1 个答案:

答案 0 :(得分:1)

是。你应该可以写下这些内容:

let
    StartDate = List.Min(tb_ModelFact[Date]),
    EndDate = List.Max(tb_ModelFact[Date]),

其中tb_ModelFact[Date]是包含您尝试从中获取最大值和分钟数的日期的列。

您需要将tb_ModelFact更改为第二个查询的名称。