ลงทะเบียนเครื่องมือภายนอก

เครื่องมือบางอย่างต้องลงทะเบียนด้วย 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 Tabular สําหรับแบบจําลองข้อมูลที่นําเข้า/DirectQuery
    • %database%: แทนที่ด้วยชื่อฐานข้อมูลของแบบจําลองที่โฮสต์ในอินสแตนซ์ภายในเครื่องของ Analysis Services Tabular สําหรับแบบจําลองข้อมูลที่นําเข้า/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 ต้องมีไอคอนองค์ประกอบข้อมูล

Screenshot of the external tools ribbon with the tool icons.

ไอคอนองค์ประกอบข้อมูลใช้ URI ข้อมูลโดยไม่มี ข้อมูล: คํานําหน้า ตัวอย่างเช่น 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(); 
}