我正在尝试在电源查询中的导入中添加一列,以显示下一次订单发生的时间,以便让我查看在该时间点是否进行/已知重新订购。
样本数据
订单表
项目 | 订购日期 |
---|---|
红色 | 2024 年 1 月 1 日 |
蓝色 | 2024 年 1 月 1 日 |
黄色 | 2024 年 1 月 1 日 |
红色 | 2024 年 2 月 1 日 |
黄色 | 2024 年 2 月 1 日 |
红色 | 2024 年 3 月 1 日 |
黄色 | 2024 年 3 月 1 日 |
结果表将显示每个订单的下一个订单发生日期,连接位于“项目”上,日期是大于当前行日期的第一条记录。
结果
结果 | ||
---|---|---|
项目 | 订购日期 | 下次订购日期 |
红色 | 2024 年 1 月 1 日 | 2024 年 2 月 1 日 |
蓝色 | 2024 年 1 月 1 日 | 空 |
黄色 | 2024 年 1 月 1 日 | 2024 年 2 月 1 日 |
红色 | 2024 年 2 月 1 日 | 2024 年 3 月 1 日 |
黄色 | 2024 年 2 月 1 日 | 2024 年 3 月 1 日 |
红色 | 2024 年 3 月 1 日 | 空 |
黄色 | 2024 年 3 月 1 日 | 空 |
我已经通过使用转换按钮合并查询,然后使用条件列来缩小结果范围(创建具有完整外部联接的表)来完成此操作,但考虑到数据集的大小,此联接在导入中创建了太多行,然后从数据集中删除。
我想对selectrows使用列公式,我认为这会涉及table.selectrows(table.group),但还需要加入该项目并且下一个订单日期大于每行中的订单数据。
我看到很多关于 selectrows 或 group by 的信息,但没有找到将其传递回 mysql 数据库的有效方法。
如果我正在写 mysql 语句,那就是
select
a.item
,a.orderdate
,min(nextorder.orderdate) as NextOrderDate
from orders a
left join orders as NextOrder on
a.item=NextOrder.item
and
NextOrder.orderdate>a.orderdate
group by
a.item
,a.orderdate`
在 powerquery 中你可以尝试
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Added Index" = Table.AddIndexColumn(Source, "Index", 0, 1, Int64.Type),
#"Grouped Rows" = Table.Group(#"Added Index", {"Item"}, {{"data", each
let zz=_,
shiftedList = List.RemoveFirstN(Table.Column(zz,"OrderDate"),1),
custom1 = Table.ToColumns(zz) & {shiftedList}
in Table.FromColumns(custom1,Table.ColumnNames(zz) & {"Previous Date"}) , type table }}),
#"Expanded data" = Table.ExpandTableColumn(#"Grouped Rows", "data", {"OrderDate", "Index", "Previous Date"}, {"OrderDate", "Index", "Previous Date"}),
#"Sorted Rows" = Table.Sort(#"Expanded data",{{"Index", Order.Ascending}}),
#"Removed Columns" = Table.RemoveColumns(#"Sorted Rows",{"Index"})
in #"Removed Columns"