如何基于 2 列(时间和进程级别)创建索引列
Posted
技术标签:
【中文标题】如何基于 2 列(时间和进程级别)创建索引列【英文标题】:How can I create an Index column based on 2 columns (time and the process level) 【发布时间】:2021-10-07 08:21:51 【问题描述】:我正在尝试获取 Index 列(以黄色突出显示),该列可以计算产品 ID 迭代 1 - 6 的次数,由 Status Key 表示,并且表格按时间顺序排序。
详细说明:产品 ID 遵循时间戳表示的时间顺序,状态键可以来回波动(这是一种批准或拒绝过程,键表示批准阶段)。我希望每次状态键开始循环 1-6 时索引列计数 +1。起始编号并不总是从 1 开始。
【问题讨论】:
每个部分的底行在 Staus Key 列中是否始终为 6? 这些答案对你有用吗? 【参考方案1】:您没有明确规定如何检测状态键何时开始增加。但是这种使用List.Generate
的方法应该可以适应,以防我从您的数据中直觉得出的方法不正确。
我在 Status Key = 6 之后开始将计数加一
来源
M 码
let
Source = Excel.CurrentWorkbook()[Name="Products"][Content],
#"Changed Type" = Table.TransformColumnTypes(Source,
"Product ID", Int64.Type, "Date", type datetime, "Status Key", Int64.Type),
//Generate List for Index column
// incrementing after SK = 6
sk = #"Changed Type"[Status Key],
IndexList = List.Generate(
()=>[Index = 1, idx = 0],
each [idx] < List.Count(sk),
each [Index = if sk[idx] = 6 then [Index]+1 else [Index],
idx=[idx]+1],
each [Index]
),
//Add Index column to table
integer = Int64.Type,
newTble = Table.FromColumns(
Table.ToColumns(#"Changed Type") & IndexList,
type table[Product ID = integer, Date = datetime, Status Key = integer, Index = integer]
)
in
newTble
结果
【讨论】:
【参考方案2】:对于 powerquery,这是我的版本,假设您希望在 Status Key = 6 之后开始将计数加一。这可能更容易理解
添加索引
使用公式添加自定义列
= if [Status Key]=6 then [Index] else null
右键单击该自定义列并填写
单击选择产品 ID 和新的自定义列,然后选择分组依据。使用您想要的任何名称并操作所有行
添加另一个索引
扩展组创建的数据列以提取数据和状态键字段
删除多余的列
let Source = Excel.CurrentWorkbook()[Name="Table1"][Content],
#"Added Index" = Table.AddIndexColumn(Source, "Index", 0, 1),
#"Added Custom" = Table.AddColumn(#"Added Index", "Custom", each if [Status Key]=6 then [Index] else null),
#"Filled Up" = Table.FillUp(#"Added Custom","Custom"),
#"Grouped Rows" = Table.Group(#"Filled Up", "Product ID", "Custom", "data", each _, type table),
#"Added Index1" = Table.AddIndexColumn(#"Grouped Rows", "Index", 1, 1),
#"Expanded data" = Table.ExpandTableColumn(#"Added Index1", "data", "Date", "Status Key", "Date", "Status Key"),
#"Removed Columns" = Table.RemoveColumns(#"Expanded data","Custom")
in #"Removed Columns"
【讨论】:
如果增量是在Status Key = 6
之后开始的,这也有效,并且添加初始Index
列有助于避免Table.Group
的潜在问题(我只读过)并不总是以原始顺序返回数据(特别是如果它之前已排序)。以上是关于如何基于 2 列(时间和进程级别)创建索引列的主要内容,如果未能解决你的问题,请参考以下文章