PBIR
June 24, 2024

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)

Это глобальное изменение, вижу много возможностей. Но бесят наименования визуалов через идентификаторы. На рисунке выше видно. что дерево объектов состоит из бессвязных букв и цифр - идентификатора визуального элемента. Об этом есть в видео-обзоре