如何用Power Query创建上月值条件列?附可用DAX实现代码
在Power Query中实现上月群组值计算(对应DAX逻辑)
你原有的DAX代码逻辑是:按membership_id分组,获取该会员上月对应的最大cohort值。以下是用Power Query(高级编辑器)实现相同逻辑的步骤和代码:
可视化操作步骤
- 加载
Dim__cluster表到Power Query,先确保month_id为日期类型(若为数字格式如YYYYMM,需先转成日期:Date.FromText(Text.From([month_id]) & "01")) - 添加自定义列
prev_month_id,公式为Date.AddMonths([month_id], -1),用于定位上月 - 将表与自身合并:匹配条件设为
membership_id相等,且当前表的prev_month_id等于合并表的month_id - 展开合并后的表,仅保留
cohort列,重命名为prev_cohort - 按
membership_id和month_id分组,对prev_cohort列取最大值,命名为lm_cohort
高级编辑器直接可用的M代码
let Source = YourDataSource, // 替换为你的实际数据源(如Excel、SQL等) // 转换列类型,根据数据实际类型调整 #"Changed Type" = Table.TransformColumnTypes(Source, { {"month_id", type date}, {"membership_id", type text}, {"cohort", type text} }), // 添加上月日期列 #"Added Previous Month" = Table.AddColumn(#"Changed Type", "prev_month_id", each Date.AddMonths([month_id], -1)), // 自合并匹配上月数据 #"Merged Queries" = Table.NestedJoin( #"Added Previous Month", {"membership_id", "prev_month_id"}, #"Changed Type", {"membership_id", "month_id"}, "PrevMonthData", JoinKind.LeftOuter ), // 展开上月群组值 #"Expanded PrevMonthData" = Table.ExpandTableColumn(#"Merged Queries", "PrevMonthData", {"cohort"}, {"prev_cohort"}), // 分组取最大群组值,对应DAX的MAX逻辑 #"Grouped Rows" = Table.Group( #"Expanded PrevMonthData", {"membership_id", "month_id"}, {{"lm_cohort", each List.Max([prev_cohort]), type text}} ) in #"Grouped Rows"
特殊场景处理
- 若
month_id是YYYYMM数字格式,需修改Added Previous Month步骤的公式,先转日期再计算上月,最后转回数字:each Date.Year(Date.AddMonths(Date.FromText(Text.From([month_id]) & "01"), -1)) * 100 + Date.Month(Date.AddMonths(Date.FromText(Text.From([month_id]) & "01"), -1)) - 如果每个会员每月仅对应一条
cohort记录,List.Max可直接替换为List.First([prev_cohort]),结果一致
内容的提问来源于stack exchange,提问作者Rizki Darmawan
相关产品推荐
相关产品推荐

