在Excel Power Query中添加唯一索引

时间:2016-11-27 08:20:58

标签: excel powerquery

我有一张类似

的表格
  Date
  9/4/2016
  9/11/2016
  9/18/2016
  9/25/2016
  10/2/2016
  10/9/2016
  10/16/2016
  10/23/2016
  10/30/2016
  11/6/2016
  11/13/2016
  11/20/2016
  11/20/2016

我尝试将唯一索引值分配到“日期列”'但是无法使用“添加自定义索引值”'在电源查询中没有检查重复。我也试过" Date.WeekOfYear"它给出了基于年份的数字,但我想为1到....分配唯一的数字,例如

  Date        Custom_weeknumber
  9/4/2016       1
  9/11/2016      2
  9/18/2016      3
  9/25/2016      4
  10/2/2016      5
  10/9/2016      6
  10/16/2016     7
  10/23/2016     8
  10/30/2016     9
  11/6/2016      10
  11/13/2016     11
  11/20/2016     12
  11/20/2016     12

任何帮助都会有所帮助,谢谢!

2 个答案:

答案 0 :(得分:2)

假设:

  1. 您的日期已经过排序。

  2. 重复后的行将从重复项+ 1中获取Custom_weeknumber。

  3. 然后您可以按日期分组(使用新列名称,例如“DateGroups”和Oparation“All Rows”),添加索引列,展开“DateGroups”字段并删除“DateGroups”字段。

    在Excel中的Power Query中创建的代码示例:

    let
        Source = Excel.CurrentWorkbook(){[Name="Dates"]}[Content],
        Typed = Table.TransformColumnTypes(Source,{{"Date", type date}}),
        Grouped = Table.Group(Typed, {"Date"}, {{"DateGroups", each _, type table}}),
        Numbered = Table.AddIndexColumn(Grouped, "Custom_weeknumber", 1, 1),
        Expanded = Table.ExpandTableColumn(Numbered, "DateGroups", {"Date"}, {"DateGroups"}),
        Removed = Table.RemoveColumns(Expanded,{"DateGroups"})
    in
        Removed
    

答案 1 :(得分:1)

我这样做(在我看来有点简单,除非绝对需要,否则我不喜欢嵌套表):

  1. 按日期分组列
  2. 可选:排序
  3. 添加索引
  4. 加入源表
  5. 代码:

        let
            //Source = Excel.CurrentWorkbook(){[Name="YourTableName"]}[Content],
            Source = #table(type table [Date = date], {{#date(2016, 10, 12)}, {#date(2016, 10, 13)}, {#date(2016,10,14)}, {#date(2016, 10, 14)}}),
            GroupBy = Table.RemoveColumns(Table.Group(Source, "Date", {"tmp", each null, type any}), {"tmp"}),
            //Optional: sort to ensure values are ordered
            Sort = Table.Sort(GroupBy,{{"Date", Order.Ascending}}),
            Index = Table.AddIndexColumn(Sort, "Custom_weeknumber", 1, 1),
            JoinTables = Table.Join(Source, {"Date"}, Index, {"Date"}, JoinKind.Inner)
        in
            JoinTables