【问题标题】:Add Column with average time difference of rows with same column values添加具有相同列值的行的平均时间差的列
【发布时间】:2023-01-07 00:49:16
【问题描述】:

我得到了一个这样的 PowerQuery 表:

ID A B C COUNT Timestamp
1 a1 c1 0 2017-05-10 09:55:28
a3 b c2 2017-05-10 10:12:54
2 a2 c3 2 2017-05-10 10:19:47
a2 b c4 2017-05-10 10:20:24
a2 b c5 2017-05-10 10:21:50
3 a3 c6 1 2017-05-10 10:31:02
a3 c c7 2017-05-10 10:31:02

在这里,列 COUNT 检查列值 ID 是否非空,如果是,它计算具有相同列值 A 的行这样列值 B 等于“b”。

现在,我想添加一个列 AVG_TIME_DIFF,它再次检查列值 ID 是否为非空,如果是:

  • 检查COUNT是否等于0,在这种情况下返回“0”
  • else 获取具有相同列值的所有行的时间戳 A这样列值 B 等于“b”以及行本身,按时间顺序对它们进行排序(即COUNT+1 多行)并返回以秒为单位的平均时差
  • 否则结果为空

在上面的示例表中,结果应该是

ID | A  | B | C  | COUNT |      Timestamp      | AVG_TIME_DIFF
 1 | a1 |   | c1 | 0     | 2017-05-10 09:55:28 | 0
   | a3 | b | c2 |       | 2017-05-10 10:12:54 |
 2 | a2 |   | c3 | 2     | 2017-05-10 10:19:47 | 62
   | a2 | b | c4 |       | 2017-05-10 10:20:24 |
   | a2 | b | c5 |       | 2017-05-10 10:21:50 |
 3 | a3 |   | c6 | 1     | 2017-05-10 10:31:02 | 1088
   | a3 | c | c7 |       | 2017-05-10 10:31:02 |

可以根据需要向上或向下舍入秒的小数部分。

【问题讨论】:

    标签: powerquery


    【解决方案1】:

    尝试

    let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Added Index" = Table.AddIndexColumn(Source, "Index2", 0, 1, Int64.Type),
    #"Changed Type" = Table.TransformColumnTypes(#"Added Index",{{"ID", Int64.Type}, {"A", type text}, {"B", type text}, {"C", type text}, {"COUNT", Int64.Type}, {"Timestamp", type datetime}}),
    #"Filtered Rows" = Table.SelectRows(#"Changed Type", each ([ID] <> null)),
    #"Removed Other Columns" = Table.SelectColumns(#"Filtered Rows",{"ID", "A"}),
    #"Added Custom" = Table.AddColumn(#"Removed Other Columns", "Custom",  (x)=>Table.SelectRows(#"Changed Type", each [A]=x[A])),
    #"Added Custom2" = Table.AddColumn(#"Added Custom","AVG_TIME_DIFF2", each
        let a= Table.Sort([Custom],{{"Timestamp", Order.Ascending}}),
        b=  Table.AddIndexColumn(a, "Index", 0, 1, Int64.Type),
        c = Table.AddColumn(b, "Custom", each b{[Index]-1}[Timestamp]),
        d = Table.AddColumn(c, "Times", each [Timestamp]-[Custom],type duration),
        e = Table.Skip(d,1),
        f = List.Average(e[Times])
        in f, type duration),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom2",{"ID", "A"}),
    #"Expanded Custom" = Table.ExpandTableColumn(#"Removed Columns", "Custom", {"ID", "A", "B", "C", "COUNT", "Timestamp", "Index2"}, {"ID", "A", "B", "C", "COUNT", "Timestamp", "Index2"}),
    #"Sorted Rows" = Table.Sort(#"Expanded Custom",{{"Index2", Order.Ascending}}),
    #"Added Custom1" = Table.AddColumn(#"Sorted Rows", "AVG_TIME_DIFF", each if [ID]=null then null else if [AVG_TIME_DIFF2]=null then 0 else Duration.TotalSeconds([AVG_TIME_DIFF2]),type number),
    #"Removed Columns1" = Table.RemoveColumns(#"Added Custom1",{"AVG_TIME_DIFF2"}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Removed Columns1",{{"Timestamp", type datetime}})
    

    在 #“改变类型1”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多