plugins/lobbi-bi-reports/skills/power-bi-builder/SKILL.md
Design Power BI report and visual specifications for executive reporting on claims, loan pipeline, premium production, and financial services KPI tracking.
npx skillsauth add markus41/claude plugins/lobbi-bi-reports/skills/power-bi-builderInstall 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.
Produce a complete Power BI report design specification. This skill generates the design document that a Power BI developer uses to build the report. Every visual, measure, and configuration decision is made explicitly. No generic placeholder content.
State clearly:
Connection mode decision:
| Mode | Use When | |------|----------| | Import | Data is < 1 GB, refresh frequency is acceptable at 8x/day or less, complex DAX measures needed | | DirectQuery | Near-real-time data required (operations), data is > 1 GB, source system is SQL Server / Azure SQL | | Composite | Mix: some tables imported (slow-changing dimensions) and some DirectQuery (fact tables) |
For most insurance and financial services management reporting: Import mode with daily or hourly refresh is appropriate and provides best performance. Use DirectQuery only when the business explicitly requires same-hour data.
Data sources (list each):
| Source | Type | Connection String / URL | Refresh Frequency | Tables / Endpoints Used | |--------|------|------------------------|------------------|------------------------| | Agency Management System | SQL Server | Server=ams-db.firm.local; Database=AMS_Prod | Daily at 2 AM | dbo.Policies, dbo.Clients, dbo.Producers | | SharePoint List | SharePoint Online | https://[tenant].sharepoint.com/sites/ops | On refresh | Renewal Tracker list | | Excel workbook | SharePoint file | /sites/ops/Shared Documents/Targets.xlsx | On refresh | Targets sheet |
Gateway: On-premises data gateway required for SQL Server, local files, or any source behind the corporate firewall. Specify: cluster name, installed on which server, which service account runs the gateway service.
Calculated columns vs. measures decision rule:
Key tables needed (describe, detailed schema in data-model-mapper skill):
Design each report page. Typical report has 3-6 pages.
Page template:
Page Name: [Noun phrase — what the user sees on this page]
Purpose: [One sentence]
Audience: [All users / Specific role]
Row-Level Security Applied: Yes / No
Slicer Panel (left or top bar, ~15% of canvas width):
- Date Range: Between slicer on Date[Date]
- [Dimension 1]: Dropdown slicer
- [Dimension 2]: Dropdown slicer
- Clear All Filters button: Bookmark action
Section 1 — KPI Cards (top row):
Visual: Card (New)
Metrics displayed (one card per metric):
- [Metric name]: [Measure name], format: $#,##0 or #,##0.0%
- Reference label: [Comparison: vs. prior period / vs. target]
- Conditional formatting: Green if >= target, Red if < 90% of target
Section 2 — Trend (main chart):
Visual: Line chart
X-axis: Date[Month-Year]
Y-axis: [Primary measure]
Secondary Y-axis: [Secondary measure if dual-axis needed]
Legend: [Dimension to break by]
Data labels: On for last data point only
Markers: On
Reference line: Target value (constant or from measure)
Section 3 — Breakdown (supporting chart):
Visual: Clustered bar chart / Stacked bar / Table — specify which and why
Axis: [Dimension]
Values: [Measures]
Sorted by: [Measure] descending
Conditional formatting on value column: Data bars or color scale
Section 4 — Detail Table (bottom, collapsible):
Visual: Table
Columns: [List column names and measures]
Row subtotals: On / Off
Column totals: On / Off
Conditional formatting: [Which columns get highlighting]
Slicers: Place all slicers in a consistent location across all pages. Use a vertical panel on the left for desktop viewing. Sync all slicers across pages using the Sync Slicers pane.
| Slicer | Field | Type | Default Selection | |--------|-------|------|------------------| | Date Range | Date[Date] | Between (date range) | Current year to today | | Producer | Producer[ProducerName] | Dropdown, multi-select | All | | Line of Business | Product[LineOfBusiness] | Dropdown, multi-select | All | | State | Geography[State] | Dropdown, multi-select | All |
Drill-through pages: Configure drill-through on the detail table or bar chart so users can right-click a producer or policy and navigate to a detail page showing all records for that selection.
Report-level filters (hidden from users): Filter out test records, inactive carriers, and records with invalid status codes. Document each hidden filter.
For every metric displayed in the report, write the complete DAX formula:
-- Written Premium (YTD)
Written Premium YTD =
CALCULATE(
SUM(Policies[WrittenPremium]),
DATESYTD(Date[Date])
)
-- Written Premium (Prior Year YTD)
Written Premium PYTD =
CALCULATE(
[Written Premium YTD],
SAMEPERIODLASTYEAR(Date[Date])
)
-- Year-over-Year Growth %
Written Premium YoY % =
DIVIDE(
[Written Premium YTD] - [Written Premium PYTD],
[Written Premium PYTD],
BLANK()
)
-- vs. Target %
Written Premium vs Target % =
DIVIDE(
[Written Premium YTD],
SUM(Targets[PremiumTarget]),
BLANK()
)
-- Policy Count (Active)
Active Policy Count =
CALCULATE(
COUNTROWS(Policies),
Policies[Status] = "Active"
)
-- Retention Rate (12-month rolling)
Retention Rate 12M =
DIVIDE(
CALCULATE(
COUNTROWS(Policies),
Policies[Status] = "Active",
DATESINPERIOD(Date[Date], LASTDATE(Date[Date]), -12, MONTH)
),
CALCULATE(
COUNTROWS(Policies),
DATEADD(Date[Date], -12, MONTH)
),
BLANK()
)
Write a complete measure for every KPI card and chart axis value in the report. Include formatting string comments.
| Visual | Column/Measure | Format Type | Rules | |--------|---------------|-------------|-------| | KPI Cards | vs. Target % | Background color | >= 100%: green #107C10; 90-99%: amber #FFB900; < 90%: red #D13438 | | Producer table | Retention Rate | Color scale | 3-color: red at 70%, white at 85%, green at 100% | | State map | Written Premium | Color saturation | Light to dark blue based on value | | Detail table | Days Open (claims) | Background color | > 30 days: amber; > 60 days: red |
For each page, configure the mobile layout (View > Mobile layout in Power BI Desktop):
If the report will be distributed to producers or agents who should only see their own data:
RLS role definition (in Power BI Desktop > Modeling > Manage Roles):
Role: Producer
Table: Producers
Filter: [ProducerEmail] = USERPRINCIPALNAME()
Testing: Create a test role for each RLS scenario. Verify that a producer logging in sees only their records and that totals reflect their filtered data, not firm-wide totals.
Publish and assign: After publishing to Power BI Service, go to the dataset > Security > assign Azure AD groups to the Producer role. Do not assign to the Admin role (admins see all data).
Deliver as:
development
Enhanced plan-authoring skill with Pre-Writing context gathering, task metadata, non-TDD templates, Red Flags, telemetry, and an automated plan linter. Use when you have a spec or requirements for a multi-step task, before touching code.
tools
Documentation intelligence engine with graph-based API docs, algorithm library, and drift detection
tools
Ultraplan cloud planning — kick off a plan in the cloud from your terminal, review and revise in the browser, then execute remotely or send back to CLI
tools
--- name: mcp description: Configure MCP servers for Claude Code — stdio vs HTTP, authentication, Tools/Resources/Prompts distinction, channels (CI webhook, mobile relay, Discord bridge, fakechat), and cost of always-loaded tools. Use this skill whenever adding an MCP server, debugging connection issues, choosing between MCP Tools vs Prompts vs Resources, installing channel servers, or managing .mcp.json. Triggers on: "MCP server", "mcp config", "add Obsidian MCP", "install context7", "channels"