【Power Query】使用自定义函数动态生成日期表,支持同期环比
Excel或者Power BI经常需要用到日期表,每次处理会比较麻烦,分享一个经常使用的自定义函数,可以输入起止时间自动生成连续的日期表,包括年、月、日、星期、年月、年周、中文月份名称、自定义月(区分当月上月方便设置环比),是否同期等等
自定义函数
(StartDate as date,EndDate as date)=>let
// 参数设置 - 根据需要设置日期范围
// StartDate = #date(2020, 1, 1),
// EndDate = #date(2024, 12, 31),
// 其他参数
this_ym=Date.ToText(EndDate,"yyyy年MM月"),
last_m=Date.AddMonths(EndDate,-1),
last_ym=Date.ToText(last_m,"yyyy年MM月"),
max_day= Date.Day(EndDate),
// 生成日期序列
DateList = List.Dates(StartDate, Duration.Days(EndDate - StartDate) + 1, #duration(1,0,0,0)),
// 转换为表格
转换为表格 = Table.FromList(DateList, Splitter.SplitByNothing(), {"日期"}),
更改类型 = Table.TransformColumnTypes(转换为表格,{{"日期", type date}}),
// 添加年份列
添加年份 = Table.AddColumn(更改类型, "年份", each Date.Year([日期]), Int64.Type),
// 添加月份列
添加月份 = Table.AddColumn(添加年份, "月份", each Date.Month([日期]), Int64.Type),
// 添加日列
添加日 = Table.AddColumn(添加月份, "日", each Date.Day([日期]), Int64.Type),
// 添加年月列
添加年月 = Table.AddColumn(添加日, "年月", each Date.ToText([日期],"yyyy年MM月"), type text),
// 添加年周列
添加年周 = Table.AddColumn(添加年月, "年周", each Text.From([年份]) & "年" &
Text.PadStart(Text.From(Date.WeekOfYear([日期])),2, "0") & "周", type text),
// 添加月份名称
添加月份名称 = Table.AddColumn(添加年周, "月份名称", each Date.MonthName([日期]), type text),
// 添加星期名称
添加星期名称 = Table.AddColumn(添加月份名称, "星期名称", each Date.ToText([日期], "ddd"), type text),
// 添加是否工作日
添加是否工作日 = Table.AddColumn(添加星期名称, "是否工作日", each if Date.DayOfWeek([日期], Day.Monday) < 5 then "是" else "否", type text),
添加自定义月 = Table.AddColumn(添加是否工作日, "自定义月", each if [年月] = this_ym then "当月" else if [年月] = last_ym then "上月" else [年月],type text),
添加同期 = Table.AddColumn(添加自定义月, "是否同期", each if [日] <= max_day then "同期" else "其他",type text)
in
添加同期
使用方法
打开Power Query 高级编辑器,新建空白查询,复制以上代码,添加即可
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