我正在尝试使用其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仅适用于直接查询连接。任何人都可以帮忙。
答案 0 :(得分:3)
除了尝试通过更改连接字符串来重定向数据源外,还可以通过允许报表本身切换其数据源来实现此目的。为此,请在报告中使用connection specific parameters。为此,请单击Power Query Editor
打开Edit Queries
,然后在Manage Parameters
中定义两个新的文本参数,分别命名为ServerName
和DatabaseName
:
将其当前值设置为指向您的数据源之一,例如SQLSERVER2016
和“ AdventureWorks2016 . Then right click your query in the report and open
高级编辑器”。在M代码中找到服务器名称和数据库名称:
并将它们替换为上面定义的参数,因此M代码将如下所示:
现在,您可以关闭并应用更改,您的报告应该像以前一样工作。但是现在,当您想更改数据源时,请使用Edit Parameters
:
并更改服务器和/或数据库名称以指向要用于报表的其他数据源:
更改参数值后,Power BI Desktop将要求您应用更改并从新数据源重新加载数据。要更改在Power BI Service中发布的报表的参数值(即数据源),请转到数据集的设置并输入新的服务器和/或数据库名称:
如果服务器为本地服务器,请也检查Gateway connection
,以确保已正确配置它以使用正确的网关。您可能还需要检查Manage gateways
中的可用网关:
更改数据源后,刷新数据集以从新数据源获取数据。使用Power BI Pro帐户,您可以每24小时执行8次此操作,而如果数据集具有专用容量,则该限制将提高到每24小时48次。
要以编程方式执行此操作,请使用Update Parameters
/ Update Parameters In Group
和Refresh 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服务器。通常,我建议在所有报告中定义此类特定于连接的参数。