【问题标题】:Power Query / Power BI increment data at each occurrences with specific rangesPower Query / Power BI 在每次出现时以特定范围递增数据
【发布时间】:2020-10-30 20:31:32
【问题描述】:

我正在尝试将来自两个不同工作簿的工作表与 Power Query 结合起来,但我遇到了麻烦。

考虑到另一个工作簿中出现的值,我不想增加一个工作簿中的“ID”列。

ID 列包含带有字母标签的行:AB 或 BE。在这些字母之后,将关联特定的数字范围。对于 AB 和 BE,数字范围首先从 0000 到 3000,从 3000 到 6000,然后从 6001 到 8000 和 8001 到 9999。

因此我有以下几种可能:

  • 从 AB0000 到 AB3000

  • 从 AB3001 到 AB6000

  • 从 AB6001 到 AB8000

  • 从 AB8001 到 AB9999

  • 从BE0000到BE3000

  • 从 BE3001 到 AB6000

  • 从 BE6001 到 BE8000

  • 从 BE8001 到 AB9999

每个类别都与我的地理专栏中的特定项目相匹配,来自其他工作簿:

  • 从AB0000到AB3000,是ItalyZ ABC

  • 从 AB3001 到 AB6000 是意大利 B BDE

  • 从 AB6001 到 AB8000 是 ItalyZ ABC

  • 从 AB8001 到 AB9999 是意大利 B BDE

  • 从 BE0000 到 BE3000 是 UKM ABC

  • 从 BE3001 到 AB6000 是 UKY BDE

  • 从 BE6001 到 BE8000 是 UKM ABC

  • 从 BE8001 到 AB9999 是 UKY BDE

因此,我试图找到与第一个 AB 类别、第二个 AB 类别、第一个 BE 类别和第二个相关联的最高数字。

然后,我想在另一个查询中“带入”这个数字,并在每次在另一个工作簿中找到匹配的国家/地区时递增它。例如:

AB356 是第一个工作簿中的最高数字。

一旦找到第一个“ItalyB”,该列除写“AB357”。一旦找到第二个是“ItalyB”,除写“AB358”之外的列。

假设在我得到的第一个文件中,我有以下数据:

  |---------------------|    
  |       Test          |          
  |---------------------|
  |      AB0000         |          
  |---------------------|
  |      AB0001         |            
  |---------------------|
  |      AB3034         |    
  |---------------------|
  |     AB3035          |    
  |---------------------|
  |      AB6005         |    
  |---------------------|
  |      AB6006         |    
  |---------------------|
  |        AB8011       |    
  |---------------------|
  |       AB8012        |    
  |---------------------|
  |       BE0000        |    
  |---------------------|
  |      BE0001         |    
  |---------------------|
  |      BE3091         |    
  |---------------------|
  |      BE3092         |    
  |---------------------|
  |      BE6001         |    
  |---------------------|
  |        BE6002       |    
  |---------------------|
  |      BE6003         |    
  |---------------------|
  |       BE8104        |    
  |---------------------|
  |       BE8105        |    
  |---------------------|
 

还有第二个文件如下:

  |---------------------|
  |     ItalyZ ABC      |    
  |---------------------|
  |      ItalyZ ABC     |    
  |---------------------|
  |      ItalyB BDE     |    
  |---------------------|
  |        ItalyZ ABC   |    
  |---------------------|
  |       ItalyB BDE    |    
  |---------------------|
  |      UKM ABC        |    
  |---------------------|
  |      UKY BDE        |    
  |---------------------|
  |     UKM ABC         |    
  |---------------------|
  |       UKY BDE       |    
  |---------------------|
  |       UKY BDE       |    
  |---------------------|
  |        UKY BDE      |    
  |---------------------|
  |       UKY BDE       |    
  |---------------------|

那么我的结果如下:

      |---------------------|    
      |       Test          |          
      |---------------------|
      |      AB0002         |          
      |---------------------|
      |      AB0003         |            
      |---------------------|
      |      AB3036         |    
      |---------------------|
      |      AB6007         |    
      |---------------------|
      |        AB8013       |    
      |---------------------|
      |      BE0002         |    
      |---------------------|
      |      BE3091         |    
      |---------------------|
      |      BE3093         |    
      |---------------------|
      |      BE6004         |    
      |---------------------|
      |       BE8105        |    
      |---------------------|
      |       BE8106        |    
      |---------------------|
      |       BE8107        |    
      |---------------------|
      |       BE8108        |    
      |---------------------|

我试图通过添加类别来调整其范围更有限的查询,因此我有如下查询:

let
    Source = #table({"Prefix", "Seq_Start", "Seq_End","Zone"},
{{"AB",0,2999,"UKM BDE"}, {"AB",3000,4999,"UKM ABC"}, {"AB",5000,7999,"UKY BDE"}, {"AB",8000,9999,"UKY ABC"},{"BE",0,2999,"ITALYZ BDE"},{"BE",3000,4999,"ITALYZ ABC"}, {"BE",5000,7999,"ITALYB BDE"}, {"BE",8000,9999,"ITALYB ABC"}}),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Seq_Start", Int64.Type}, {"Seq_End", Int64.Type}}),
    #"Merged Queries" = Table.NestedJoin(#"Changed Type", {"Prefix"}, #"Source data with occurence", {"Unique key Prefix"}, "Source data with occurence", JoinKind.LeftOuter),
    #"Expanded Source data with occurence " = Table.ExpandTableColumn(#"Merged Queries", "Source data with occurence", {"Number"}, {"Number"}),
    #"Filtered Rows" = Table.SelectRows(#"Expanded Source data with occurence ", each [Number] >= [Seq_Start] and [Number] <= [Seq_End]), 
    #"Grouped Rows" = Table.Group(#"Filtered Rows", {"Prefix", "Seq_Start", "Seq_End", "Zone"}, {{"NextSeq", each List.Max([Number]) + 1, type number}})
in
    #"Grouped Rows"

【问题讨论】:

  • 你能模拟一张你的最终结果应该是什么样子的表格吗?
  • 嗨,我添加了元素,包括最终结果。
  • 我的一个主要问题是,如果我的“记录”以零个观测值(甚至一个)开始,例如 UKY BDE,计数将从 0 或 1 开始,而不是从首次观测UKY BDE的“5000”和“5001”。

标签: indexing powerbi increment powerquery m


【解决方案1】:

您的查询显示“Table.Group”

您是否尝试合并这两个表?我更喜欢“结合并创造新的”。

Table-1 和 Table-2 的标题不同,首先我将它们均衡化。如图中所示。然后合并并创建新表。这是代码部分;

let
    Kaynak = Table.Combine({#"Puantaj CkrEng", #"Puantaj Genel"}),
    #"Filtrelenen Satırlar" = Table.SelectRows(Kaynak, each ([Firma] <> null)),
    #"Yeniden Sıralanan Sütunlar" = Table.ReorderColumns(#"Filtrelenen Satırlar",{"Firma", "Resource ID", "Görev", "Tarih", "Yevmiye", "HaftaBasi"})
in
    #"Yeniden Sıralanan Sütunlar"

【讨论】:

  • 您能否提供更多详细信息?您的意思是:“Table.Combine(tables as list, optional columns as any) as table”?
  • 编辑了我的答案并尝试用我最好的@TomasMichel 解释
  • 嗨,谢谢,我去看看!但我很难将它应用于我的问题!非常感谢!我可以看到你的桌子也需要填充!这很有趣。我想知道一个应该是“3068”还是“68”@bibakcamki
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多