如何基于 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"
我正在尝试获取索引列(以黄色突出显示),该列可以计算产品 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"