agentsclimarketplace

Pbi tester

Skill yujiyamane/pbi-ai-skills/.github/skills/pbi-tester

The Power BI Skill Pack for Claude Code

Install
npx -y skills add yujiyamane/pbi-ai-skills --skill pbi-tester

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Static quality analysis of a Power BI Project (PBIP/PBIR/TMDL). Runs 50+ checks across 10 categories without requiring PBI Desktop, Power BI Service, or any external tools. Produces a pass/fail report with actionable findings. Use when user says: 'test my dashboard', 'check PBI quality', 'run PBI tester', 'validate PBIP', 'audit dashboard', 'static analysis', 'quality check', 'lint my report', or provides a .pbip or PBIP folder path with quality check intent.

SKILL.md

9.5 KB, as published. Nobody here has run it

PBI Tester

Overview

Static PBIR/TMDL quality analysis — no external tools, no PBI Desktop, no Power BI Service connection required. Reads the raw JSON/TMDL/PBIR files directly and runs 50+ checks across 10 categories.

Trigger phrases: test my dashboard, check PBI quality, run PBI tester, validate PBIP, audit dashboard, static analysis, quality check, lint my report, PBI tester


Workflow

1. Locate the PBIP

Accept either:

  • A .pbip file path
  • A folder path containing a .pbip file

Resolve the .Report/ and .SemanticModel/ subfolders from the project root.

2. Run all 50+ checks

Execute checks across all 10 categories below. For each check, record:

  • Category
  • Check name
  • Status: ✅ PASS / ❌ FAIL / ⚠️ WARN / ℹ️ INFO
  • Finding (specific detail if FAIL or WARN)
  • Recommendation (what to fix)

Check Categories

1. Layout & Visual Design (10 checks)

#CheckPASS condition
L1Page count1–15 pages (WARN if > 15)
L2Hidden pagesNo hidden pages without a drillthrough purpose
L3Visual count per page≤ 25 visuals per page (WARN if > 20)
L4Overlapping visualsNo visuals with identical position coordinates
L5Canvas size consistencyAll pages use the same canvas width/height
L6Blank titlesNo visible visuals with empty or whitespace-only title
L7Tooltips enabledTable/matrix visuals have tooltips enabled
L8Drillthrough pagesDrillthrough pages have at least one drillthrough field configured
L9Mobile layoutIf mobile layout exists, all key visuals are included
L10Bookmark countWARN if > 20 bookmarks (navigation complexity)

2. Text Quality (8 checks)

#CheckPASS condition
T1Title casingVisual titles use Title Case or Sentence case (not ALL CAPS)
T2Title lengthVisual titles ≤ 80 characters
T3Axis label clarityAxis titles present on all chart visuals
T4Legend labelsLegends have non-default labels (not "Legend")
T5Slicer headersSlicers have descriptive header text
T6Placeholder textNo "Sample Text" or "Lorem ipsum" in any title/subtitle
T7Subtitle presentReport-level subtitle/description field is populated
T8Alt textWARN if alt text is empty on any visual (accessibility)

3. Format Strings (6 checks)

#CheckPASS condition
F1Currency columnsColumns with dollar/currency signals have $#,0.00 or $#,0 format
F2Percentage columnsColumns with pct/rate/ratio signals have 0.0% or 0% format
F3Date columnsDate columns have an explicit format string (not auto)
F4Integer countsCount/headcount columns use #,0 or #,##0 (no decimals)
F5Blank format stringsNo measure has an empty format string
F6Locale consistencyAll format strings use the same decimal/thousands separators

4. Accessibility (5 checks)

#CheckPASS condition
A1Colour contrastNo white text on light background or black text on dark background (heuristic check)
A2Alt text on imagesImage visuals have alt text
A3Tab orderTab order is configured (not default sequential)
A4Focus trapNo visuals overlap the reading order flow
A5Font sizeNo text smaller than 9pt in any visible visual title

5. Design Consistency (6 checks)

#CheckPASS condition
D1Theme appliedA non-default theme JSON is applied
D2Font consistency≤ 3 distinct font families used across all visuals
D3Colour palette≤ 8 distinct hex colours used in visual fills
D4Background fillAll pages use a consistent background colour
D5Border consistencyBorder style (on/off, width, radius) is consistent across card-type visuals
D6Padding consistencyPadding values consistent within the same visual type

6. TMDL Model Quality (7 checks)

