在 Power Query 中调用 Power BI API
Posted
技术标签:
【中文标题】在 Power Query 中调用 Power BI API【英文标题】:Call Power BI API in Power Query 【发布时间】:2021-05-28 20:31:12 【问题描述】:我正在尝试从 Power BI API 服务中检索数据,而这也是通过 PowerShell 代码完成的。但不幸的是,由于某些情况,我无法在生产中部署它。因此,现在我试图在 Power BI 桌面本身中完成相同的事情,以便我只能从 Power Query 调用 Power BI rest API。有大量关于在电源查询中调用 API 的博文,但它们都需要 Power BI App 注册的客户端 ID。我没有。我可以在 PowerShell 中使用我的用户名密码成功调用,甚至得到 API 的响应。
请在下面找到 PowerShell 代码,如果我们可以在 Power Query 中复制相同的代码,请告诉我。
# User credential
$User = 'shahab***@*****.com'
$Pword = ConvertTo-SecureString –String '***password***' –AsPlainText -Force
$Credential = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $User,$Pword
# Connect to service
Login-PowerBIServiceAccount -Credential $Credential
#Get Bearer token
$headers = Get-PowerBIAccessToken
$uri = 'https://api.powerbi.com/v1.0/myorg/datasets/f52f2abc-6445-41ee-ce02-3908c6e18dd4/refreshes'
$refreshes = Invoke-RestMethod -Uri $uri -Headers $headers -Method GET
$xs= $refreshes
谢谢。
【问题讨论】:
我很困惑。您有一个来自 powershell 的表,但您无法将结果部署到生产中?评估 powerquery 时是 you trying to refresh a dataset 吗? -- Power Query 在 REST API 上不是很好,由于隔离查询和查询编辑器预览,它调用端点的次数比您想象的要多。 -- 这似乎是一个 XY 问题,还有其他选择,但我并不完全清楚你在做什么。 嗨@ninMonkey 感谢您的回复。我正在尝试从 Power BI 服务获取数据,并且正在使用 GET 方法。这是在 PowerShell 中完成的,我们也能够成功检索记录。我想在 Power Query 中使用 M 语言做同样的事情 【参考方案1】:有了包装器,你想要这样的东西。
WebRequest_Simple(
"https://api.powerbi.com",
"v1.0/myorg/datasets/f52f2abc-6445-41ee-ce02-3908c6e18dd4/refreshes",
[
Headers = [ Authorization = "Bearer OAuthTokenHere" ]
]
)
如果 url 有一个查询字符串(?
之后的部分),那么您将使用 options[Query]
网络响应
完整查询
来源:WebRequest_Simple.pq
let
/*
Wrapper for Web.Contents returns response metadata
for options, see: <https://docs.microsoft.com/en-us/powerquery-m/web-contents#__toc360793395>
*/
WebRequest_Simple
= (
base_url as text,
optional relative_path as nullable text,
optional options as nullable record
)
as record =>
let
headers = options[Headers]?, //or: ?? [ Accept = "application/json" ],
merged_options = [
Query = options[Query]?,
RelativePath = relative_path,
ManualStatusHandling = options[ManualStatusHandling]? ?? 400, 404 ,
Headers = headers
],
bytes = Web.Contents(base_url, merged_options),
response = Binary.Buffer(bytes),
response_metadata = Value.Metadata( bytes ),
status_code = response_metadata[Response.Status]?,
json = Json.Document(response),
Final = [
request_url = metadata[Content.Uri](),
status_code = status_code,
metadata = response_metadata,
IsJson = not (try json)[HasError],
response = response,
json = json
]
in
Final,
tests =
WebRequest_Simple("https://httpbin.org", "json"), // expect: json
WebRequest_Simple("https://www.google.com"), // expect: html
WebRequest_Simple(
"https://api.powerbi.com",
"v1.0/myorg/datasets/f52f2abc-6445-41ee-ce02-3908c6e18dd4/refreshes",
[
Headers = [ Authorization = "Bearer OAuthTokenHere" ]
]
)
,
FinalResults = Table.FromRecords(tests,
type table[
status_code = text, request_url = text, metadata = record,
response = binary, IsJson = logical, json = any],
MissingField.Error
)
in
FinalResults
【讨论】:
以上是关于在 Power Query 中调用 Power BI API的主要内容,如果未能解决你的问题,请参考以下文章