当我们谈论Power BI中的数据分析时, 日期 表是不可避免的。有多种方法可以创建 日期 table either 在 达克斯 or 在 功率查询。在 达克斯 you my use either CALENDAR() function or CALENDARAUTO() 创建的功能 日期 table. In 功率查询 您可以结合使用 List.Dates(), #date() and #duration() 职能。无论哪种方式,总有一个挑战,那就是如何找到一个合适的日期范围,该范围从过去的日期开始,到将来的日期结束,涵盖数据模型中的所有相关日期。一个简单的答案是, 我们可以问业务。中小企业知道有效日期范围是多少。.
尽管这是一个正确的论点,但并非总是如此。特别是 开始日期 这是过去的日期。在许多情况下,企业会说:
让我们看一下数据以找出答案.
这也是正确的一点,我们总是可以查看数据,找到其中的所有列 日期 or 日期Time 然后,数据类型按升序或降序对数据进行排序以获得结果。但是,如果有很多呢?然后,此过程可能非常耗时。
你们中许多人可能已经认为我们可以使用 CALENDARAUTO() in 达克斯 而且我们很乐意去。好吧,那不是很正确。在很多情况下 日期 or 日期Time 我们不能考虑的列 日期 尺寸。如出生日期或去世日期。在这篇文章的后面将对此进行更多讨论。
在这篇文章中,我分享了一段我为自己编写的代码。我当时正在确定 开始日期 and the 结束日期 日期维度的次数很多,所以我认为这可能对您也有帮助。
时间 Dimension at Second Grain with 功率查询 (M) Supporting 时间 Bands:
在查询编辑器中复制/粘贴以下代码’s Advanced Editor to generate 时间 dimension 在 功率查询:
let
Source = Table.FromList({1..86400}, Splitter.SplitByNothing()),
#"Renamed Columns" = Table.RenameColumns(Source,{{"Column1", "ID"}}),
#"时间 Column Added" = Table.AddColumn(#"Renamed Columns", "时间", each 时间.From(#datetime(1970,1,1,0,0,0) + #duration(0,0,0,[ID]))),
#"Hour Added" = Table.AddColumn(#"时间 Column Added", "Hour", each 时间.Hour([Time])),
#"Minute Added" = Table.AddColumn(#"Hour Added", "Minute", each 时间.Minute([Time])),
#"5 Min Band Added" = Table.AddColumn(#"Minute Added", "5 Min Band", each 时间.From(#datetime(1970,1,1,0,0,0) + #duration(0, 0, Number.RoundDown(Time.Minute([Time])/5) * 5, 0)) + #duration(0, 0, 5, 0)),
#"15 Min Band Added" = Table.AddColumn(#"5 Min Band Added", "15 Min Band", each 时间.From(#datetime(1970,1,1,0,0,0) + #duration(0, 0, Number.RoundDown(Time.Minute([Time])/15) * 15, 0)) + #duration(0, 0, 15, 0)),
#"30 Min Band Added" = Table.AddColumn(#"15 Min Band Added", "30 Min Band", each 时间.From(#datetime(1970,1,1,0,0,0) + #duration(0, 0, Number.RoundDown(Time.Minute([Time])/30) * 30, 0)) + #duration(0, 0, 30, 0)),
#"45 Min Band Added" = Table.AddColumn(#"30 Min Band Added", "45 Min Band", each 时间.From(#datetime(1970,1,1,0,0,0) + #duration(0, 0, Number.RoundDown(Time.Minute([Time])/45) * 45, 0)) + #duration(0, 0, 45, 0)),
#"60 Min Band Added" = Table.AddColumn(#"45 Min Band Added", "60 Min Band", each 时间.From(#datetime(1970,1,1,0,0,0) + #duration(0, 0, Number.RoundDown(Time.Minute([Time])/60) * 60, 0)) + #duration(0, 0, 60, 0)),
#"Removed Other Columns" = Table.SelectColumns(#"60 Min Band Added",{"时间", "Hour", "Minute", "5 Min Band", "15 Min Band", "30 Min Band", "45 Min Band", "60 Min Band"}),
#"Changed 类型" = Table.TransformColumnTypes(#"Removed Other Columns",{{"时间", type time}, {"Hour", Int64.Type}, {"Minute", Int64.Type}, {"5 Min Band", type time}, {"15 Min Band", type time}, {"30 Min Band", type time}, {"45 Min Band", type time}, {"60 Min Band", type time}})
in
#"Changed 类型"