외부 도구 등록
일부 도구는 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 내의 외부 도구 리본에서 단추 아이콘으로 렌더링될 이미지 데이터를 제공합니다. "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
지정된 위치에서 확장명이 .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'
아이콘 데이터 URI
외부 도구 리본에 아이콘을 포함하려면 pbitool.json 등록 파일에 iconData 요소를 포함해야 합니다.
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();
}