다음을 통해 공유


외부 도구 등록

일부 도구는 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%: 가져온/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 스크립트는 서버 및 데이터베이스 매개 변수를 콘솔에 출력합니다.

[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를 사용합니다. 예를 들어 1픽셀 magenta 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(); 
}