外部ツールを登録する

一部のツールは 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 ファイルには、次の要素が含まれています。

  • name: ツールの名前を指定します。これは Power BI Desktop 内の [外部ツール] リボンに、ボタンのキャプションとして表示されます。
  • description: (省略可能) 説明を指定します。これは Power BI Desktop 内の [外部ツール] リボンのボタンに、ヒントとして表示されます。
  • path: ツールの実行可能ファイルへの完全修飾パスを指定します。
  • arguments: (省略可能) ツールの実行可能ファイルの起動時に指定する必要があるコマンド ライン引数の文字列を指定します。 次の任意のプレースホルダーを使用できます。
    • %server%: インポートされた、または DirectQuery のデータ モデルに対する Analysis Services 表形式のローカル インスタンスのサーバー名とポート番号に置き換えられます。
    • %database%: インポートされた、または DirectQuery のデータ モデルに対する Analysis Services 表形式のローカル インスタンスでホストされるモデルのデータベース名に置き換えられます。
  • 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 スクリプトでは、Server および Database パラメーターをコンソールに出力します。

[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 要素は、data: プレフィックスのないデータ URI を受け取ります。 たとえば、1 ピクセルのマゼンタ png 画像のデータ URI は次のようになります。

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsEAAA7BAbiRa+0AAAANSURBVBhXY/jH9+8/AAciAwpql7QkAAAAAElFTkSuQmCC

前の pbitool.json の例に示すように、data: プレフィックスは必ず削除してください。

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