standardize-naming-conventions
This Claude Code skill standardizes naming conventions in Power BI semantic models stored as TMDL files by auditing and reorganizing tables, columns, measures, and display folders for consistency. Use it when users request naming convention standardization, cleanup, or auditing across their Power BI models, ensuring names follow human-readable, business-aligned standards while considering downstream dependencies and organizational terminology.
git clone --depth 1 https://github.com/data-goblin/power-bi-agentic-development /tmp/standardize-naming-conventions && cp -r /tmp/standardize-naming-conventions/plugins/semantic-models/skills/standardize-naming-conventions ~/.claude/skills/standardize-naming-conventionsSKILL.md
# Standardize Naming Conventions Interactive workflow for auditing and standardizing naming conventions in Power BI semantic models stored as TMDL files. Ensures tables, columns, measures, and display folders follow human-readable, consistent, business-aligned naming standards. ## Primary Workflow ### Phase 1: Discover the Model Locate the TMDL files. Ask the user for the path to the `.SemanticModel/definition/` directory if not obvious from context. Then scan the model structure: ```bash # Count tables and get an overview ls <path>/tables/*.tmdl ``` Read all table TMDL files to build a complete picture of current naming patterns. Focus on: - Table names (check for DIM_, FACT_, or other technical prefixes) - Measure names (check for abbreviations, programming conventions, inconsistent syntax) - Column names (check for CamelCase, snake_case, abbreviations) - Display folder structure (check for organization and consistency) - Presence of descriptions (`///` comments) ### Phase 2: Understand Business Context **CRITICAL: Do not rename anything without understanding the business terminology.** Use `AskUserQuestion` to gather context: 1. **Business terminology**: "What terminology does your organization use for key metrics? For example, do you call it Revenue, Turnover, Sales, or Gross Sales?" 2. **Existing conventions**: "Do you have any documented naming conventions or standards already?" 3. **Period conventions**: "How do you typically refer to prior periods? (e.g., 1YP, PY, Prior Year, Last Year)" 4. **Unit conventions**: "How do you typically express units in measure names? (e.g., parentheses like (%), (Value), (Quantity))" 5. **Downstream impact**: "Are there downstream reports connected to this model that would need visual rebinding after renaming?" Adapt the naming rules to the user's business context. The rules in `references/naming-rules.md` are defaults -- override them when the user's organization has established conventions. ### Phase 3: Audit and Report Before making changes, produce an audit report. Present a markdown table showing each proposed rename: ``` | Object Type | Current Name | Proposed Name | Issues Found | |-------------|-------------|---------------|-------------| | Table | FACT_Invoices | Invoices | Technical prefix | | Measure | NetSls | Net Sales | CamelCase, abbreviation | | Column | shp_dt | Ship Date | snake_case, abbreviation | ``` Group findings by issue type: - **Programming conventions**: CamelCase, snake_case, UPPER_CASE - **Abbreviations/acronyms**: Shortened or opaque names - **Inconsistent syntax**: Mixed period, unit, or aggregation patterns - **Technical prefixes**: DIM_, FACT_, STG_ on tables - **Missing descriptions**: Objects without `///` docstrings - **Disorganized folders**: Missing or flat display folder hierarchy Ask the user to confirm or adjust the proposed renames before proceeding. ### Phase 4: Apply Changes After user approval, edit the TMDL files. For each table file: 1. **Rename the table** (if needed): Change the `table` declaration 2. **Rename measures**: Change measure names in their declarations. IMPORTANT: Also update all internal DAX references to renamed measures using `[Old Name]` -> `[New Name]` patterns across ALL table files in the model 3. **Rename columns**: Change column names in their declarations. IMPORTANT: Also update DAX references using `'Table'[Old Column]` -> `'Table'[New Column]` across ALL table files 4. **Reorganize display folders**: Add or restructure `displayFolder:` properties 5. **Add descriptions**: Add `///` comments for measures and columns that lack them 6. **Update relationship references**: Check `relationships.tmdl` for renamed tables/columns **Cross-file reference updates are critical.** When renaming a measure or column, search the entire `definition/` directory for all references: ```bash # Find all references to a renamed measure rg "OldMeasureName" <path>/definition/tables/ rg "OldMeasureName" <path>/definition/relationships.tmdl ``` ### Phase 5: Validate After applying changes, verify: 1. All TMDL files still parse correctly (no syntax errors) 2. No orphaned references to old names remain in any file 3. Display folders are consistent across tables 4. Descriptions are present on all visible measures and columns Run a final search to check for any missed references: ```bash # Check for any remaining old names rg -n "old_name_pattern" <path>/definition/ ``` ## Naming Convention Rules Consult `references/naming-rules.md` for the complete rule set including: - Human-readable name requirements - Abbreviation and acronym rules - Technical prefix rules - Aggregation, unit, and period syntax standards - Display folder organization patterns - Measure name construction order: `[Aggregation] [Base Name] [Period] ([Unit])` - Column naming patterns ## Key Anti-Patterns to Detect Quick-reference checklist for the most common issues: | Anti-Pattern | Rule | Example Fix | |-------------|------|-------------| | `snake_case` | Use spaces | `net_sales` -> `Net Sales` | | `CamelCase` | Use spaces | `NetSales` -> `Net Sales` | | `UPPER_CASE` | Use spaces | `TOTAL_COST` -> `Total Cost` | | Abbreviations | Spell out | `Del. Mrgn` -> `Delivery Margin` | | Opaque acronyms | Spell out | `TFS` -> `Total Freight Surcharge` | | Technical prefix | Remove | `FACT_Orders` -> `Orders` | | Inconsistent periods | Standardize | `LY`/`PY`/`Last Year` -> `1YP` | | Inconsistent units | Standardize | `pct`/`%`/`(%)` -> `(%)` | | Missing descriptions | Add | `///` docstrings on all visible objects | | Flat folders | Organize | Numbered hierarchy with subfolders | ## Downstream Report Impact **WARNING:** Renaming model objects breaks downstream report visuals that reference those fields. After renaming: 1. Identify all connected reports (`.pbir` files or Power BI Service reports) 2. Rebind visuals to use the new field names 3. This can be done manually in Power BI Desktop, or programmatically by editing
Automatically invoke this skill whenever the user asks about Fabric tenant settings or Power BI tenant settings or auditing tenant settings. You can use this skill if the user mentions "Fabric administration".
Expert guidance for using the Fabric CLI (`fab`) to fully interact with Fabric workspaces, items, and configuration. Automatically invoke this skill whenever the user mentions "Fabric" or "Power BI Service" or a "Fabric/Power BI workspace".
TOM and ADOMD.NET guidance via PowerShell for connecting to Power BI Desktop's local Analysis Services instance. Covers model enumeration, DAX queries, metadata modification, annotations, calendar definitions, field parameters, query tracing, DAX library package management (daxlib.org), and the Desktop Bridge for reloading and screenshotting the report canvas. Automatically invoke when the user mentions "Power BI Desktop", "Analysis Services port", "TOM", "ADOMD", "daxlib", "DAX library", "DAX UDF package", or asks to "connect to PBI Desktop", "query PBI Desktop with DAX", "modify PBI Desktop model", "add a measure to PBI", "capture visual queries", "create a field parameter", "validate DAX", "intercept DAX queries", "install daxlib", "add DAX SVG", "add IBCS", "reload the report canvas", "screenshot a report page", "Desktop Bridge", or to work with the model and report in Power BI Desktop together.
Expert guidance for the Power BI Project (PBIP) file format; project structure, cross-cutting operations (renames, forking), and PBIX extraction/conversion. Automatically invoke when the user mentions PBIP, PBIX, .pbip/.pbism/.platform files, or asks about "PBIP project structure", "PBIP vs PBIX", "thin report vs thick report", "rename a table", "cascade rename", "fork a PBIP project", "convert pbix to pbip", "extract pbix", "what files are in a PBIP", "PBIP encoding", "definition.pbir", or discusses project-level file structure and post-rename verification.
Format reference for Power BI Enhanced Report (PBIR) JSON schemas and patterns. Automatically invoke when the user asks about PBIR JSON structure, visual.json properties, PBIR expressions, objects vs visualContainerObjects, theme inheritance, conditional formatting patterns, extension measures, bookmarks, field references, filter formatting, query roles, PBIR page structure, report wallpaper, or any PBIR metadata format question.
Direct TMDL file authoring and BIM-to-TMDL conversion for semantic models in PBIP projects. Automatically invoke when the user asks to "edit TMDL", "add a measure in TMDL", "TMDL syntax", "fix formatString", "fix summarizeBy", "TMDL indentation", "convert BIM to TMDL", "add a column description", "create a calculated column in TMDL", or mentions .tmdl file editing or BIM-to-TMDL migration.
Step-by-step workflow for creating complete Power BI reports from scratch using pbir CLI. Covers model discovery, report creation, page layout, theme setup, visual placement, field binding, filtering, formatting, validation, and publishing. Automatically invoke when the user asks to "create a new report", "build a report from scratch", "make a dashboard", "set up a report with KPIs", "create an executive dashboard", "add pages and visuals to a new report".
Deneb visual creation, Vega/Vega-Lite spec authoring, and Deneb best practices for PBIR reports. Automatically invoke whenever the user mentions "Deneb" in any context, or asks about Vega/Vega-Lite specs in Power BI, Deneb cross-filtering, Deneb interactivity, pbiColor theme integration, Deneb field name escaping, or Deneb rendering issues.