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

13

我正在尝试使用他们的API (Microsoft.IdentityModel.Clients.ActiveDirectory) 更改Power BI连接字符串。 使用此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;

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

Translated:

我在一篇博客中看到,SetAllConnections只适用于直接查询连接。 请有人帮助。


1
您可能遇到发布后凭据方面的问题。建议使用像Wireshark或Fiddler这样的嗅探器,比较发布前的第一个请求和失败的第一个请求,确保所有标头匹配。发布后,您是否在同一台机器上或不同的机器上运行?建议在工作正常的机器上测试发布结果以验证发布代码是否有效。还建议检查VS二进制文件夹,并确保bin文件夹中的所有文件与发布后的可执行文件位于同一文件夹中。 - jdweng
1
你是说错误是由于同时在两台不同的机器上使用相同的令牌吗? - jdweng
2
PBIX文件是XML格式的文本文件,可以使用记事本打开。发布后请检查文件以确保所有引用均有效。XML可能会引用不同文件夹中的文件。 - jdweng
2
我读得太快了。以下内容说“OFFICE XML”:https://fileinfo.com/extension/pbix。所以你应该能够用Word打开它。 - jdweng
3
.pbix文件实际上是zip文件。将扩展名改为zip并打开它,里面包含多个xml文件。 - Andrey Nikolov
显示剩余7条评论
1个回答

4
除了通过更改连接字符串尝试重定向数据源之外,您还可以通过允许报告本身切换其数据源来实现相同的效果。为此,请在报告中使用connection specific parameters。要执行此操作,请单击Edit Queries打开Power Query Editor,并在Manage Parameters中定义两个新的文本参数,我们称它们为ServerNameDatabaseName

enter image description here

enter image description here

将它们的当前值设置为指向您的数据源之一,例如SQLSERVER2016'AdventureWorks2016'。然后,在报表中右键单击查询并打开Advanced Editor。在M代码中找到服务器名称和数据库名称:

enter image description here

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

enter image description here

现在您可以关闭并应用更改,您的报告应该像以前一样工作。但是现在,当您想要更改数据源时,请使用“编辑参数”进行更改:

enter image description here

将服务器和/或数据库名称更改为指向其他数据源,以便您可以在报告中使用该数据源:

enter image description here

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

enter image description here

如果服务器在本地,还要检查网关连接,确保它已正确配置以使用正确的网关。您可能还想在管理网关中检查可用的网关:

enter image description here

更改数据源后,刷新数据集以从新的数据源获取数据。使用Power BI Pro帐户,每24小时可以执行此操作8次,而如果数据集位于专用容量中,则此限制将提高到每24小时48次。
要以编程方式执行此操作,请使用Update Parameters / Update Parameters In GroupRefresh Dataset / Refresh Dataset In Group REST 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;

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

我已经在几天之间得到了这个解决方案。但是仍然无法更改数据源的用户名和密码。有没有解决方法? - Jaber
当您安装和配置网关时,需要输入数据源的凭据,以便正确使用它们。 - Andrey Nikolov
是的,我可以做到。但我正在尝试在不同的账户中使用相同的pbix文件。我不想在Power BI Desktop中多次更改它们。 - Jaber
1
我不明白,数据源凭据和网关配置及凭据都没有保存在pbix文件中。因此,您可以将相同的pbix文件发布多次,并将每个文件指向不同的数据源(或不同的帐户,如果我使用您的话)。您所说的“多次更改”是什么意思? - Andrey Nikolov
哦,好的,我明白了。 - Jaber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接