使用 M/Power 查询的动态最小和最大日期
Dynamic minimum and maximum dates using M/Power Query
我有一个使用 M
.
即时创建的日历 table
它是这样开始的:
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)),
...
...
是否可以使前两行动态化,以便它们从数据库 table 中获取最小和最大日期?所以这两行:
let
StartDate = #date(2016, 1, 1),
EndDate = #date(2018, 12, 31),
我使用以下方法将另一个 table 加载到模型中 - 我能否以某种方式使用此加载中的 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代码是否有此错误?
是的。你应该能够按照这些行写一些东西:
let
StartDate = List.Min(tb_ModelFact[Date]),
EndDate = List.Max(tb_ModelFact[Date]),
其中 tb_ModelFact[Date]
是包含您尝试从中获取最大值和最小值的日期的列。
您需要将 tb_ModelFact
更改为第二个查询的名称。
我有一个使用 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)),
...
...
是否可以使前两行动态化,以便它们从数据库 table 中获取最小和最大日期?所以这两行:
let
StartDate = #date(2016, 1, 1),
EndDate = #date(2018, 12, 31),
我使用以下方法将另一个 table 加载到模型中 - 我能否以某种方式使用此加载中的 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代码是否有此错误?
是的。你应该能够按照这些行写一些东西:
let
StartDate = List.Min(tb_ModelFact[Date]),
EndDate = List.Max(tb_ModelFact[Date]),
其中 tb_ModelFact[Date]
是包含您尝试从中获取最大值和最小值的日期的列。
您需要将 tb_ModelFact
更改为第二个查询的名称。