paginated-report

Author, validate, publish, and render Power BI paginated reports in RDL format.

887|131|Updated Jan 15, 2026
One-click install
npx skills add https://github.com/data-goblin/power-bi-agentic-development --skill paginated-report
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: paginated-report
Source: https://github.com/data-goblin/power-bi-agentic-development/tree/main/plugins/paginated-reports/skills/paginated-report
Command: npx skills add https://github.com/data-goblin/power-bi-agentic-development --skill paginated-report

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes scripts (resource) and references (resource) and assets (resource) components.

What problem does it solve?

Hand-authoring Power BI paginated report (.rdl) XML is error-prone: element order breaks files silently, DAX and parameter wiring fail only at render time, and preview never matches PDF output. This Skill provides the RDL format rules, starter templates, validation scripts, and a publish-and-render loop so reports actually work in the Power BI service.

Core Features & Use Cases

  • RDL authoring guidance: Full reference for the 2016 RDL schema, element ordering rules, tablix structures, parameters, and data source connection strings (PBIDATASET, SQL, Enter Data).
  • Validation and publishing scripts: A stdlib-only Python validator plus Bash/PowerShell scripts that publish via the Power BI Imports API and export rendered output (PDF, Excel, etc.) to confirm the report works.
  • Starter templates: Ready-to-edit .rdl assets for Enter Data, semantic model (DAX/TREATAS), and Azure SQL sources, plus the Fabric Git .platform sidecar.
  • Use Case: A user asks to build a print-perfect invoice report connected to a Power BI semantic model; the Skill interviews for requirements, copies the semantic-model starter, validates the XML, publishes to a capacity-backed workspace, and renders a PDF to verify.

Quick Start

Ask the agent to create a paginated report from your semantic model, for example: build an invoice-style paginated report from my Sales model and render it to PDF.

Frequently Asked Questions about paginated-report

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

FAQPage Schema
How do I create a Power BI paginated report from a semantic model?

Copy the semantic-model-starter.rdl template, fill in the dataset GUID and workspace/model names, and write the DAX query using the PBIDATASET provider with a TREATAS parameter. Validate with validate_rdl.py, publish with publish_rdl.sh, then render with export_rdl.sh to confirm.

How do I publish an .rdl file to a Power BI workspace?

Use the publish_rdl.sh or publish_rdl.ps1 script, which uploads via the Power BI Imports API multipart post and polls the import to completion. The workspace must be backed by Premium, Embedded, or Fabric capacity for the report to run.

Why does my hand-edited RDL file fail to load?

The most common cause is out-of-order XML elements; the report processor expects the conventional child order and fails without a useful error, and XSD validation will not catch it. Run validate_rdl.py after every structural edit to catch ordering, name-collision, and tablix count errors.

What is the difference between Power BI paginated reports and SSRS?

Both use the same RDL format and Report Builder tool, but Power BI paginated reports run in the service with embedded data sources only, a PBIDATASET provider for semantic models, and no shared data sources, snapshots, or data-driven subscriptions. SSRS-era samples must be converted to embedded sources and the 2016 schema before publishing.

Why does my paginated report PDF have blank pages?

Blank pages appear when body width plus left and right margins exceeds the page width, causing hard renderers like PDF to emit overflow pages. For landscape Letter with 0.5in margins, keep body width at or under 10 inches.

Can I test a paginated report layout without a live data source?

Yes, use the Enter Data connector, which embeds a fixed typed dataset directly in the .rdl with no connection or gateway. Iterate on layout against the inline data, then swap in the real data source while keeping field names identical.