Невозможно изменить строку подключения Power BI с помощью API

Я пытаюсь изменить строку подключения Power BI, используя их API (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;

Также я обнаружил в блоге, что SetAllConnections работает только для соединений с прямым запросом. Кто-нибудь, помогите, пожалуйста.

Ответы

Ответ 1

Помимо попытки перенаправить источник данных путем изменения строки подключения, вы можете добиться того же, разрешив самому отчету переключать его источник данных. Для этого используйте параметры подключения в отчете. Для этого откройте Power Query Editor, нажав Edit Queries и в Manage Parameters определите два новых текстовых параметра, назовите их ServerName и DatabaseName:

enter image description here

enter image description here

Установите их текущие значения, чтобы они указывали на один из ваших источников данных, например, SQLSERVER2016 и "AdventureWorks2016 . Then right click your query in the report and open Расширенный редактор". Найдите имя сервера и имя базы данных в коде M:

enter image description here

и замените их параметрами, определенными выше, поэтому код M будет выглядеть так:

enter image description here

Теперь вы можете закрыть и применить изменения, и ваш отчет должен работать как прежде. Но теперь, когда вы хотите изменить источник данных, сделайте это с помощью Edit Parameters:

enter image description here

и измените имя сервера и/или базы данных так, чтобы оно указывало на другой источник данных, который вы хотите использовать для своего отчета:

enter image description here

После изменения значений параметров Power BI Desktop попросит вас применить изменения и перезагрузить данные из нового источника данных. Чтобы изменить значения параметров (т.е. источника данных) отчета, опубликованного в Power BI Service, перейдите в настройки набора данных и введите имя нового сервера и/или базы данных:

enter image description here

Если сервер локальный, проверьте также Gateway connection, чтобы убедиться, что он правильно настроен для использования правильного шлюза. Вы также можете проверить доступные шлюзы в Manage gateways:

enter image description here

После изменения источника данных обновите ваш набор данных, чтобы получить данные из нового источника данных. С помощью учетной записи Power BI Pro вы можете делать это 8 раз в сутки, а если набор данных находится в выделенной емкости, этот предел увеличивается до 48 раз в сутки.

Чтобы сделать это программно, используйте Update Parameters/Update Parameters In Group и Refresh Dataset/Refresh Dataset In Group вызовы API REST или если я изменю ваш код, примерно так:

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. Вообще я рекомендую определять такие параметры соединения во всех отчетах.