deneb-visuals

Author Vega and Vega-Lite specs for Deneb custom visuals in Power BI PBIR reports.

6|3|Updated Jul 4, 2026
One-click install
npx skills add https://github.com/InsightfulAnalytics/PBI_Agentic_Dev --skill deneb-visuals-insightfulanalytics
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: deneb-visuals
Source: https://github.com/InsightfulAnalytics/PBI_Agentic_Dev/tree/main/plugins/custom-visuals/skills/deneb-visuals
Command: npx skills add https://github.com/InsightfulAnalytics/PBI_Agentic_Dev --skill deneb-visuals-insightfulanalytics

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve? Creating Deneb custom visuals in Power BI requires hand-writing Vega or Vega-Lite JSON specs, embedding them as escaped single-quoted literals inside PBIR visual.json files, and navigating version differences between Deneb 1.9 and 2.0 — all of which is error-prone and poorly documented. ## Core Features & Use Cases - Spec authoring and injection: Write Vega/Vega-Lite specs, bind fields to the single dataset role, and embed them into visual.json with correct escaping rules (doubled apostrophes, stripped $schema). - Deneb 2.0 migration guidance: Handle container signals (pbiContainerWidth vs denebContainer), field parameter consolidation, supporting-field configuration, and template usermeta v1/v2 formats. - Interactivity and theming: Configure cross-filtering, cross-highlighting, tooltips, context menus, and Power BI theme integration via pbiColor and pbiFormat expression functions. - Use Case: A report developer needs a bullet chart that native Power BI visuals cannot render. The skill produces a Vega-Lite spec, binds the model fields, embeds it into the PBIR visual.json, registers the custom visual in report.json, and validates the result with jq and deneb_spec.py audit. ## Quick Start Ask the agent to create a Deneb bar chart visual in your PBIP report using the Category column and Sales measure from your semantic model.

Frequently Asked Questions about deneb-visuals

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I create a Deneb visual in a Power BI PBIR report?▼

Create a visual.json with visualType deneb7E15AEF80B9E4D4F8E12924291ECE89A, bind fields to the single dataset role, write a Vega or Vega-Lite spec, and embed it as a single-quoted literal in objects.vega jsonSpec. Register the GUID in report.json publicCustomVisuals, then validate with jq and deneb_spec.py audit.

Should I use Vega or Vega-Lite for Deneb specs?▼

Prefer Vega-Lite for new Deneb visuals because it is more concise and covers most chart types. Use Vega only when you need Vega-only features such as signals, event streams, custom projections, force layouts, or advanced cross-filtering with pbiCrossFilterApply.

What changed in Deneb 2.0 for Power BI report authors?▼

Deneb 2.0 raises the row window to 30,000, adds denebContainer sizing signals, field parameter consolidation, continuous view, and per-field supporting-field configuration. Legacy pbiContainerWidth signals still work but are rewritten on parse; unstamped visuals keep migrated 1.x defaults.

Why does my Deneb visual render blank with no errors?▼

Blank rendering usually means field names in the spec do not match the display labels in the Values well, or the projection lacks the right displayName over nativeQueryRef. The query succeeds silently and spec references resolve to undefined, so check the debug Source tab with Ctrl+Alt+6.

Can Deneb load external images or data from URLs?▼

No. The certified Deneb build cannot fetch any external resource; blocked images fail quietly as blank base64 PNGs. Only data: URIs work, and the SVG prefix must be data:image/svg+xml;charset=utf-8, since the ;utf8, form is rejected.

How do I enable cross-filtering from a Deneb visual?▼

Set enableSelection true in objects.vega and handle the __selected__ field (on, off, neutral) in encode blocks. Simple mode auto-resolves up to 250 points; advanced mode is Vega-only and uses pbiCrossFilterApply and pbiCrossFilterClear from signal update expressions.