PowerBI API如何按数据集单独更新数据源凭据?
可以通过Power BI API实现单个数据集的数据源凭据更新
你提到的/groups/{groupId}/datasets/{datasetKey}/updatedatasources端点其实支持传入凭据,只需在请求体中正确构造credentialDetails参数即可。这个操作仅作用于指定数据集,不会影响其他共享同一数据源的数据集,和UI操作效果完全一致。
具体实现步骤
获取目标数据集的数据源ID
先调用GET https://api.powerbi.com/v1.0/myorg/groups/{groupId}/datasets/{datasetKey}/datasources获取该数据集关联的数据源信息,提取其中的datasourceId。构造更新请求
使用POST请求调用/groups/{groupId}/datasets/{datasetKey}/updatedatasources,请求体中包含updateDetails数组,指定要更新的数据源ID和新凭据信息。示例请求体(以Basic认证的数据源为例):
{ "updateDetails": [ { "datasourceId": "你的数据源ID", "credentialDetails": { "credentialType": "Basic", "credentials": "{\"username\":\"新用户名\",\"password\":\"新密码\"}", "encryptedConnection": "Encrypted", "encryptionAlgorithm": "None" } } ] }.NET SDK调用方式
若使用Power BI .NET SDK,不要用Gateways.UpdateDatasourceAsync,而是使用Datasets.UpdateDatasourcesAsync方法,传入包含CredentialDetails的请求对象。示例代码片段:var updateRequest = new UpdateDatasourcesRequest { UpdateDetails = new List<UpdateDatasourceDetails> { new UpdateDatasourceDetails { DatasourceId = "你的数据源ID", CredentialDetails = new CredentialDetails { CredentialType = CredentialType.Basic, Credentials = "{\"username\":\"新用户名\",\"password\":\"新密码\"}", EncryptedConnection = EncryptedConnection.Encrypted, EncryptionAlgorithm = EncryptionAlgorithm.None } } } }; await pbiClient.Datasets.UpdateDatasourcesAsync(groupId, datasetKey, updateRequest);
关键注意事项
- 凭据格式需匹配数据源类型:比如Windows认证的
credentials格式为{"username":"域\\用户名","password":"密码"},OAuth类型需传入对应令牌参数。 - 该操作仅修改指定数据集与数据源的绑定凭据,网关级的数据源凭据不会被改变,因此其他共享同一网关数据源的数据集不受影响。
- 无需网关的云数据源(如Azure SQL、Salesforce),该API同样适用。
内容的提问来源于stack exchange,提问作者Nick Langridge
相关产品推荐
相关产品推荐

