注册外部工具

某些工具必须手动注册到 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 的“外部工具”功能区中显示为按钮标题。
  • 说明: (可选)提供说明,该说明将在 Power BI Desktop 中的“外部工具”功能区按钮上显示为工具提示。
  • 路径: 提供工具可执行文件的完全限定路径。
  • 参数: (可选)提供一串命令行参数,用于启动该工具的可执行文件。 可以使用以下任一占位符:
    • %server%: 替换为 Analysis Services 表格本地实例中导入或 DirectQuery 数据模型的服务器名称和端口号。
    • %database%: 用于替换在 Analysis Services Tabular 的本地实例中托管的导入/DirectQuery 数据模型的数据库名称。
  • iconData: 提供图像数据,该数据将在 Power BI Desktop 的“外部工具”功能区中呈现为按钮图标。 应根据没有“data:”前缀的数据 URI 的语法设置字符串的格式。

将文件 "<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

启动后,Power BI Desktop 将加载 具有.pbitool.json扩展名的 指定位置中的文件。

Example

以下 *.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'  

PowerShell 控制台输出的屏幕截图,该输出由示例外部工具创建。

图标数据URI

若要在“外部工具”功能区中包含图标,pbitool.json 注册文件必须包含 iconData 元素。

带有工具图标的外部工具功能区的屏幕截图。

iconData 元素采用不含 data: 前缀的数据 URI。 例如,一个像素洋红色 png 图像的数据 URI 为:

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(); 
}