powerbi - 如何自动更改连接字符串中的服务器
问题描述
我希望能够通过不同的环境推广我的报告版本。我想自动化这个过程(使用 octopus 或 azure devops),但是我找不到如何为每个环境注入源连接设置。
我知道 .pbix 文件实际上是包含源的 zip 文件夹,但是更改文件并重新压缩它会导致错误。
编辑:在我的具体情况下,我使用的是分析服务,不幸的是,并非所有数据源都被平等对待。
解决方案
您可以通过在报表中使用特定于连接的参数来允许报表本身切换其数据源来实现此目的。为此,Power Query Editor
通过单击打开Edit Queries
并Manage Parameters
定义两个新的文本参数,让它们命名ServerName
并DatabaseName
:
将它们的当前值设置为指向您的数据源之一,例如SQLSERVER2016
和AdventureWorks2016
。然后在报告中右键单击您的查询并打开Advanced Editor
. 在M代码中找到服务器名和数据库名:
并将它们替换为上面定义的参数,因此 M 代码将如下所示:
现在您可以关闭并应用更改,您的报告应该像以前一样工作。但是现在当您想更改数据源时,请使用Edit Parameters
:
并更改服务器和/或数据库名称以指向要用于报告的其他数据源:
更改参数值后,Power BI Desktop 将要求您应用更改并从新数据源重新加载数据。要更改 Power BI 服务中发布的报表的参数值(即数据源),请转到数据集的设置并输入新的服务器和/或数据库名称:
更改数据源后,刷新数据集以从新数据源获取数据。使用 Power BI Pro 帐户,您可以每 24 小时执行 8 次此操作,而如果数据集处于专用容量中,则此限制会提高到每 24 小时 48 次。
要以编程方式执行此操作,请使用Update Parameters
/Update Parameters In Group
和Refresh Dataset
/ Refresh Dataset In Group
REST API 调用。例如,您可以使用 PowerShell 执行此操作,如下所示:
Import-Module MicrosoftPowerBIMgmt
Import-Module MicrosoftPowerBIMgmt.Profile
$password = "xxxxx" | ConvertTo-SecureString -asPlainText -Force
$username = "xxxxx@yyyyy.com"
$credential = New-Object System.Management.Automation.PSCredential($username, $password)
Connect-PowerBIServiceAccount -Credential $credential
Invoke-PowerBIRestMethod -Url 'groups/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/datasets/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/UpdateParameters' -Method Post -Body '{
"updateDetails": [
{
"name": "ServerName",
"newValue": "SQLSERVER2019"
},
{
"name": "DatabaseName",
"newValue": "AdventureWorks2019"
}
]
}'
Invoke-PowerBIRestMethod -Url 'groups/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/datasets/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/refreshes' -Method Post
Disconnect-PowerBIServiceAccount
更新:对于到 SSAS 的实时连接,不能使用参数。在这种情况下,可以使用Update Datasources In Group REST API 调用更改连接字符串。在 PowerShell 中,可以这样完成:
Import-Module MicrosoftPowerBIMgmt
Import-Module MicrosoftPowerBIMgmt.Profile
$password = "xxxxx" | ConvertTo-SecureString -asPlainText -Force
$username = "xxxxx@yyyyy.com"
$credential = New-Object System.Management.Automation.PSCredential($username, $password)
Connect-PowerBIServiceAccount -Credential $credential
Invoke-PowerBIRestMethod -Url 'groups/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/datasets/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Default.UpdateDatasources' -Method Post -Body '{
"updateDetails": [
{
"datasourceSelector": {
"datasourceType": "AnalysisServices",
"connectionDetails": {
"server": "My-As-Server",
"database": "My-As-Database"
}
},
"connectionDetails": {
"server": "New-As-Server",
"database": "New-As-Database"
}
}
]
}'
Disconnect-PowerBIServiceAccount
请注意,您需要提供新旧服务器和数据库名称。
推荐阅读
- reactjs - ReactJS 轮询数据库或接收从服务器推送的数据
- javascript - 如何从 sfpg 中找到所有 img src 属性(单文件 PHP 库)
- java - JVMTI_ERROR_THREAD_NOT_ALIVE 错误使用多个活动和 OpenWeatherMap API
- python - 如何根据输入变量的长度更改函数
- c# - 是否可以在消息框中包含 if/else 语句的结果但多个值而不是一个
- javascript - Lodash groupby 字母表
- excel-formula - 在 Excel 中计算增长率
- css - Flexbox:当一组项目位于页面的最中心时,将单个项目放在底部
- c++ - EqualityComparable 特质解释
- kubernetes-helm - Tiller 已安装但 Helm 未找到