Регистрация внешнего средства
Некоторые средства должны быть зарегистрированы вручную в Power BI Desktop. Чтобы зарегистрировать внешнее средство, создайте JSON-файл со следующим примером кода:
{
"name": "<tool name>",
"description": "<tool description>",
"path": "<tool executable path>",
"arguments": "<optional command line arguments>",
"iconData": "image/png;base64,<encoded png icon data>"
}
Файл pbitool.json содержит следующие элементы:
- имя. Укажите имя средства, которое будет отображаться как кнопка подпись на ленте "Внешние инструменты" в Power BI Desktop.
- description: (необязательно) Укажите описание, которое будет отображаться как подсказка на кнопке ленты "Внешние инструменты" в Power BI Desktop.
- путь. Укажите полный путь к исполняемому файлу средства.
- аргументы: (необязательно) Укажите строку аргументов командной строки, с которыми должен запускаться исполняемый файл средства. Можно использовать любой из следующих заполнителей:
- %server%: заменено именем сервера и номером порта локального экземпляра табличных служб Analysis Services для импортированных или моделей данных DirectQuery.
- %database%: заменено именем базы данных модели, размещенной в локальном экземпляре табличных служб Analysis Services для импортированных или моделей данных DirectQuery.
- iconData: укажите данные изображения, которые будут отображаться в виде значка кнопки на ленте "Внешние инструменты" в Power BI Desktop. Строка должна быть отформатирована в соответствии с синтаксисом для URI данных без префикса data:.
Назовите файл "<tool name>.pbitool.json"
и поместите его в следующую папку:
%commonprogramfiles%\Microsoft Shared\Power BI Desktop\External Tools
Для 64-разрядных сред поместите файлы в следующую папку:
- Program Files (x86)\Common Files\Microsoft Shared\Power BI Desktop\External Tools
Файлы в указанном расположении с расширением PBItool.json загружаются Power BI Desktop при запуске.
Пример
Следующий файл *.pbitool.json запускает powershell.exe на ленте "Внешние инструменты" и запускает скрипт с именем pbiToolsDemo.ps1. Скрипт передает имя сервера и номер порта в параметре -Server и семантической модели в параметре -Database.
{
"version": "1.0.0",
"name": "External Tools Demo",
"description": "Launches PowerShell and runs a script that outputs server and database parameters. (Requires elevated PowerShell permissions.)",
"path": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
"arguments": "C:\\pbiToolsDemo.ps1 -Server \"%server%\" -Database \"%database%\"",
"iconData": "image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsEAAA7BAbiRa+0AAAANSURBVBhXY/jH9+8/AAciAwpql7QkAAAAAElFTkSuQmCC"
}
Соответствующий скрипт pbiToolsDemo.ps1 выводит параметры сервера и базы данных в консоль.
[CmdletBinding()]
param
(
[Parameter(Mandatory = $true)]
[string] $Server,
[Parameter(Mandatory = $true)]
[string] $Database
)
Write-Host ""
Write-Host "Analysis Services instance: " -NoNewline
Write-Host "$Server" -ForegroundColor Yellow
Write-Host "Dataset name: " -NoNewline
Write-Host "$Database" -ForegroundColor Green
Write-Host ""
Read-Host -Prompt 'Press [Enter] to close this window'
URI данных значка
Чтобы включить значок на ленте "Внешние инструменты", файл регистрации pbitool.json должен содержать элемент iconData.
Элемент iconData принимает универсальный код ресурса (URI) данных без данных: префикс. Например, универсальный код ресурса (URI) данных изображения одно пикселя magenta png:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsEAAA7BAbiRa+0AAAANSURBVBhXY/jH9+8/AAciAwpql7QkAAAAAElFTkSuQmCC
Не забудьте удалить данные: префикс, как показано в предыдущем примере pbitool.json.
Чтобы преобразовать png или другой тип файла изображения в универсальный код ресурса (URI) данных, используйте интерактивное средство или пользовательское средство, например в следующем фрагменте кода C#:
string ImageDataUri;
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.Filter = "PNG Files (.png)|*.png|All Files (*.*)|*.*";
openFileDialog1.FilterIndex = 1;
openFileDialog1.Multiselect = false;
openFileDialog1.CheckFileExists = true;
bool? userClickedOK = openFileDialog1.ShowDialog();
if (userClickedOK == true)
{
var fileName = openFileDialog1.FileName;
var sb = new StringBuilder();
sb.Append("image/")
.Append((System.IO.Path.GetExtension(fileName) ?? "png").Replace(".", ""))
.Append(";base64,")
.Append(Convert.ToBase64String(File.ReadAllBytes(fileName)));
ImageDataUri = sb.ToString();
}