【问题标题】:How can I create an Index column based on 2 columns (time and the process level)如何基于 2 列(时间和进程级别)创建索引列
【发布时间】:2021-10-07 08:21:51
【问题描述】:

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

详细说明:产品 ID 遵循时间戳表示的时间顺序,状态键可以来回波动(这是一种批准或拒绝过程,键表示批准阶段)。我希望每次状态键开始循环 1-6 时索引列计数 +1。起始编号并不总是从 1 开始。

【问题讨论】:

  • 每个部分的底行在 Staus Key 列中是否始终为 6?
  • 这些答案对你有用吗?

标签: sql powerbi dax powerquery


【解决方案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 的潜在问题(我只读过)并不总是以原始顺序返回数据(特别是如果它之前已排序)。
    猜你喜欢
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多