无法使用API​​更改Power BI连接字符串

Jab*_*ria 11 c# active-directory powerbi

我正在尝试使用其API更改Power BI连接字符串(Microsoft.IdentityModel.Clients.ActiveDirectory)。使用此API,我可以将.pbix文件发布到我的PBI帐户。但是Bad Request在尝试更新数据集连接字符串时出现错误。这是我的代码。

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Accept", "application/json");
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);

var restUrlImportPbix = POWER_BI_SERVICE_ROOT_URL + $"datasets/{dataset.id}/Default.SetAllConnections";

var postData = new { connectionString = _powerBISettings.DataConnectionString };
var response = client.PostAsync(restUrlImportPbix, new StringContent(JsonConvert.SerializeObject(postData), Encoding.UTF8, "application/json")).Result;
Run Code Online (Sandbox Code Playgroud)

我还在博客中发现SetAllConnections仅适用于直接查询连接。有人帮忙。

And*_*lov 4

除了尝试通过更改连接字符串来重定向数据源之外,您还可以通过允许报表本身切换其数据源来实现相同的目的。为此,请使用报告中的连接特定参数。为此,请Power Query Editor通过单击打开Edit QueriesManage Parameters定义两个新的文本参数,将它们命名为ServerNameDatabaseName

在此输入图像描述

在此输入图像描述

将其当前值设置为指向您的数据源之一,例如SQLSERVER2016“AdventureWorks2016 . Then right click your query in the report and openAdvanced Editor”。在M代码中找到服务器名称和数据库名称:

在此输入图像描述

并将它们替换为上面定义的参数,因此 M 代码将如下所示:

在此输入图像描述

现在您可以关闭并应用更改,您的报告应该像以前一样工作。但现在当您想要更改数据源时,请使用Edit Parameters

在此输入图像描述

并更改服务器和/或数据库名称以指向您要用于报告的其他数据源:

在此输入图像描述

更改参数值后,Power BI Desktop 将要求您应用更改并从新数据源重新加载数据。要更改在 Power BI 服务中发布的报表的参数值(即数据源),请转到数据集的设置并输入新的服务器和/或数据库名称:

在此输入图像描述

如果服务器位于本地,Gateway connection也请检查以确保其配置正确以使用正确的网关。您可能还想检查以下位置的可用网关Manage gateways

在此输入图像描述

更改数据源后,刷新数据集以从新数据源获取数据。使用 Power BI Pro 帐户,您可以每 24 小时执行 8 次,而如果数据集位于专用容量中,则此限制将提高到每 24 小时 48 次。

要以编程方式执行此操作,请使用Update Parameters/Update Parameters In GroupRefresh Dataset/ Refresh Dataset In GroupREST API 调用,或者如果我修改您的代码,则如下所示:

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Accept", "application/json");
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);

var restUrlUpdateParameters = POWER_BI_SERVICE_ROOT_URL + $"datasets/{dataset.id}/Default.UpdateParameters";
var postData = new { updateDetails = new[] { new { name = "ServerName", newValue = "NEWSERVER" }, new { name = "DatabaseName", newValue = "Another_AdventureWorks2016" } } };
var responseUpdate = client.PostAsync(restUrlUpdateParameters, new StringContent(JsonConvert.SerializeObject(postData), Encoding.UTF8, "application/json")).Result;

var restUrlRefreshDataset = POWER_BI_SERVICE_ROOT_URL + $"datasets/{dataset.id}/refreshes";
var responseRefresh = client.PostAsync(restUrlRefreshDataset, null).Result;
Run Code Online (Sandbox Code Playgroud)

这是一种使您的报告“可切换”的简单方法,例如,将一个报告从 DEV 或 QA 切换到 PROD 环境,或者作为灾难恢复计划的一部分,自动将某个工作组中的所有报告切换到另一台 DR 服务器。一般来说,我建议在所有报告中定义此类连接特定参数。