Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: SQL Reporting Service замена обращениий к серверам и БД  [new]
dermama
Member

Откуда:
Сообщений: 238
vikkiv
Всё есть в API документации (но там многое криво если честно - всё в стадии разработке и дополнений по возможности),
покопался в сыром архиве по SSRS, на PowerShell
вот так можно просмотреть все существующие ConnectionString (напр. в Shared DS его нет) из DataSources (которых на отчёт может быть несколько) где есть *local*
#=============
$ssrs_web="http://localhost/PBI"
[String]$srch="local"

[String]$ssrs_api=$ssrs_web+"/api/v2.0/Reports"
$tbl=New-Object System.Data.DataTable;$tbl.Columns.AddRange(@("Report","DataSource","ConnectionString","ReportId"))>$null
foreach($r in(Invoke-RestMethod -Uri $ssrs_api -UseDefaultCredentials).value|?{$_.HasDataSources -eq $true})
{foreach($ds in(Invoke-RestMethod -Uri ($ssrs_api+"("+$r.Id+")/DataSources") -UseDefaultCredentials))
{foreach($sr in $ds.value|?{$_.ConnectionString -ne $null -and $_.ConnectionString -like ("*"+$srch+"*")})
{$tbl.Rows.Add($r.Path,$sr.Name,$sr.ConnectionString,$r.Id)>$null}}}
$tbl|ft
#=============
вот так скачать все .rdl (xml) отчёты (для других объектов - другая API ветка) в одну папку (по ID) для послед. обработки как xml ноды или под более примитивную текстовую замену
#=============
$ssrs_web="http://localhost/PBI"
$download_dir="c:\tst\ssrs_id\in"

$ssrs_api=$ssrs_web+"/api/v2.0/Reports"
if((Test-Path $download_dir) -eq $false){New-Item -ItemType Directory -Force -Path $download_dir | Out-Null}
foreach($r in(Invoke-RestMethod -Uri $ssrs_api -UseDefaultCredentials).value|?{$_.Type -eq "Report"})
{Invoke-RestMethod -Uri ($ssrs_api+"("+$r.ID+")/Content/"+'$value') -UseDefaultCredentials -OutFile ($download_dir+"\"+$r.id)}
#=============

а вот так по полному пути (но я предпочитаю по ID т.к. как-то была проблема из-за слишком длинных путей при записи на сетевое хранилище, хотя и менее читабельно)
хотя такое уже приведено выше более простым (и не совсем рекомендованным) методом через t-SQL (не факт что на сервере разрешена такая функциональность в конфигурации SQL Server-а)
#=============
$ssrs_web="http://localhost/PBI"
$download_dir="c:\tst\ssrs_id\dr"

$ssrs_api=$ssrs_web+"/api/v2.0/Reports"
foreach($r in(Invoke-RestMethod -Uri $ssrs_api -UseDefaultCredentials).value)
{$dr=$download_dir+$r.Path.Substring(0,$r.Path.LastIndexOf("/")).Replace("/","\")
if((Test-Path $dr) -eq $false){New-Item -ItemType Directory -Force -Path $dr | Out-Null}
Invoke-RestMethod -Uri ($ssrs_api+"("+$r.ID+")/Content/"+'$value') -UseDefaultCredentials -OutFile ($download_dir+$r.Path.Replace("/","\")+".rdl")}
#=============


вот так .rdl отчёт записывается на сервер (можно и развить пройдясь циклом для каждого обработанного отчёта в Out директории)
#=============
$ssrs_web="http://localhost/PBI"
$rdl_name="my_report_test1"

$ssrs_api=$ssrs_web+"/api/v2.0/Reports"
$my_rdl = "C:\tst\ssrs_id\in\8d6dc5eb-8f7a-496a-bebb-798e356dc2b1"
$web_rdl=@{
    "@odata.type"="#Model.Report";
    "Content"=[System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes($my_rdl));
    "ContentType"="";
    "Name" = $rdl_name;
    "Path" = '/';
    }|ConvertTo-Json
Invoke-RestMethod -Uri $ssrs_api -Method Post -Body $web_rdl  -ContentType "application/json" -UseDefaultCredentials
#=============

судя по документации REST методом можно записать и саму коллекцию DataSources (JSON) для конкретного отчёта напрямую на сервер без отдельного сохранения в дисковых папках
(но это сам не делал, у нас немного другие задчи массового обслуживания SSRS инфраструктуры были)
или в самих rdl через xml навигацию XPath методом SelectSingleNode с InnerXML или InnerText поменять значение ConnectionString ноды
т.е. вместо REST метода PATCH на /CatalogItems(Id) - только PUT метод через /Reports(Id)/DataSources

так-же зависит от SSRS версии - у меня это работает на последнем релизе Power BI Report Server


Добрый вечер!
Большое спасибо, за подробный ответ - будем пробовать!
13 ноя 20, 23:10    [22231787]     Ответить | Цитировать Сообщить модератору
 Re: SQL Reporting Service замена обращениий к серверам и БД  [new]
dermama
Member

Откуда:
Сообщений: 238
SERG1257
Владислав Колосов
dowload каждого отчета, отредактировать и выполнить upload
+1
Гораздо дольше будет протестировать каждый отчет.

Заодно можно будет проделать рефакторинг: просмотреть на все отчеты, отделить нужные отчеты от остальных, сформировать источники данных

dermama
количество повторяющихся названий от 2 до 9
Нюхом чую бардак


Добрый вечер!
Я согласен с вами, что в идеале, необходимо привести в порядок базу отчетов и отбросить ненужные, однако, в связи с основной нагрузкой на это потребуется гораздо больше времени чем два дня.
13 ноя 20, 23:13    [22231789]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Microsoft SQL Server Ответить