
Organize Semantic Model
Organize a Power BI or Analysis Services semantic model end to end so it is ready for...
Install
npx skills add data-goblin/power-bi-agentic-development --skill organize-semantic-model -g -a claude-code -y- Repository
- data-goblin/power-bi-agentic-development1.1k
- Category
- Design
- Updated
- 5d ago
- License
- GPL-3.0
- Context cost
- Mediumabout 3,000 tokens
- Runs scripts
- No, instructions only
What it does
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).
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_infofirst and confirm the model title with the user if it is not the one they named. Read withget_model_overviewandget_object_details; write withexecute_csharp_script teCLI (thete-cliskill) when there is no TE3 instance, for example against PBIP/TMDL on disk- One script per pass. Each
execute_csharp_scriptcall 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_queryonly 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 (
IndexOutOfRangeExceptioninScrollbarIndicatorsController) - 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:


