首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Rest API将报告/数据集更改为使用不同的本地企业网关

使用Rest API将报告/数据集更改为使用不同的本地企业网关
EN

Stack Overflow用户
提问于 2019-08-22 21:44:10
回答 2查看 1.2K关注 0票数 0

我在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的限制还是我做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2019-08-23 15:18:19

您可以使用连接级参数来定义数据源(服务器名称和数据库名称),并在发布报告之后使用REST API更新它们的值。

在报表中定义两个文本参数,我们将它们命名为ServerNameDatabaseName。将它们的值设置为指向所需的数据源。此时,当您向报表添加数据源时,可以使用以下参数指定数据源:

如果需要修改现有报表,请将报表的M代码中的服务器和数据库名称替换为参数的名称。代码可能如下所示:

代码语言:javascript
运行
复制
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,您可以执行以下操作:

代码语言:javascript
运行
复制
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

希望这能有所帮助!

票数 0
EN

Stack Overflow用户

发布于 2020-07-02 00:13:41

现在有一种API方法可以用于这种类型的任务,允许改变通过数据网关实时连接到分析服务的需求:https://docs.microsoft.com/en-us/rest/api/power-bi/datasets/updatedatasourcesingroup#updatedatasourceconnectionrequest

将其命名为如下所示的主体:

代码语言:javascript
运行
复制
{
  "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"
      }
    }
  ]
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57610776

复制
相关文章

相似问题

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