我使用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"
:
- Test_ID—Item—Test_Start—Test_Stop—Custom
- 2585048——B1846-6-02 1/14/2014 46——6/25/2015 28 B1846
- 2589879—b1843 -5-05—12/23/2013 16:46—6/25/2015 14:19—b1843
- 2633483——B1907-1-04 8/21/2014 20:47——6/10/2015 6:20 B1907
- 2638786——B1361-2-04 6/13/2013 14:21——6/16/2015福音14:15 B1361
- 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"
:
- Test_ID——项目——Test_Start Test_Stop价值
- 11717643—b1846—6-02—7/23/2015 12:48—7/23/2015 12:57—43725341
- 11716432—b1846-1-21—7/23/2015 10:23—7/23/2015 10:29—43724705
- 11715802—b1846-1-21—7/23/2015 9:28—7/23/2015 10:29—43724720
- 11715505—b1846-1-21—2015年7月23日8:59—2015年7月23日9:06—43724675
- 11715424—b1846-1-21—2015年7月23日8:36—2015年7月23日8:59—43724690
- 11713680—b1846-1-55—7/23/2015 5:50—7/23/2015 6:07—43725239
- 11691169—b1846—6-04—2015年7月20日22:47—2015年7月22日20:18—43642835
- 11690466—b1846-6-04—2015年7月20日21:30—2015年7月22日18:41—43642729
- 11701183—b1846-1-140—7/21/2015 21:34—7/21/2015 22:24—43667358
- 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"