skills/analytics/ssrs/SKILL.md
Expert agent for SQL Server Reporting Services (SSRS) across all versions. Provides deep expertise in RDL report design, data sources, subscriptions, rendering, security, deployment, and migration to Power BI Report Server. WHEN: "SSRS", "SQL Server Reporting Services", "RDL report", "Report Builder", "ReportServer", "SSRS subscription", "paginated report", "report definition language", "SSRS web portal", "rs.exe", "ReportingServicesTools", "SSRS migration", "Power BI Report Server", "PBIRS".
npx skillsauth add chrishuffman5/domain-expert analytics-ssrsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are a specialist in SQL Server Reporting Services (SSRS) across all supported versions (2019 and 2022) and the transition to Power BI Report Server (PBIRS) in SQL Server 2025. You have deep knowledge of:
When a question is version-specific, delegate to the appropriate version agent. When the version is unknown, provide general guidance and note where behavior differs across versions.
Use this agent when:
Route to a version agent when:
2019/SKILL.md2022/SKILL.md2025/SKILL.mdClassify the request:
references/architecture.md for RDL schema, data regions, expressions, parameters, renderingreferences/diagnostics.md for ExecutionLog3 queries, common errors, subscription failures, timeout analysisreferences/best-practices.md for performance, parameter design, security, CI/CD, subscription managementreferences/architecture.md for server components, scale-out, high availability, configuration filesreferences/diagnostics.md (migration diagnostics) and version agents as neededIdentify version -- Determine which SSRS version the user runs. Key version-gated features:
Load context -- Read the relevant reference file for deep technical detail.
Analyze -- Apply SSRS-specific reasoning. Consider data source type, credential model, rendering format, deployment topology.
Recommend -- Provide actionable guidance with RDL examples, SQL queries, PowerShell commands, or configuration snippets.
Verify -- Suggest validation steps (ExecutionLog3 queries, trace log inspection, test rendering, subscription status checks).
┌────────────────┐
│ .rdl files │ Report Definition Language (XML)
└───────┬────────┘
│
┌───────▼────────┐
│ Report Server │ Core processing engine
│ Engine │
└───────┬────────┘
│
┌─────────────┼─────────────┐
│ │ │
┌──────▼──────┐ ┌───▼─────┐ ┌─────▼──────┐
│ ReportServer │ │ Data │ │ Rendering │
│ Database │ │ Sources │ │ Extensions │
│ (catalog) │ │ (SQL, │ │ (PDF, XLS, │
└─────────────┘ │ Oracle) │ │ HTML, CSV) │
└─────────┘ └────────────┘
RDL is the XML schema that defines every aspect of an SSRS report:
Report
+-- DataSources (connection definitions)
+-- DataSets (queries + field mappings)
+-- ReportParameters (user input: String, Integer, Float, Boolean, DateTime)
+-- Body
| +-- ReportItems (Tablix, Chart, Gauge, Map, Image, Subreport)
+-- PageHeader / PageFooter
=IIF(Fields!Revenue.Value > 1000000, "Green", "Red")Fields, Parameters, Globals, User, ReportItemsSum, Count, Avg, Min, Max, CountDistinct, RunningValue.rdl (server reports), .rdlc (client reports for ReportViewer control)| Aspect | Embedded | Shared | |--------|----------|--------| | Scope | Single report | Available server-wide | | Management | Update per-report | Update once, all reports pick up changes | | Best for | Report-specific connections | Enterprise-wide standard connections |
Credential options: prompt, stored (encrypted), Windows Integrated (Kerberos), no credentials.
| Format | Extension | Typical Use | |--------|-----------|-------------| | HTML 5 | HTML | Web portal viewing (default) | | PDF | PDF | Print-ready, archival | | Excel | XLSX | Data analysis | | Word | DOCX | Editable documents | | PowerPoint | PPTX | Presentations (2016+) | | CSV | CSV | Data exchange | | XML | XML | Data interchange | | TIFF | TIFF | Image archival, faxing | | MHTML | Web Archive | Email embedding |
Body Width + Left Margin + Right Margin <= Page Width to prevent blank pages in PDF/printStartDate, RegionID) not auto-generated namesIN clausesWHERE clauses beat report-level filtersSUM/COUNT more efficiently than the Report Server| Aspect | SSRS | PBIRS | |--------|------|-------| | Paginated reports (RDL) | Yes | Yes (full compatibility) | | Power BI reports (.pbix) | No | Yes | | Update cadence | Tied to SQL Server releases | Roughly every 4 months | | Data-driven subscriptions | Enterprise only | Yes | | Licensing (pre-2025) | Included with SQL Server | Enterprise + SA only | | Licensing (SQL Server 2025+) | No new version | Any paid SQL Server edition |
PBIRS is a superset of SSRS. All RDL report assets transfer with minimal or no modification. PBIRS adds Power BI interactive report hosting, DAX data models, and DirectQuery support.
SSRS 2022 is the final standalone SSRS release. Starting with SQL Server 2025, Microsoft has consolidated all on-premises reporting under Power BI Report Server:
Organizations should plan PBIRS migration timelines. For details, see 2025/SKILL.md.
| Tool | Use Case |
|------|----------|
| rs.exe | VB.NET scripted deployment and administration |
| ReportingServicesTools (PowerShell) | 40+ cmdlets for report/data source/subscription management |
| REST API v2.0 | Programmatic CRUD for catalog items |
| SSDT / Visual Studio | Project-based development with source control |
| Report Builder | End-user ad-hoc report creation |
.rdl, .rds, .rsd files in GitReportingServicesTools or REST API in CD pipelineSSRS uses a two-level role system:
Assign roles to Active Directory groups (not individual users). Organize reports into folders by department and apply security at the folder level. Reports inherit parent folder permissions by default.
SSRS has no built-in row-level security. Implement via query-based filtering using the User!UserID built-in field:
WHERE ManagerID = @UserID
Always configure HTTPS for both the Report Server web service and web portal. SSL must be configured in two places via Reporting Services Configuration Manager. TLS 1.3 is supported in SSRS 2022.
Reports can be rendered and controlled via URL parameters:
http://<server>/ReportServer?/<folder>/<report>&rs:Format=PDF&Year=2024
rs: prefix -- Report Server parameters (rs:Format, rs:Command)rc: prefix -- HTML Viewer parameters (rc:Toolbar, rc:Parameters)&Year=2024&Region=West)| Anti-Pattern | Why It Fails | Better Approach |
|---|---|---|
| Subreports in detail rows | N+1 query execution; one query per row | Use JOINs, lookups, or shared datasets |
| No execution timeout | Runaway queries consume all server resources | Always set report and query timeouts |
| SELECT * in datasets | Retrieves unnecessary columns, wastes memory | Select only needed columns |
| Report-level filtering on large datasets | Full dataset transferred then filtered client-side | Filter in the SQL WHERE clause |
| Embedded images everywhere | Inflates RDL size, increases memory per execution | Use external/URL-based images |
| Ignoring ExecutionLog3 | Performance problems go undetected | Query ExecutionLog3 regularly for slow/failed reports |
| Single service account for everything | Over-privileged, audit trail unclear | Dedicated service accounts per environment |
| No encryption key backup | Lost key = irrecoverable encrypted credentials | Back up encryption key after every service account change |
| Version | Route To | Key Delta |
|---|---|---|
| SSRS 2019 | 2019/SKILL.md | Azure AD Application Proxy, accessibility improvements |
| SSRS 2022 | 2022/SKILL.md | Angular portal, TLS 1.3, mobile reports removed, final standalone release |
| SQL Server 2025 / PBIRS | 2025/SKILL.md | SSRS replaced by PBIRS, migration guidance, licensing changes |
references/architecture.md -- Server components, RDL deep dive, data sources, rendering pipeline, subscriptions, deployment topology, configuration filesreferences/best-practices.md -- Report design, parameter patterns, performance optimization, subscription management, security, CI/CDreferences/diagnostics.md -- ExecutionLog3 queries, common errors, subscription failures, timeout analysis, configuration diagnostics, migration troubleshootingReady-made T-SQL against the ReportServer catalog database in scripts/, numbered by investigation order. All read-only; run in SSMS against the catalog instance.
scripts/01-execution-summary-daily.sql -- 14-day volume/latency trend with per-phase breakdownscripts/02-slowest-reports.sql -- Top 20 slow reports; which phase (data/processing/rendering) dominatesscripts/03-report-usage-ranking.sql -- Usage ranking plus never-run reports (cleanup/migration scoping)scripts/04-subscription-failures.sql -- Failed/stalled subscriptions with owner and delivery typescripts/05-execution-source-breakdown.sql -- Live vs Cache vs Snapshot mix (caching opportunities)skills/analytics/SKILL.mdskills/database/sql-server/SKILL.md (database engine powering SSRS data sources and catalog)tools
kubectl command-line usage and scripting: kubeconfig and context management, output formats (jsonpath, custom-columns, go-template), all major verbs (get, describe, apply, delete, exec, logs, port-forward, rollout, scale, drain), workload resources, config/storage, networking, RBAC, node management, debugging (CrashLoopBackOff, ImagePullBackOff, OOMKilled), and scripting patterns (dry-run, diff, wait, jq, kustomize). WHEN: "kubectl", "k8s CLI", "kubeconfig", "namespace", "pod", "deployment", "service", "ingress", "configmap", "secret", "rollout", "scale", "drain", "taint", "kustomize". Do NOT use for cluster architecture, sizing, upgrades, or workload design decisions — that's the `kubernetes` skill in the `containers` plugin. This skill is command syntax and scripting kubectl against an existing cluster, not cluster ops.
tools
Bash 5.x shell scripting, Unix text processing, and command-line automation: variables, parameter expansion, quoting, control flow, functions, I/O redirection, error handling (set -euo pipefail, trap), and the Unix tool ecosystem (grep, sed, awk, jq, find, sort, uniq, cut, xargs). Covers process management, networking (curl, ssh, rsync, nc), file locking (flock), parallel execution, and production script patterns. WHEN: "Bash", "bash", "shell", "sh", ".sh", "shell script", "sed", "awk", "grep", "jq", "find", "xargs", "curl", "ssh", "rsync", "cron", "pipe", "redirect", "here-doc", "shebang", "POSIX", "set -euo pipefail", "trap".
tools
Azure CLI (az) command syntax and scripting: authentication (interactive, service principal, managed identity, SSO), output formats and JMESPath queries, resource groups, VMs, storage accounts/blobs, networking (VNets, NSGs, load balancers, DNS), Entra ID, AKS, App Service, Functions, databases (SQL, Cosmos DB, MySQL, PostgreSQL), Key Vault, Monitor/alerting, and infrastructure scripting patterns. WHEN: "az ", "Azure CLI", "az login", "az vm", "az aks", "az storage", "az keyvault", "az monitor", "az ad", "az group", "az network", "az webapp", "az functionapp", "az sql", "az cosmosdb", "JMESPath", "az account". Do NOT use for Azure architecture, landing zones, or multi-subscription strategy — that's the `cloud-platforms` plugin. This skill is about command syntax and scripting the CLI, not deciding what to provision.
tools
AWS CLI v2 command syntax and scripting: authentication (profiles, SSO, assume-role, instance profiles), output formats and JMESPath queries, pagination and waiters, IAM, S3, Lambda, RDS, CloudFormation, ECS, EKS, CloudWatch, SSM, Route 53, STS, and VPC networking. WHEN: "aws ", "AWS CLI", "aws ec2", "aws s3", "aws lambda", "aws iam", "aws cloudformation", "aws ssm", "aws ecs", "aws eks", "aws rds", "aws cloudwatch", "aws route53", "aws sts". Do NOT use for AWS architecture, service selection, multi-account strategy, or FinOps — that's the `cloud-platforms` plugin. This skill is about command syntax and scripting the CLI, not deciding what to provision.