# Organize Semantic Model

Organize a Power BI or Analysis Services semantic model end to end so it is ready for...

- Repository: https://github.com/data-goblin/power-bi-agentic-development (1079 stars)
- Category: Design
- License: GPL-3.0
- Last updated: 2026-10-30
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add data-goblin/power-bi-agentic-development --skill organize-semantic-model -g -a claude-code -y`
Codex: `npx skills add data-goblin/power-bi-agentic-development --skill organize-semantic-model -g -a codex -y`
Cursor: `npx skills add data-goblin/power-bi-agentic-development --skill organize-semantic-model -g -a cursor -y`
Gemini CLI: `npx skills add data-goblin/power-bi-agentic-development --skill organize-semantic-model -g -a gemini-cli -y`
Claude Code plugin marketplace: `/plugin marketplace add data-goblin/power-bi-agentic-development`

## Description

Organize a Power BI or Analysis Services semantic model end to end so it is ready for report authors, Excel users and Copilot - table groups, display folders, Title Case business names and naming conventions, hierarchies, sort-by columns, hiding, Analyze in Excel (IsAvailableInMDX), descriptions, format strings, data categories, context annotations, DAX formatting and UDFs, calculated-object justification, duplicate removal, perspectives, translations and security roles. Use whenever the user asks to "organize", "tidy", "clean up", "polish", "prepare", "standardize" or "make report-ready" a model or one table in it (for example "organize the date table"), to "fix naming conventions", "rename fields", "make names human readable" or "fix abbreviations", even when they name only one of these aspects, and whenever a model is driven through the Tabular Editor 3 MCP or the te CLI for that purpose. Not for DAX performance tuning (dax skill) or model design and star-schema changes (semantic-model skill).

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Organize a semantic model

[Workflow] Organizing is a set of passes over the same objects. Doing only one or two of them (folders and sorting, say) leaves the model looking finished while names, descriptions and formats are still raw, so run every pass unless the user narrows the scope, and say which passes were skipped and why.

## Tooling

- Tabular Editor 3 MCP: call `get_workspace_info` first and confirm the model title with the user if it is not the one they named. Read with `get_model_overview` and `get_object_details`; write with `execute_csharp_script`
- `te` CLI (the `te-cli` skill) when there is no TE3 instance, for example against PBIP/TMDL on disk
- One script per pass. Each `execute_csharp_script` call is one undo step and returns a property-level diff, so per-pass scripts keep every change reviewable and individually revertible
- Read the returned diff after every script. Confirm each property you meant to set appears, and nothing you did not mean to touch. A property missing from the diff was already at that value, except annotations: the diff does not list annotation changes (`TableGroup`, `context`), so read those back with a second script
- `execute_dax_query` only exists while the TE3 MCP server has model data read permission. If it disappears mid-session, the client's tool list is stale; reconnect the server (`/mcp`). A calculated table that was never recalculated returns no data until it is refreshed
- Ask the user to close TE3 DAX editor tabs for objects a script will change. A script that edits an object while its editor is open and parsing has crashed TE3 (`IndexOutOfRangeException` in `ScrollbarIndicatorsController`)
- Nothing is saved or deployed by the MCP. On a live connection, saving writes to the server, so leave saving to the user

## Pass 0: inventory and lineage

Before changing anything:

The rest: https://github.com/data-goblin/power-bi-agentic-development/blob/HEAD/plugins/semantic-models/skills/organize-semantic-model/SKILL.md
