如何通过 Power Query 筛选出最新状态的订单?

Power Query 啊哦额信 ⋅ 于 2022-05-06 18:20:40 ⋅ 最后回复由 啊哦额信 2022-05-19 18:17:24 ⋅ 1178 阅读

运营同事每天会下载订单表格,里面包含前30天的所有订单数据,并且把每个文档放在一个文件夹里面,我需要去重所有订单并通过订单入库的日期去提取最新的状态(判断是退款还是取消,还是完成了订单);

我现在是用DAX函数解决,创建一个中间表来实现的:
file
所有文档合并后得到一个数量庞大的表,再新建列判断这个订单是不是最新的入库日期:

筛选最新订单入库日期 = 
COUNTROWS(
    FILTER('订单数据',
        '订单数据'[商品ID] = EARLIER('订单数据'[商品ID])&&
        '订单数据'[淘宝订单编号] =EARLIER('订单数据'[淘宝订单编号])&&
        '订单数据'[订单入库日期]>EARLIER('订单数据'[订单入库日期])
    )
)

再通过筛选得到去重并且是最新状态的订单表:

目标订单数据 = FILTER('订单数据',ISBLANK('订单数据'[筛选最新订单入库日期]))

file

这种方法有个中间表,而且订单多了,这个pbix文档就会很大,有点麻烦,所以就想看能不能通过Power Query解决:
我试过加一个筛选步骤:

筛选最新状态 = 
Table.SelectRows(
    提取订单入库日期3,
    each [订单入库日期] = 
    List.Max(
        Table.SelectRows( 提取订单入库日期3 , (x) => x[淘宝订单编号] = [淘宝订单编号] and x[商品ID] = [商品ID])[订单入库日期]
    )
)

但是这个加载时间太久了,就想问问各位大佬有没有更高效简洁的方法?

示例文档 ↓
链接:https://pan.baidu.com/s/1XOWqjdQKYJfT64iAllhFqA
提取码:7kfh

成为第一个点赞的人吧 :bowtie:
回复数量: 4
  • 焦棚子 微软 MVP
    2022-05-18 12:28:20

    1、可以尝试使用Table.Group应该会更高效。

    2、另外你的合并文件夹的方式也比较冗余,可以参考:https://jiaopengzi.com/2602.html

    file

  • 啊哦额信
    2022-05-19 17:07:34

    @焦棚子 感谢大佬!
    我用您这方法试试确实效率高了很多,加载时间从原来十几分钟缩减到5分钟左右,不过时间还是稍微长了点。。。
    敢问大佬还有其他的优化方向不?

  • 焦棚子 微软 MVP
    2022-05-19 17:50:48

    @啊哦额信

    减少不需要的列的数量,减少冗余步骤,你数据吃特点就是原始数据乘以30倍的冗余,在数据来源上看看有没有根治的办法吧。

    另外可以在业务逻辑算法上看看有没有新的减少计算量的可能性,这个就要通盘来看了。

  • 啊哦额信
    2022-05-19 18:17:24

    @焦棚子
    好的 非常非常感谢~
    我自己再优化试试

暂无评论~~
  • 请务必阅读并严格遵守《社区管理规范与使用说明》
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 发送表情,可用的 Emoji 见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板粘贴上传, 格式限制 - jpg, png, gif
  • 不支持上传附件,请尽可能用文字和图片将问题描述清楚,如实在需要上传附件,可上传到 共享网盘 后分享链接
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
Ctrl+Enter