如何基于 2 列(时间和进程级别)创建索引列

How can I create an Index column based on 2 columns (time and the process level)

我正在尝试获取索引列(以黄色突出显示),该列可以计算产品 ID 在状态键表示的 1 - 6 之间迭代的次数,并且表格按时间顺序排序。

详细说明:Product ID 遵循时间戳表示的时间顺序,Status Key 可以来回波动(这是一种批准或拒绝流程,key 表示批准阶段)。每次 Status 键开始循环 1-6 时,我希望索引列计数 +1。起始编号不会总是从 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

结果

对于 powerquery,这是我的版本,假设您希望在 Status Key = 6 之后将计数递增 1。这可能更容易理解一些

添加索引

使用公式添加自定义列

= if [Status Key]=6 then [Index] else null

右键单击该自定义列并填写

单击 select 产品 ID 和新的自定义列,然后单击分组依据。使用您想要的任何名称和操作 All Rows

再添加一个索引

扩展组创建的数据列以提取数据和状态键字段

删除多余的列

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"