json - 有没有办法使用 Power Query 获取具有 Power BI 的许多 API 密钥的 API 数据?
问题描述
请参阅下面的解决方案!
我必须从一个具有多个 API 密钥的 API 获取数据到 PowerBI。每个 Key 都可以让我从组织的不同分支获取数据。数据结构始终相同。因为我有数十个 API 密钥,所以我想用 Power Query 来做这件事。经过几个小时的谷歌搜索,我的大脑过热了:)。
我拥有的是 API URL 和 API 密钥列表。没有分页。我可以毫无问题地使用一个 API 密钥获取数据。
我想做什么:
- 就是从list中获取一个API key,作为变量放入Json-call(Json.Document)中
- 获取 Json 并将其加入到先前的(如果存在)
- 只要列表中有 API 密钥,就迭代它
- 将 Json 放到一张桌子上
结果将有一个表,其中包含来自所有组织分支的数据。
我设法发现这可以使用 List.Generate -function 来完成,但我被困在那里。
let
KeyList = {"abcd1234","bcde1234","defg1234"}, //list of API Keys
Source = "https://something.com/api/v1/" & "Items", // API URL
Position = 0, // Starting position for API Key list
GetJson =
(Source, Position) as record =>
let
ApiData = Json.Document(Web.Contents(Source, [Headers=[#"X-API-Key"=KeyList{Position}]]))
in
ApiData,
AllJson =
List.Generate (
() => [i=0, Fetch = GetJson(Source,Position)],
each [i]<=List.Count(KeyList),
each [i=[i]+1, Fetch = GetJson([Source][i])],
each [Fetch]
),
Table = Table.FromList(AllJson, Splitter.SplitByNothing(), null, null, ExtraValues.Error)
in
Table
这个 Power Query 没有给出任何语法错误,但它的逻辑有问题。它产生了一个包含四个错误的列表,其中第一个表示将列表转换为记录时遇到问题,其余三个是关于找不到字段 Source。
抱歉,我不能提供真正的 API 网址和密钥。
有任何想法吗?提前致谢!
在 Dreekun 的帮助下,我设法解决了这个问题。如果有人感兴趣,我会将更正后的“代码”放在下面。
let
KeyList = {"abcd1234","bcde1234","defg1234"}, //list of API Keys
Position = 0, // Starting position for API Key list
GetJson =
(Position) =>
let
ApiData = Json.Document(Web.Contents("https://something.com/api/v1/" & "Items", [Headers=[#"X-API-Key"=KeyList{Position}]]))
in
ApiData,
AllJson =
List.Generate (
() => [i=1, Fetch = GetJson(Position)], // Note that counter i starts as 1, otherwise first key will be fetched twice
each [i]<=List.Count(KeyList), // repeat until counter i is equal or greater than the length of key list
each [i=[i]+1, Fetch = GetJson([i])] // add one to counter and fetch json data
),
Table = Table.FromList(AllJson, Splitter.SplitByNothing(), null, null, ExtraValues.Error)
in
Table
再次感谢 Dreekun 的帮助!!在这个例子中,有 3 个 API 密钥,但在现实生活中我有超过 50 个,所以这很有帮助!
解决方案
推荐阅读
- scala - Scala 继承类型不满足父类型要求
- python - 不要在特定日期运行 Autosys 作业
- python - 从两个字符串列中提取 YYYY 年份并将其放入新列中,保留 NaN 值
- node.js - 如何在 Google Chat API 中添加带有复选框的选项
- android - 在android中将布局转换为图像是什么意思
- javascript - 每次添加产品时增加 totalAmount
- lotus-notes - LotusScript:getItemValue("Body") 将段落分成几行
- java - 如何根据下拉列表的输入显示或隐藏输入窗口
- python - 如何根据python中的距离选择由点创建的一些线
- string - VB.Net For 循环需要很长时间