功率查询循环



我使用Power Query提取过去一个月测试的所有唯一项目类型:

let
  Source = Sql.Database("XXX", "YYY"),
  dbo_tblTest = Source{[Schema="dbo",Item="tblTest"]}[Data],
  #"Filtered Rows" = Table.SelectRows(dbo_tblTest, each Date.IsInPreviousNMonths([Test_Stop], 1)),
  #"Added Custom" = Table.AddColumn(#"Filtered Rows", "Custom", each Text.Start([Item],5)),
  #"Removed Duplicates" = Table.Distinct(#"Added Custom", {"Custom"})
in
  #"Removed Duplicates"

:

  1. Test_ID—Item—Test_Start—Test_Stop—Custom
  2. 2585048——B1846-6-02 1/14/2014 46——6/25/2015 28 B1846
  3. 2589879—b1843 -5-05—12/23/2013 16:46—6/25/2015 14:19—b1843
  4. 2633483——B1907-1-04 8/21/2014 20:47——6/10/2015 6:20 B1907
  5. 2638786——B1361-2-04 6/13/2013 14:21——6/16/2015福音14:15 B1361
  6. 2675663——B1345-2-02 5/23/2014 18:39——6/25/2015福音21:27 B1345

接下来,我想使用Power Query为Query1中列出的每个项目类型提取过去10个测试,而不考虑时间段。我弄清楚了如何分别为项目类型提取过去的10个测试,但不是在一个查询中全部放在一起。

let
    Source = Sql.Database("XXX", "YYY"),
    dbo_tblTest = Source{[Schema="dbo",Item="tblTest"]}[Data],
    #"Filtered Rows" = Table.SelectRows(dbo_tblTest, each Text.StartsWith([Item], "B1846")),
    #"Sorted Rows" = Table.Sort(#"Filtered Rows",{{"Test_Stop", Order.Descending}}),
    #"Kept First Rows" = Table.FirstN(#"Sorted Rows",10)
in
    #"Kept First Rows"

:

  1. Test_ID——项目——Test_Start Test_Stop价值
  2. 11717643—b1846—6-02—7/23/2015 12:48—7/23/2015 12:57—43725341
  3. 11716432—b1846-1-21—7/23/2015 10:23—7/23/2015 10:29—43724705
  4. 11715802—b1846-1-21—7/23/2015 9:28—7/23/2015 10:29—43724720
  5. 11715505—b1846-1-21—2015年7月23日8:59—2015年7月23日9:06—43724675
  6. 11715424—b1846-1-21—2015年7月23日8:36—2015年7月23日8:59—43724690
  7. 11713680—b1846-1-55—7/23/2015 5:50—7/23/2015 6:07—43725239
  8. 11691169—b1846—6-04—2015年7月20日22:47—2015年7月22日20:18—43642835
  9. 11690466—b1846-6-04—2015年7月20日21:30—2015年7月22日18:41—43642729
  10. 11701183—b1846-1-140—7/21/2015 21:34—7/21/2015 22:24—43667358
  11. 11701184—b1846-6-04—7/21/2013 20:35—7/21/2015 20:46—43667359

是否可以使用Power Query在一个查询中提取所有需要的数据?如果没有,是否可以使用VBA与电源查询来完成?

在Power Query中,如果您正在考虑如何循环,您通常会发现一个高阶库函数,它正好可以满足您的要求。在本例中,它是分组。

分组通过某个键拆分表,在本例中是第一个表的Custom列。您可以将"keep past 10"逻辑重写为使用Table.TransformColumns在每个分组表中应用的函数,然后将分组表扩展回一个平面表。

你的查询应该是这样的:

let
  Source = Sql.Database("XXX", "YYY"),
  dbo_tblTest = Source{[Schema="dbo",Item="tblTest"]}[Data],
  #"Added Custom" = Table.AddColumn(dbo_tblTest, "Custom", each Text.Start([Item],5)),
  #"Grouped Rows" = Table.Group(#"Added Custom", {"Custom"}, {{"Grouped", each _, type table}}),
  Custom2 = Table.TransformColumns(#"Grouped Rows", {{"Grouped", (groupedTable) =>
      let
          #"Sorted Rows" = Table.Sort(groupedTable,{{"Test_Stop", Order.Descending}}),
          #"Kept First Rows" = Table.FirstN(#"Sorted Rows",10)
      in
          #"Kept First Rows"}}),
  #"Removed Other Columns1" = Table.SelectColumns(Custom2,{"Grouped"}),
  #"Expanded Grouped" = Table.ExpandTableColumn(#"Removed Other Columns1", "Grouped", Table.ColumnNames(#"Added Custom"))
in
  #"Expanded Grouped"

最新更新