有一组数据清单,每月都有3000多条数据,但都是当年截至到当月的多条件累计数据,我希望将其变换为当月值。
目前的我的方法是依据条件分组,然后透视月份,再手动一条一套的添加列,如2月-1月求出2月的当月值,最后全部月份添加后再逆透视回来。这种方法导致每个月都要手动添加新的月份数据,而且因为数据多了,非常卡,半天打不开。如何更高效呢?
不是dax函数,而是用power query将累计值清单转换为当月值的清单
下面是高级编辑器的部分内容,(删除了17年的数据,不然很长)
分组的行 = Table.Group(删除的副本1, {"险种", "产品线", "项目", "县支公司 ", "15险类", "项目2", "年月"}, {{"计数", each List.Sum([本年同期累计]), type number}}),
已透视列 = Table.Pivot(Table.TransformColumnTypes(分组的行, {{"年月", type text}}, "zh-CN"), List.Distinct(Table.TransformColumnTypes(分组的行, {{"年月", type text}}, "zh-CN")[年月]), "年月", "计数", List.Sum),
年18.2 = Table.AddColumn(年17.12, ".2018/2/1", each if [#"2018/2/1"]<>null and [#"2018/1/1"]=null then [#"2018/2/1"] else if [#"2018/2/1"]<>null and [#"2018/1/1"]<>null then [#"2018/2/1"]-[#"2018/1/1"] else null),
年18.3 = Table.AddColumn(年18.2, ".2018/3/1", each if [#"2018/3/1"]<>null and [#"2018/2/1"]=null then [#"2018/3/1"] else if [#"2018/3/1"]<>null and [#"2018/2/1"]<>null then [#"2018/3/1"]-[#"2018/2/1"] else null),
年18.4 = Table.AddColumn(年18.3, ".2018/4/1", each if [#"2018/4/1"]<>null and [#"2018/3/1"]=null then [#"2018/4/1"] else if [#"2018/4/1"]<>null and [#"2018/3/1"]<>null then [#"2018/4/1"]-[#"2018/3/1"] else null),
年18.5 = Table.AddColumn(年18.4, ".2018/5/1", each if [#"2018/5/1"]<>null and [#"2018/4/1"]=null then [#"2018/5/1"] else if [#"2018/5/1"]<>null and [#"2018/4/1"]<>null then [#"2018/5/1"]-[#"2018/4/1"] else null),
删除的列1 = Table.RemoveColumns(年18.5,{"2018/2/1", "2018/3/1", "2018/4/1", "2018/5/1"}),
重排序的列 = Table.ReorderColumns(删除的列1,{"险种", "产品线", "项目", "县支公司", "15险类", "项目2", "2018/1/1", ".2018/2/1", ".2018/3/1", ".2018/4/1", ".2018/5/1"}),
更改的类型3 = Table.TransformColumnTypes(重排序的列,{{".2018/2/1", type number},{".2018/3/1", type number}, {".2018/4/1", type number}, {".2018/5/1", type number}}),
逆透视的列 = Table.UnpivotOtherColumns(更改的类型3, {"险种", "产品线", "项目", "县支公司", "15险类", "项 目2"}, "属性", "值"),