#CheckPASS condition
M1Table descriptionsAll tables have a non-empty description
M2Column descriptionsWARN if > 20% of visible columns lack descriptions
M3Measure descriptionsWARN if any measure has no description
M4Hidden unused columnsNo columns marked isHidden that are never referenced by a measure or visual
M5Calculated columnsWARN if calculated columns exist (prefer measures)
M6Format string on measuresAll measures have an explicit format string
M7Naming conventionsTables, columns, measures use Title Case or consistent snake_case (no mix)

7. Relationships (5 checks)

#CheckPASS condition
R1Bidirectional relationshipsNo bidirectional cross-filter relationships (WARN — can cause ambiguity)
R2Inactive relationshipsNo inactive relationships (or document why they exist)
R3Many-to-manyWARN if any many-to-many relationships exist
R4Orphan tablesNo tables with zero relationships (unless intentional parameter table)
R5Date table markedA date table is marked as date table in the model

8. Security (4 checks)

#CheckPASS condition
S1RLS roles definedAt least one Row Level Security role is defined (WARN if none — may be intentional)
S2RLS test coverageIf RLS roles exist, they have at least one DAX filter rule
S3Sensitive column namesWARN if any column name matches: password, ssn, dob, salary, bank_account
S4Direct query credentialsIf DirectQuery source detected, WARN that credentials are not stored in PBIP

9. Performance Signals (5 checks)

#CheckPASS condition
P1Measure complexityWARN if any measure DAX contains > 10 nested function calls
P2CALCULATE nestingWARN if CALCULATE is nested > 3 levels
P3ALL() usageWARN if ALL() without a specific column is used on large tables
P4Large M queriesWARN if any M query exceeds 200 lines
P5AggregationsINFO if no explicit aggregations are defined (opportunity)

10. Cross-Layer Consistency (4 checks)

#CheckPASS condition
X1Unused measuresWARN if measures defined in the model are not used in any visual
X2Visual references validAll column/measure references in visuals exist in the semantic model
X3Page filter referencesAll page-level filters reference valid fields
X4Report filter referencesAll report-level filters reference valid fields

Output Format

Summary Header

PBI Tester Report
Dashboard: <dashboard name>
Path: <pbip path>
Date: <today>

Results: XX/54 PASS | XX WARN | XX FAIL | XX INFO

Results Table

| # | Category | Check | Status | Finding |
|---|---|---|---|---|
| L1 | Layout | Page count | ✅ PASS | 8 pages |
| T1 | Text | Title casing | ❌ FAIL | "EXECUTIVE SUMMARY" on page 2 — use Title Case |
| M1 | TMDL | Table descriptions | ⚠️ WARN | 3/5 tables missing descriptions |

Action Items

Group all FAIL and WARN items:

## Action Items

### ❌ FAIL (must fix)
1. [T1] Title casing — "EXECUTIVE SUMMARY" on page 2. Change to "Executive Summary".
2. [F5] Blank format strings — Measure "Total Cost" has no format string. Add `$#,0.00`.

### ⚠️ WARN (recommended)
1. [M1] Table descriptions — Fact, Dim_Date, Dim_Region missing descriptions.
2. [R1] Bidirectional relationship — Fact ↔ Dim_Product is bidirectional. Review necessity.

Rules

  • No external tools required — reads PBIP files directly (JSON, TMDL, PBIR format).
  • Never modify the PBIP — read-only analysis only.
  • Show full path for every finding so the user knows exactly where to look.
  • FAIL items are blockers for production deployment; WARN items are recommendations.
  • If the PBIP uses PBIR-Legacy format (single report.json), apply the same checks but note reduced granularity for layout checks.

TMDL Direct-Edit Constraints (CRITICAL — do not violate)

When asked to fix findings after running this tester, the following TMDL edits will break PBI Desktop and must never be attempted:

What NOT to doWhyCorrect fix
Add description: to table blocksdescription is not a supported TMDL property for tables in PBI DesktopSet via PBI Desktop UI: Model View → select table → Properties pane
Add description: to measure blocksSame — unsupported in current TMDL parserSet via PBI Desktop UI: Model View → select measure → Properties pane
Add description: to column blocksSameSet via PBI Desktop UI: Model View → select column → Properties pane
Add isDateTable to table blockRequires specific TMDL syntax confirmed by round-tripping through PBI DesktopUse PBI Desktop: Table Tools → Mark as Date Table

For M1/M2/M3 check findings: always recommend "manual fix required — use PBI Desktop UI" and never attempt to write description: lines into .tmdl files directly.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.