除了通过更改连接字符串尝试重定向数据源之外,您还可以通过允许报告本身切换其数据源来实现相同的效果。为此,请在报告中使用
connection specific parameters。要执行此操作,请单击
Edit Queries
打开
Power Query Editor
,并在
Manage Parameters
中定义两个新的文本参数,我们称它们为
ServerName
和
DatabaseName
:
![enter image description here](https://istack.dev59.com/vAzYi.webp)
![enter image description here](https://istack.dev59.com/o1y2E.webp)
将它们的当前值设置为指向您的数据源之一,例如
SQLSERVER2016
和
'AdventureWorks2016'
。然后,在报表中右键单击查询并打开
Advanced Editor
。在M代码中找到服务器名称和数据库名称:
![enter image description here](https://istack.dev59.com/Iz6hq.webp)
将它们替换为上面定义的参数,这样M代码将如下所示:
![enter image description here](https://istack.dev59.com/WU8EP.webp)
现在您可以关闭并应用更改,您的报告应该像以前一样工作。但是现在,当您想要更改数据源时,请使用“编辑参数”进行更改:
![enter image description here](https://istack.dev59.com/HkDSh.webp)
将服务器和/或数据库名称更改为指向其他数据源,以便您可以在报告中使用该数据源:
![enter image description here](https://istack.dev59.com/RBmyH.webp)
在更改参数值后,Power BI Desktop将要求您应用更改并从新数据源重新加载数据。要更改在Power BI Service中发布的报告的参数值(即数据源),请转到数据集设置并输入新的服务器和/或数据库名称:
![enter image description here](https://istack.dev59.com/5Dkm8.webp)
如果服务器在本地,还要检查
网关连接
,确保它已正确配置以使用正确的网关。您可能还想在
管理网关
中检查可用的网关:
![enter image description here](https://istack.dev59.com/Js3bz.webp)
更改数据源后,刷新数据集以从新的数据源获取数据。使用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服务器。总的来说,我建议在所有报告中定义这样的连接特定参数。