PBIR. Изменение размера навигатора страниц одновременно на всех листах
Итак, мой первый эксперимент с форматом проектов Power BI. И что уж там..можно сказать, первый код на powershell. Который позволяет задать размер навигатора страниц СРАЗУ на всех листах. За основу взят файл отчета с гитхаба Rui Romano
Давно жду возможность работы с проектом отчета. И наконец, выкатили почти готовый релиз. С большими ограничениями, что обещают обойти) И пока ждем исправлений, можно начинать учится писать скрипты для обработки json проекта.
И начала я с простого. Изменение размера навигатора страниц одновременно на всех листах. После буду думать над автоматизацией закладок, например, копировании выпадающего меню.
Так вот, задача. Был у нас отчет из двух листов. На каждом листе был навигатор страниц в таком виде:
В отчет добавили еще один лист. И навигатор поплыл:
Если листов много, мало кому захочется по ним проходить и менять размер.
На помощь приходит формат PBIR:
- На одной из страниц меняем размер навигатора. Запоминаем размер в свойствах.
- Сохраняем отчет в формате проекта.
- Открываем папку в Visual Code
- Создаем файл формата powershell ps1. Вообще, думаю, можно любой язык. Я хотела было попробовать C#. Но подключение его к VC доставило больше проблем.
- И вставляем скрипт:
$definitionPath = "F:\TestCode\NorthwindSales.Report\definition" #путь к проекту
#считываем JSON и находим все объекты типа pageNavigator
$slicerFiles = Get-ChildItem $definitionPath -Recurse -Filter visual.json | Where-Object {
$json = Get-Content $_.FullName | ConvertFrom-Json
$json.visual.visualType -eq "pageNavigator"
}
# для интереса выводим количество найденных навигаторов
Write-Output $slicerFiles.Count
# проходим по кажому навигатору и меняем его свойство width
foreach ($nav in $slicerFiles) {
$json = Get-Content $nav.FullName | ConvertFrom-Json
# Write-Output $json.name
$json.position.width = 430
$json | ConvertTo-Json -Depth 100 | Set-Content $nav.FullName
}Чтобы узнать названия атрибутов, что хотим изменить, достаточно полазить по json файлу вручную, и посмотреть названия и структуру. Вот он после изменений.
Почему-то поплыл и стал не очень красивым после блока position)
Это глобальное изменение, вижу много возможностей. Но бесят наименования визуалов через идентификаторы. На рисунке выше видно. что дерево объектов состоит из бессвязных букв и цифр - идентификатора визуального элемента. Об этом есть в видео-обзоре