如何通过 API 更新数据源
How to update a data source via the API
我混合使用 powershell powerbi 管理库和其他 api 来更新数据源。 (如此处记录 - https://docs.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} 的数据集 ID。
$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} is not found
我做错了什么?当 guid 来自 Power BI api.
时,我无法理解如何找不到数据集
我也试过在 json 正文中包含 "datasourceId" 和 "gatewayId",但这没有效果。
您正在使用 Dataset - Get Datasources:
$getUrl = [string]::Format('https://api.powerbi.com/v1.0/myorg/datasets/{0}/datasources',$DatasetId)
同时(因为您是从某个工作区 $datasets = Get-PowerBIDataset -WorkspaceId $workspaceObj.Id
获取数据集)您应该使用 Datasets - Get Datasources In Group 并且端点 URL 应该是这样的:
https://api.powerbi.com/v1.0/myorg/groups/{groupId}/datasets/{datasetId}/datasources
即您还必须提供组(工作区)ID。
我已经完成了一个类似的项目(PS cmdlets + rest)并且遇到了与您类似的问题。
您如何连接到 API?使用服务主体,您只能进行 api 次调用(MS 对此的记录很差)。
“404 not found”在我看来似乎是您无权更改数据集。您可以尝试使用 Login-PowerBI 以用户身份登录,看看是否会得到不同的响应。
调试的最佳选择是:
运行 cmdlet Resolve-PowerBIError - 最后获取错误的更多详细信息
或者使用像 Fiddler 这样的工具来查看 API.
的响应
错误其实在我的JSON,第一个connectionDetails
是现有数据源的确切规范。第二个 connectionDetails
包含要更新的详细信息。更正见下文(大写)
$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}"
}}
}}
]
}}
我混合使用 powershell powerbi 管理库和其他 api 来更新数据源。 (如此处记录 - https://docs.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} 的数据集 ID。
$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} is not found
我做错了什么?当 guid 来自 Power BI api.
时,我无法理解如何找不到数据集我也试过在 json 正文中包含 "datasourceId" 和 "gatewayId",但这没有效果。
您正在使用 Dataset - Get Datasources:
$getUrl = [string]::Format('https://api.powerbi.com/v1.0/myorg/datasets/{0}/datasources',$DatasetId)
同时(因为您是从某个工作区 $datasets = Get-PowerBIDataset -WorkspaceId $workspaceObj.Id
获取数据集)您应该使用 Datasets - Get Datasources In Group 并且端点 URL 应该是这样的:
https://api.powerbi.com/v1.0/myorg/groups/{groupId}/datasets/{datasetId}/datasources
即您还必须提供组(工作区)ID。
我已经完成了一个类似的项目(PS cmdlets + rest)并且遇到了与您类似的问题。
您如何连接到 API?使用服务主体,您只能进行 api 次调用(MS 对此的记录很差)。
“404 not found”在我看来似乎是您无权更改数据集。您可以尝试使用 Login-PowerBI 以用户身份登录,看看是否会得到不同的响应。
调试的最佳选择是: 运行 cmdlet Resolve-PowerBIError - 最后获取错误的更多详细信息 或者使用像 Fiddler 这样的工具来查看 API.
的响应错误其实在我的JSON,第一个connectionDetails
是现有数据源的确切规范。第二个 connectionDetails
包含要更新的详细信息。更正见下文(大写)
$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}"
}}
}}
]
}}