以编程方式将Power BI报表部署到Power BI报表服务器并更改连接字符串

时间:2019-09-18 06:37:34

标签: deployment powerbi

是否有任何方法可以将Power BI报表部署到Power BI报表服务器,而不必手动复制这些文件,将它们上传到服务器,最后在逐个报表的基础上更改每个报表的数据源连接信息,而不是每个客户站点都很实用。

例如。 PowerBI报告文件-“ Report_1”需要部署在客户服务器S1,S2,S3等上。

现在,我们要手动复制这些文件,将它们上传到服务器,最后在逐个报告的基础上更改每个报告的数据源连接信息,这在每个客户站点中都不实际。

我们如何自动将PBIX报告部署到Power BI Report Server并按语法更改数据源连接字符串。?

Microsoft在2020年1月发布功能,以使用API​​更新连接字符串。

enter image description here

微软在2020年1月发布功能。但是在2019年有什么办法?还有其他更新连接字符串的方法吗?

Microsoft Link

3 个答案:

答案 0 :(得分:0)

仅当您需要的更改可以由参数(例如,对于SQL Server源,可以设置数据库,架构或表名(但不能设置服务器名)。

首先,我将设置查询定义以使用查询参数并进行测试。具体情况取决于您的数据源和方案-您尚未提供任何信息。

然后,我将调用适当的REST API 更新参数方法-可能是 Group 版本。

https://docs.microsoft.com/en-us/rest/api/power-bi/datasets/updateparametersingroup

答案 1 :(得分:0)

您可以部署到Power BI Report Server,并使用Powershell ReportingServiceTools库来更改连接和其他设置,因为Power BI Report Service是SSRS,因此您可以使用相同的工具来加载报告,更改数据连接等

Example of deploying a filehere

您也可以直接在PBIX文件中更改连接设置。如果您将扩展名从pbix更改为zip,则可以查看内部。

Power BI Internal structure 如果您打开“连接”文件,则该文件将通过JSON结构文件包含设置

{"Version":1,"Connections":[{"Name":"EntityDataSource","ConnectionString":"Data Source=asazure://region.asazure.windows.net/somecubegoes her;Initial Catalog=SmartSpacesAnalysis;Cube=SmartSpacesModel","ConnectionType":"analysisServicesDatabaseLive"}]}

可以根据需要进行读取和更改

答案 2 :(得分:0)

最后发明了一种在PowerBI中更新连接字符串的技巧。

首先在Powershell中安装PowerBI API。 Microsoft API不能更新连接字符串,但可以更新用户名。 用户名和连接字符串均以加密格式存储在数据库中。 因此逻辑是将连接字符串传递给用户名,然后将加密的字符串复制到数据库中的连接字符串列。 只需检查下面我编写并发明了这个技巧的示例。谢谢。

# Code By SB 2019
$ReportServerURI = 'http://localhost/PowerBIReports' # Input Local path of powerbi file
$filePath = "C:\12.pbix"                                # Input Local path of powerbi file
$PBIxfileName = "12"                                    # INput your Powerbi File Name
$FolderName ='NewDataset'                               # Input PowerBI server Folder Name Where you wann to deploy
$Username ='admin'
$password ='password'                          
$ReportServerName ='localhost\SQl2017'                  #input SQL server where POWERBI database installed
$ReportServerDatabase = 'ReportServerPowerBI'           #input PowerBi Database Name 

$ConnectionString ='data source=Client01\SQL2019;initial catalog=Client_SB_1'  # input New Connection String / Client ConnectionString

$FolderLocation = '/'
$FolderPath = $FolderLocation + $FolderName

write-host "Deployment Started ..." -ForeGroundColor Yellow 
$session = New-RsRestSession -ReportPortalUri $ReportServerURI
Write-RsRestCatalogItem -WebSession $session -Path $filePath -RsFolder $folderPath -Description $Description -Overwrite
$datasources = Get-RsRestItemDataSource -WebSession $session -RsItem "$FolderPath/$PBIxfileName"
$dataSources[0].DataModelDataSource.AuthType = ‘Windows'
$dataSources[0].DataModelDataSource.Username = $ConnectionString 
$dataSources[0].DataModelDataSource.Secret = $password

Set-RsRestItemDataSource -WebSession $session -RsItem "$folderPath/$PBIxfileName" -RsItemType PowerBIReport -DataSources $datasources

$ID =  $dataSources[0].Id
$Query = " Update [DataModelDataSource] SET ConnectionString = Username From [dbo].[DataModelDataSource] Where DataSourceID ='" + $ID  + "' "

Invoke-Sqlcmd -Query $Query -ServerInstance CPMSUNRSQL17\CPMSRINST17 -Database ReportServerPowerBI

$datasources = Get-RsRestItemDataSource -WebSession $session -RsItem "$FolderPath/$PBIxfileName"
$dataSources[0].DataModelDataSource.Username = $Username
$dataSources[0].DataModelDataSource.Secret = $password
Set-RsRestItemDataSource -WebSession $session -RsItem "$folderPath/$PBIxfileName" -RsItemType PowerBIReport -DataSources $datasources

write-host "Deployment Done . . ." -ForeGroundColor Green