首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过API更新数据源

如何通过API更新数据源
EN

Stack Overflow用户
提问于 2019-10-23 08:51:43
回答 3查看 3K关注 0票数 1

我使用powershell powerbi管理库和rest的混合来更新数据源。(如这里所记录的- https://learn.microsoft.com/en-us/rest/api/power-bi/datasets/updatedatasourcesingroup#datasourceconnectiondetails)

https://api.powerbi.com/v1.0/myorg/groups/{0}/datasets/{1}/Default.UpdateDatasources更新数据源。我将传入{0}的工作区id和{1}的dataset ID。

代码语言:javascript
复制
$datasets = Get-PowerBIDataset -WorkspaceId $workspaceObj.Id
foreach($dataset in $datasets)
{
    $DatasetId = $dataset.Id.Guid

    $json = 
@'
{{
    "updateDetails": [{{
            "datasourceSelector": {{
                "datasourceType": "AnalysisServices",
                "connectionDetails": {{
                    "server": "{0}",
                    "database": "{1}"
                }}
            }},
            "connectionDetails": {{
                "server": "{0}",
                "database": "{1}"
            }}
        }}
    ]
}}
'@
    $json = [string]::Format($json, $AasServer, $modelName)
    $apiDatasetUrl = [string]::Format('https://api.powerbi.com/v1.0/myorg/groups/{0}/datasets/{1}/Default.UpdateDatasources',$workspaceObj.Id , $DatasetId)
    Invoke-RestMethod -Headers $headers  -Method 'Post' -Body $json -Uri $apiDatasetUrl -ContentType 'application/json'
}

这将导致404错误:

找不到Dataset {guid}

我做错了什么?当guid来自Power时,我无法理解如何找不到数据集。

我也尝试过将"datasourceId“和"gatewayId”包含在json体内,但这没有效果。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-10-29 14:49:03

这个错误实际上发生在我的JSON中,第一个connectionDetails是现有数据源的精确规范。第二个connectionDetails包含要更新的详细信息。更正见下文(大写)

代码语言:javascript
复制
    $json = 
@'
{{
    "updateDetails": [{{
            "datasourceSelector": {{
                "datasourceType": "AnalysisServices",
                "connectionDetails": {{
                    "server": "MY-OLD-SERVER-NAME",
                    "database": "MY-OLD-MODEL-NAME"
                }},
      "datasourceId": "{2}",
      "gatewayId": "{3}"
            }},
            "connectionDetails": {{
                "server": "{0}",
                "database": "{1}"
            }}
        }}
    ]
}}
票数 1
EN

Stack Overflow用户

发布于 2019-10-23 10:02:38

您正在使用数据集-获取数据源

代码语言:javascript
复制
$getUrl = [string]::Format('https://api.powerbi.com/v1.0/myorg/datasets/{0}/datasources',$DatasetId)

虽然(因为您从某个工作区$datasets = Get-PowerBIDataset -WorkspaceId $workspaceObj.Id获取数据集),您应该使用数据集-获取组中的数据源,端点URL应该如下所示:

代码语言:javascript
复制
https://api.powerbi.com/v1.0/myorg/groups/{groupId}/datasets/{datasetId}/datasources

也就是说,您还必须提供组(工作区) ID。

票数 1
EN

Stack Overflow用户

发布于 2019-10-29 12:34:40

我做了一个类似的项目( project + rest),并遇到了与您类似的问题。

您如何连接到API?通过使用服务主体,您只能使用您可以进行的api调用(MS没有很好地记录这种调用)。

在我看来,"404 not“似乎没有授权您对数据集进行更改。您可以尝试以用户身份使用login登录,并查看是否得到了不同的响应。

您最好的调试选项是:运行cmdlet 解决-PowerBIError -Last以获得有关错误的更多细节,或者使用Fiddler这样的工具来查看API的响应。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58518997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档