Create Power BI PBIR visuals from templates. Use when users need to add visuals (cards, charts, tables, slicers, maps) to Power BI Enhanced Report Format projects. Handles template selection, placeholder substitution, measure/column binding, and visual.json generation.
Creates Power BI visuals in PBIR projects from templates. Use when users need to add cards, charts, tables, or maps to report pages. Handles template selection, data binding, and visual.json generation with proper GUIDs.
/plugin marketplace add cn-dataworks/pbir-visuals/plugin install cn-dataworks-pbir-visuals@cn-dataworks/pbir-visualsThis skill inherits all available tools. When active, it can use any tool Claude has access to.
Create Power BI visuals for PBIR (.Report folder) projects using validated templates.
Use when the user wants to:
Search visual-templates/ in this plugin for available templates:
| Template | Visual Type | Use Case |
|---|---|---|
card-single-measure.json | Card | Single KPI display |
line-chart-category-y.json | Line Chart | Trend over category |
line-chart-multi-y.json | Line Chart | Multiple measures on Y |
line-chart-with-series.json | Line Chart | Category + legend series |
bar-chart-category-y.json | Bar Chart | Horizontal bars |
bar-chart-with-series.json | Bar Chart | Grouped/stacked bars |
clustered-column-multi-measure.json | Column Chart | Side-by-side columns |
table-basic.json | Table | Columnar data |
matrix-basic.json | Matrix | Pivot table |
pie-chart.json | Pie Chart | Part-to-whole |
scatter-bubble-chart.json | Scatter/Bubble | X-Y relationship |
azure-map-gradient.json | Azure Map | Filled regions |
azure-map-bubble.json | Azure Map | Bubble markers |
slicer-between-date.json | Slicer | Date range filter |
slicer-dropdown.json | Slicer | Dropdown selection |
slicer-list-multiselect.json | Slicer | Multi-select list |
image-static.json | Image | Static logo/image |
Ask the user:
# Find matching template
Glob: visual-templates/*.json
# Read template
Read: visual-templates/[selected-template].json
Replace {{PLACEHOLDER}} values:
Common:
{{VISUAL_NAME}} - Unique identifier (e.g., TotalSalesCard){{X}}, {{Y}} - Position coordinates{{WIDTH}}, {{HEIGHT}} - Dimensions{{Z}} - Z-order (typically 2000+){{TAB_ORDER}} - Keyboard navigation order{{TITLE}} - Visual title text{{FILTER_GUID}} - Generate with secrets.token_hex(10)Data Bindings:
{{TABLE_NAME}}, {{MEASURE_NAME}} - Primary measure{{CATEGORY_TABLE}}, {{CATEGORY_COLUMN}} - X-axis dimension{{SERIES_TABLE}}, {{SERIES_COLUMN}} - Legend/seriesCreate folder structure:
.Report/definition/pages/[PageGUID]/visuals/[VisualGUID]/visual.json
Generate GUID: VisualContainer + 8 random hex digits
Before writing, verify:
User request: "Add a Total Sales card to the Dashboard page"
Process:
visual-templates/card-single-measure.json{{VISUAL_NAME}} → "TotalSalesCard"
{{TABLE_NAME}} → "Fact_Sales"
{{MEASURE_NAME}} → "Total Sales"
{{TITLE}} → "Total Sales"
{{X}} → "24"
{{Y}} → "80"
{{WIDTH}} → "300"
{{HEIGHT}} → "180"
{{Z}} → "2000"
{{TAB_ORDER}} → "0"
{{FILTER_GUID}} → "a1b2c3d4e5f6789012ab"
{{FONT_SIZE}} → "32"
{{DISPLAY_UNITS}} → "1"
.Report/definition/pages/ReportSection.../visuals/VisualContainerABCD1234/visual.jsonMeasure reference:
{
"field": {
"Measure": {
"Expression": { "SourceRef": { "Entity": "TableName" } },
"Property": "Measure Name"
}
},
"queryRef": "TableName.Measure Name",
"nativeQueryRef": "Measure Name"
}
Column reference:
{
"field": {
"Column": {
"Expression": { "SourceRef": { "Entity": "TableName" } },
"Property": "column_name"
}
},
"queryRef": "TableName.column_name",
"nativeQueryRef": "column_name",
"active": true
}
All templates use PBIR schema version 2.4.0:
https://developer.microsoft.com/json-schemas/fabric/item/report/definition/visualContainer/2.4.0/schema.json
queryState/projections structure (not legacy config blobs)