我在PowerBI桌面上开发了一个PowerBi报告,它从本地分析服务器获取数据。
在powerbi服务中,我已经创建了一个工作区,然后我安装了一个内部(企业)网关,其中的数据源指向相同的分析服务器,然后我从powerbi桌面发布我的报告,然后将其发布到工作区,并自动将其连接到网关,一切工作正常。
我想把这个pbix文件上传到生产工作区,它有一个不同的网关和一个指向我们的生产分析服务器的数据源。
因此,我将执行以下操作:
使用powerbi powershell命令将Pbix上传到生产工作区: New-PowerBIReport :这很好,当然它没有连接到任何预期的东西。
然后,我尝试使用此rest API调用切换报告的数据集上的网关。
https://docs.microsoft.com/en-us/rest/api/power-bi/datasets/bindtogatewayingroup
指定我希望它绑定到的GatewayID和生产分析服务器的数据源Id。3.
然后返回一个错误: DMTS_CanNotFindMatchingDatasourceInGatewayError。
这是有意义的,因为报告将查看开发分析服务器,而不会在prod网关上进行配置。
所以我想知道我是否可以使用API在报告中更改这一点,我可以使用:https://docs.microsoft.com/en-us/rest/api/power-bi/datasets/updatedatasourcesingroup
因此,使用它,我可以将数据库名称和服务器从开发更改为生产,并验证服务是否接受了此更改。3.
然后,我想我可以调用绑定网关组并指定我的生产网关和生产数据源,但它仍然失败,并显示相同的消息"DMTS_CanNotFindMatchingDatasourceInGatewayError“
经过几个小时的研究,我得出的结论是,除非两个网关上存在完全相同的数据源,否则不可能将报告从一个网关更改到另一个网关,这似乎有点毫无意义。
这是API的限制还是我做错了什么?
发布于 2019-08-23 15:18:19
您可以使用连接级参数来定义数据源(服务器名称和数据库名称),并在发布报告之后使用REST API更新它们的值。
在报表中定义两个文本参数,我们将它们命名为ServerName
和DatabaseName
。将它们的值设置为指向所需的数据源。此时,当您向报表添加数据源时,可以使用以下参数指定数据源:
如果需要修改现有报表,请将报表的M代码中的服务器和数据库名称替换为参数的名称。代码可能如下所示:
let
Source = AnalysisServices.Database(ServerName, DatabaseName, [TypedMeasureColumns=true, Implementation="2.0"]),
Model1 = Source{[Id="Model"]}[Data],
Model2 = Model1{[Id="Model"]}[Data],
#"Added Items" = Cube.Transform(Model2,
{
{Cube.AddAndExpandDimensionColumn, "[OrdersData]", {"[OrdersData].[OrderDate].[OrderDate]", "[OrdersData].[OrderYear].[OrderYear]", "[OrdersData].[Quantity].[Quantity]"}, {"OrdersData.OrderDate", "OrdersData.OrderYear"}}
})
in
#"Added Items"
注意,AnalysisServices.Database
的前两个参数不是文字,而是上面定义的参数。
当您将此报告发布到Power BI Online时,它将根据当前参数值(例如,到您的开发服务器的参数值)查找网关。但是您可以使用Update Parameters In Group REST API将此报告重定向到另一个数据源(例如,您的生产服务器)。如果您的网关设置正确,则不应执行任何其他操作,它将自动使用。可能在那之后你会想刷新你的模型。使用PowerShell,您可以执行以下操作:
Invoke-PowerBIRestMethod -Url 'groups/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/datasets/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/UpdateParameters' -Method Post -Body '{
"updateDetails": [
{
"name": "ServerName",
"newValue": "MyProductionServerName"
},
{
"name": "DatabaseName",
"newValue": "MyDatabaseName"
}
]
}'
Invoke-PowerBIRestMethod -Url 'groups/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/datasets/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/refreshes' -Method Post
希望这能有所帮助!
发布于 2020-07-02 00:13:41
现在有一种API方法可以用于这种类型的任务,允许改变通过数据网关实时连接到分析服务的需求:https://docs.microsoft.com/en-us/rest/api/power-bi/datasets/updatedatasourcesingroup#updatedatasourceconnectionrequest。
将其命名为如下所示的主体:
{
"updateDetails": [
{
"datasourceSelector": {
"datasourceType": "AnalysisServices",
"connectionDetails": {
"server": "server name mentioned in your pbix file",
"database": "original database name used in pbix"
}
},
"connectionDetails": {
"server": "a new server name that is used on the gateway",
"database": "potentially, another database name"
}
}
]
}
https://stackoverflow.com/questions/57610776
复制相似问题