Задайте источник данных отчета и учетные данные на сервере отчетов Power BI через API REST, чтобы установить sh запланированное обновление - PullRequest
0 голосов
/ 11 февраля 2020

Моя задача заключается в следующем: с помощью сервера отчетов Power BI (PBIRS) REST API загрузить встроенный отчет (встроенный, что означает, что модель данных интегрирована в сам отчет - простой импорт из SQL База данных сервера, следовательно, нет прямого соединения или DirectQuery et c.) Для PBIRS, задайте учетные данные (ConnectionString, Windows Аутентификация имени пользователя и пароля) для доступа к источнику данных (базе данных) и настройте ежедневное расписание. Refre sh.

С помощью скрипта Powershell я могу загрузить отчет без проблем, однако возникают сложности, когда я пытаюсь установить учетные данные для источника данных. Вот код, который мне нужно выполнить sh this:

$payload0 = 
'
{
    "Name": "Data Source test",
    "Description": "string",
    "Path": "/Valid/Path",
    "Type": "DataSource",
    "Hidden": false,
    "Size": 0,
    "ModifiedBy": "string",
    "ModifiedDate": "2020-01-13T15:51:04Z",
    "CreatedBy": "string",
    "CreatedDate": "2020-01-13T15:51:04Z",
    "IsFavorite": false,
    "IsEnabled": true,
    "ConnectionString": "valid.connection\\string",
    "DataModelDataSource": {
      "AuthType": "Windows",
      "SupportedAuthTypes": [
        "Windows"
      ],
      "Kind": "SQL",
      "ModelConnectionName": "string",
      "Secret": "",
      "Type": "Import ",
      "Username": "myUserName"
    },
    "DataSourceSubType": "DataModel",
    "DataSourceType": "SQL",
    "IsOriginalConnectionStringExpressionBased": false,
    "IsConnectionStringOverridden": false,
    "CredentialRetrieval": "prompt",
    "CredentialsByUser": {
      "DisplayText": "someText",
      "UseAsWindowsCredentials": true
    },
    "CredentialsInServer": {
      "UserName": "myUserName",
      "Password": "myPassword",
      "UseAsWindowsCredentials": true,
      "ImpersonateAuthenticatedUser": true
    },
    "IsReference": false
  }
'

$restApiUri = $ReportPortalUri + "/api/v2.0/DataSources"

Invoke-RestMethod -Uri $restApiUri -Method Post -Body $payload0 -ContentType "application/json" -UseDefaultCredentials -UseBasicParsing -Verbose

После запуска кода я получаю 201 Created ответ JSON, который указывает на успешное создание источника данных и его учетных данных доступа , Если я проверяю на панели Manage отчета по PBIRS , я не вижу никаких изменений, внесенных в источники данных.

Следующим моим шагом было установить учетные данные вручную, введя мое имя пользователя и пароль на сервере отчетов, а затем выполняю следующий код для установки запланированного refre sh:

$payload1 = 
'
{
    "ParameterValues":[ 

    ],
    "Description":"testSchedule",
    "CatalogItemPath":"/Valid/Path",
    "EventType":"DataModelRefresh",
    "Schedule":{ 
        "Definition":{ 
            "EndDate":"0001-01-01T00:00:00Z",
            "StartDateTime":"2019-01-15T02:00:00Z",
            "EndDateSpecified":false,
            "Recurrence":{ 
                "DailyRecurrence": { 
                "DaysInterval":1
                }
            }
        }
    }
}
'

$restApiUri = $ReportPortalUri + "/api/v2.0/CacheRefreshPlans"

Invoke-RestMethod -Uri $restApiUri -Method Post -Body $payload1 -ContentType "application/json" -UseDefaultCredentials -UseBasicParsing -Verbose

Запуск этого кода приводит к успешному созданию запланированного refre sh, учитывая, что Я заранее установил учетные данные для источника данных.

Итак, мой вопрос вкратце: как настроить учетные данные (Windows Аутентификация и имя пользователя / пароль) источника данных (сервер SQL) соединение, определенное действительной строкой ConnectionString) с API-интерфейсом PBIRS REST?

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 25 февраля 2020

Оказывается, есть еще один способ подойти к задаче, который заключается в использовании совсем другого API. Используя методы ReportingServicesTools , мы можем загрузить отчет в PBIRS и установить его учетные данные источника данных следующим образом:

# create PBIRS session
Write-Output "Creating a session to the Report Server $ReportPortalUri"
$session = New-RsRestSession -ReportPortalUri $ReportPortalUri        

# upload report with overwrite
write-output "Upload report with overwrite"
Write-RsRestCatalogItem -WebSession $session -Path $FilePath -RsFolder $RsFolder -Description $Description -Overwrite 

# get report name
$reportName = [System.IO.Path]::GetFileNameWithoutExtension($FilePath)

# get existing data source properties
$dataSource = Get-RsRestItemDataSource -WebSession $session -RsItem "$RsFolder/$reportName"

# setting up data source credentials
$dataSource.DataModelDataSource.AuthType = "Windows"
$dataSource.CredentialRetrieval = "Store"
$dataSource.DataModelDataSource.UserName = "myUsername"
$dataSource.DataModelDataSource.Secret = "myPassword"

# applying credentials
Set-RsRestItemDataSource -WebSession $session -RsItem "$RsFolder/$reportName" -RsItemType "PowerBIReport" -DataSources $dataSource
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...