Поделиться через


Регистрация внешнего средства

Некоторые средства должны быть зарегистрированы вручную в 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'  

Screenshot of PowerShell console output created from the example external tool.

URI данных значка

Чтобы включить значок на ленте "Внешние инструменты", файл регистрации pbitool.json должен содержать элемент iconData.

Screenshot of the external tools ribbon with the tool icons.

Элемент 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(); 
}