Операция не поддерживается для селектора № - сведения о подключении содержат параметры »- обновить ServerName в PowerBI Dataset отчета
У меня проблема с обновлением сведений о сервере в наборе данных загруженного отчета power bi. Пожалуйста помоги.
Здесь я использовал 2 подхода.
Подход 1
Использовал метод ниже в Microsoft.PowerBI.Api.V2 UpdateDatasourcesInGroup
public static void UpdateSqlDatabaseConnectionString(string WorkspaceId, string DatasetId, string Server, string Database) { var tokenCredentials = GetTokenCredentials(); using (var pbiClient = new PowerBIClient(new Uri(ApiUrl), tokenCredentials.Item1)) { Datasource targetDatasource = pbiClient.Datasets.GetDatasourcesInGroup(WorkspaceId, DatasetId).Value.First(); string currentServer = targetDatasource.ConnectionDetails.Server; string currentDatabase = targetDatasource.ConnectionDetails.Database; if (Server.ToLower().Equals(currentServer.ToLower()) && Database.ToLower().Equals(currentDatabase.ToLower())) { Console.WriteLine("New server and database name are the same as the old names"); return; } DatasourceConnectionDetails connectionDetails = new DatasourceConnectionDetails { Database = Database, Server = Server }; UpdateDatasourceConnectionRequest updateConnRequest = new UpdateDatasourceConnectionRequest { DatasourceSelector = targetDatasource, ConnectionDetails = connectionDetails }; UpdateDatasourcesRequest updateDatasourcesRequest = new UpdateDatasourcesRequest(updateConnRequest); pbiClient.Datasets.UpdateDatasourcesInGroup(WorkspaceId, DatasetId, updateDatasourcesRequest); } }
Захватил запрос в скрипач
Запрос:
{
"updateDetails": [
{
"connectionDetails": {
"server": "OldServer",
"database": "OldDatabase"
},
"datasourceSelector": {
"datasourceType": "Sql",
"connectionDetails": {
"server": "NewServer",
"database": "NewDatabase"
},
"gatewayId": "gatewayId",
"datasourceId": "datasourceId"
}
}
]
}
Ответ:
Подход 2
Вызывается API отдыха PowerBI.
public static void UpdateServerName_RestAPI(string groupId, string datasetId)
{
var tokenCredentials = InitPowerBI_New();
HttpResponseMessage response;
try
{
var httpClient = new HttpClient();
// Add AccessToken in header
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenCredentials.Item2);
var url = $"https://api.powerbi.com/v1.0/myorg/groups/{groupId}/datasets/{datasetId}/Default.UpdateDatasources";
var form = prepareJsonForUpdateServerDetails();
var content = new StringContent(form, Encoding.UTF8, "application/json");
response = httpClient.PostAsync(url, content).Result;
response.EnsureSuccessStatusCode();
httpClient.Dispose();
}
catch (Exception)
{
}
}
Запрос :
{
"UpdateDetails":[
{
"datasourceSelector":{
"datasourceType":"Sql",
"connectionDetails":{
"server":"OldServer",
"database":"OldDatabase"
}
},
"connectionDetails":{
"server":"NewServer",
"database":"NewDatabase"
}
}
]
}
Ответ:
{"error":{"code":"InvalidRequest","message":"Operation is not supported for selector # - connection details contains parameters"}}
Пожалуйста помоги. Спасибо
1 ответ
Это происходит, когда запросы отчета подключаются к базе данных с помощью параметра. В этом случае вы не можете обновить соединение, а можете обновить параметры или удалить соединение из запроса.
Итак, если вы видите в своем коде запроса что-то вродеSql.Database(#"ServerName",...
вы должны использоватьClient.Datasets.UpdateParameters
и перейдите для получения подробной информации:
UpdateMashupParameterDetails request = new()
{
Name = "ServerName",
NewValue = "newServerName"
};
и аналогично для базы данных. Дополнительные сведения https://learn.microsoft.com/en-us/rest/api/power-bi/datasets/update-parameters