我的问题:
通过New Query -> From Other Sources -> From Web
,我输入了一个静态网址,允许我以JSON格式从网页加载大约60k“ID”。
现在我需要从依赖于ID的动态URL导入信息。
所以我需要以这种形式从URL导入:
http://www.example.com/xxx/xxxx/ID
经过研究,我得出的结论是,我必须使用查询编辑器中的“高级编辑器”来引用ID查询选项卡。
我试过了:
let
Source = Json.Document(Web.Contents("https://example.com/xx/xxxx/" & ID)),
name1 = Source[name]
in
name1
这会返回错误。
我认为这是因为我无法添加字符串和列。
问题:如何引用我感兴趣的单元格的值并将其添加到我的字符串中?
问题:我正在做什么?
问题: Excel如何处理加载60k查询?
问题:是否可以通过一个查询从60k个不同的网址加载信息?
编辑:非常感谢Alexis的回答,非常乐于助人。所以为了避免复制你发布的内容,我没有使用该功能(告诉我你的想法):
let
Source = Json.Document(Web.Contents("https://example.com/all-ID.json")),
items1 = Source[items],
#"Converted to Table" = Table.FromList(items1, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Renamed Columns" = Table.RenameColumns(#"Converted to Table",{{"Column1", "ID"}}),
#"Inserted Merged Column" = Table.AddColumn(#"Renamed Columns", "URL", each Text.Combine({"http://example.com/api/item/", Text.From([ID], "fr-FR")}), type text),
#"Added Custom" = Table.AddColumn(#"Inserted Merged Column", "Item", each Json.Document(Web.Contents([URL]))),
#"Expanded Item" = Table.ExpandRecordColumn(#"Added Custom", "Item", {"name"}, {"Item.name"})
in
#"Expanded Item"
现在我遇到的问题是,从所有网址加载我需要的所有信息需要很长时间。
事实证明,可以使用以下格式从多个 ID中提取:http://example.com/api/item/ID1,ID2,ID3,ID4,...,IDN
我认为尝试从包含所有ID的URL加载一次就不会有效,因为URL会包含太多要处理的字符。
所以为了加快速度,我现在要做的就是将每个第N行连接成一个单元格,例如N = 3:
205
651
320165
63156
4645
31
6351
561
561
31
35
会变成:
205, 651, 320165
63156, 4645, 31
6351, 561, 561
31, 35
“分组依据”功能似乎不是我想要的,我不知道如何通过Power Query自动化
编辑2
经过大量测试后我找到了一个解决方案,即使它可能不是最优雅和最优的:
这是N = 10 000的代码:
let
Source = Json.Document(Web.Contents("https://example.com/items.json")),
items1 = Source[items],
#"Converted to Table" = Table.FromList(items1, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Renamed Columns" = Table.RenameColumns(#"Converted to Table",{{"Column1", "ID"}}),
#"Changed Type" = Table.TransformColumnTypes(#"Renamed Columns",{{"ID", Int64.Type}}),
#"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1),
#"Added Conditional Column" = Table.AddColumn(#"Added Index", "Custom", each if Number.RoundDown([Index]/10000) = [Index]/10000 then [Index] else Number.IntegerDivide([Index],10000)*10000),
#"Reordered Columns" = Table.ReorderColumns(#"Added Conditional Column",{"Index", "ID", "Custom"}),
#"Grouped Rows" = Table.Group(#"Reordered Columns", {"Custom"}, {{"Count", each _, type table}}),
#"Added Custom" = Table.AddColumn(#"Grouped Rows", "Custom.1", each [Count][ID]),
#"Extracted Values" = Table.TransformColumns(#"Added Custom", {"Custom.1", each Text.Combine(List.Transform(_, Text.From), ","), type text})
in
#"Extracted Values"
答案 0 :(得分:0)
我认为你想要做的是创建一个你用每个ID值调用的自定义函数。
让我举一个类似的例子,指出你正确的方向。
假设我有一个名为DELETE FROM users WHERE id = 25
的表,如下所示:
ListIDs
对于每个ID,我想从维基百科中提取一些信息(例如ID = 6我想查找mailgun API并返回6的红衣主教,序数,因子分解和除数。)
要仅为一个ID值获取此值,我的查询将如下所示(再次使用6):
ID
----
1
2
3
4
5
6
7
8
9
10
现在我们想将它转换为一个函数,以便我们可以根据需要多次使用它而无需创建一堆查询。 (注意:我也将此查询/函数命名为WikiLookUp。)为此,请将其更改为以下内容:
let
Source = Web.Page(Web.Contents("https://en.wikipedia.org/wiki/6")),
Data0 = Source{0}[Data],
#"Changed Type" = Table.TransformColumnTypes(Data0,{{"Column1", type text}, {"Column2", type text}, {"Column3", type text}}),
#"Filtered Rows" = Table.SelectRows(#"Changed Type", each ([Column2] = "Cardinal" or [Column2] = "Divisors" or [Column2] = "Factorization" or [Column2] = "Ordinal")),
#"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"Column1"}),
#"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Column2", "Property"}, {"Column3", "Value"}}),
#"Pivoted Column" = Table.Pivot(#"Renamed Columns", List.Distinct(#"Renamed Columns"[Property]), "Property", "Value")
in
#"Pivoted Column"
请注意,我们所做的只是将其包装在另一组let
WikiLookUp = (ID as text) =>
let
Source = Web.Page(Web.Contents("https://en.wikipedia.org/wiki/" & ID)),
Data0 = Source{0}[Data],
#"Changed Type" = Table.TransformColumnTypes(Data0,{{"Column1", type text}, {"Column2", type text}, {"Column3", type text}}),
#"Filtered Rows" = Table.SelectRows(#"Changed Type", each ([Column2] = "Cardinal" or [Column2] = "Divisors" or [Column2] = "Factorization" or [Column2] = "Ordinal")),
#"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"Column1"}),
#"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Column2", "Property"}, {"Column3", "Value"}}),
#"Pivoted Column" = Table.Pivot(#"Renamed Columns", List.Distinct(#"Renamed Columns"[Property]), "Property", "Value")
in
#"Pivoted Column"
in
WikiLookUp
中,并定义参数let...in
,该参数将被替换为接近结尾的ID = text
行。该功能应如下所示:
https://en.wikipedia.org/wiki/6
现在我们可以回到我们已导入查询编辑器的表中,并在自定义列中调用我们新创建的函数。 (注意:请确保首先将ID值转换为文本类型,因为它们会被附加到URL。)
使用以下定义添加自定义列(或使用“调用自定义函数”按钮)
Source
展开该列以引入您想要的所有列,然后就完成了!
以下是该查询的M代码:
= WikiLookUp([ID])
查询应如下所示: