Операция не поддерживается для селектора № - сведения о подключении содержат параметры »- обновить ServerName в PowerBI Dataset отчета

У меня проблема с обновлением сведений о сервере в наборе данных загруженного отчета power bi. Пожалуйста помоги.

Здесь я использовал 2 подхода.

Подход 1

  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

Другие вопросы по тегам