1.24 PowerBI数据准备-当前行减上一行,累计还原为当期

加入 PowerBI自己学 知识星球:下载源文件,边学边练;遇到问题,还可以提问交流。

有一张系统输出的事实表,是按照门店和日期时间(连续的以1小时为间隔)生成的当天的累计数量,现需要在PowerQuery中还原成每个日期时间对应的当期的数量。

解决方案

优先考虑在上游系统中对数据源进行调整;在PowerQuery中,按门店、日期时间排序,然后按门店取出累计列当前行的上一行数据,然后用累计数字减去上一行累计数字就得到了当期数字。

当然,通过DAX也能解决这个问题,但不建议这样做,因为数据清洗最好在数据加载前PowerQuery中完成,以减少冗余数据和对运行内存的占用。

操作步骤  

STEP 1 PowerQuery获取数据后,选中门店列,点击菜单栏转换下的分组依据,在跳出的对话框中修改新列名为待处理,操作选择所有行。

STEP 2 在生成的查询步骤代码中修改,为每个门店对应的小表中增加排序列。

 Table.Group(更改的类型, {"门店"}, {"待处理", each Table.AddRankColumn(_,"门店按日期时间排序",{"日期时间",Order.Ascending},[RankKind=RankKind.Ordinal])})

这里用到了新增排序列函数Table.AddRankColumn,升降序参数为升序,排序类型参数为不重复序号。“_”代表的是当前的小表。点击待处理列单元格里的Table,可查看小表的内容,A店对应的是A店下的所有行,新增了一列排序列。

STEP 3 点击待处理列标题右侧的展开按钮,去掉门店的挑勾以免字段重复,去掉使用原始列名作为前缀的挑勾以保持列名的简洁性。

STEP 4 如果PowerQuery生成的步骤名称是中文,在STEP3生成的查询步骤上面点击鼠标右键重命名为展开表(名称不带中文引号即可,有引号不方便后面引用该步骤)。

STEP 5 点击菜单栏添加列下的自定义列,在跳出的对话框中输入如下代码,增加一个数量列。这里调取了上一步骤的表中的门店与当前行门店相等、序号等于当前行序号-1的累计数量列的值。

Table.AddColumn(展开表, "数量", each if [门店按日期时间排序]>1

then [累计数量]-展开表{[门店=[门店],门店按日期时间排序=[门店按日期时间排序]-1]}[累计数量]

else [累计数量])

STEP 6 删除不需要的列,去掉累计列,保留数量列,修改数据类型,如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值