deneb-visuals
Deneb visual creation, Vega/Vega-Lite spec authoring, and Deneb best practices for PBIR reports. Automatically invoke whenever…
Automatically invoke this skill whenever the user asks to refresh a semantic model or a dataset. Can also be used to manage, optimize, troubleshoot, or configure a refresh or a refresh schedule.
Claude Code
$ npx -y skills add data-goblin/power-bi-agentic-development --skill refresh-semantic-model --agent claude-code
Codex
$ npx skills add data-goblin/power-bi-agentic-development --skill refresh-semantic-model -a codex -y
Cursor
$ npx skills add data-goblin/power-bi-agentic-development --skill refresh-semantic-model -a cursor -y
Gemini CLI
$ npx skills add data-goblin/power-bi-agentic-development --skill refresh-semantic-model -a gemini-cli -y
GitHub Copilot
$ npx skills add data-goblin/power-bi-agentic-development --skill refresh-semantic-model -a github-copilot -y
OpenCode
$ npx skills add data-goblin/power-bi-agentic-development --skill refresh-semantic-model -a opencode -y
Windsurf
$ npx skills add data-goblin/power-bi-agentic-development --skill refresh-semantic-model -a windsurf -y
name: refresh-semantic-model description: Automatically invoke this skill whenever the user asks to refresh a semantic model or a dataset. Can also be used to manage, optimize, troubleshoot, or configure a refresh or a refresh schedule.
Trigger, monitor, validate, and troubleshoot semantic model refreshes via the Power BI Enhanced Refresh REST API and Fabric CLI.
A semantic model refresh reloads data from upstream sources and/or recalculates dependent objects (calculated columns, calculated tables, measures). The scope can be the entire model, specific tables, or individual partitions.
Six refresh types are available via the REST API; a seventh (`add`) is TMSL-only:
| Type | Reloads Data | Recalculates | Primary Use Case | API | |---------------|:------------:|:------------:|--------------------------------------|:----:| | `full` | Yes | Yes | Complete reload from scratch | REST | | `automatic` | Conditional | Conditional | Smart refresh; process only if needed| REST | | `dataOnly` | Yes | No* | Reload data; clear dependents | REST | | `calculate` | No | Yes | Recalculate without reloading data | REST | | `clearValues` | No | No | Empty data from objects | REST | | `defragment` | No | No | Clean up column dictionaries | REST | | `add` | Append | Yes | Append rows to a partition | TMSL |
*`dataOnly` clears dependent objects (calculated columns, calculated tables) but does not recalculate them. Follow with a `calculate` refresh to restore them.
For detailed descriptions, behavior with incremental refresh policies, commit modes, and parallelism options, consult **`references/refresh-types.md`**.
Extract the workspace and model GUIDs needed for API calls:
WS_ID=$(fab get "WorkspaceName.Workspace" -q "id" | tr -d '"') MODEL_ID=$(fab get "WorkspaceName.Workspace/ModelName.SemanticModel" -q "id" | tr -d '"')
Before triggering the refresh, capture a baseline snapshot to later verify that data actually changed. Execute a DAX query against the model to get current row counts or max dates:
fab api -A powerbi "groups/$WS_ID/datasets/$MODEL_ID/executeQueries" \
-X post -i '{
"queries": [{"query": "EVALUATE ROW(\"RowCount\", COUNTROWS(FactSales), \"MaxDate\", MAX('FactSales'[OrderDate]))"}],
"serializerSettings": {"includeNulls": true}
}'Record the output. This baseline is compared after refresh to confirm new data arrived.
**Full model refresh (simplest):**
fab api -A powerbi "groups/$WS_ID/datasets/$MODEL_ID/refreshes" \
-X post -i '{"type":"full"}'**Refresh specific tables:**
fab api -A powerbi "groups/$WS_ID/datasets/$MODEL_ID/refreshes" \
-X post -i '{
"type": "full",
"objects": [{"table": "FactSales"}, {"table": "DimProduct"}]
}'**Refresh specific partitions:**
fab api -A powerbi "groups/$WS_ID/datasets/$MODEL_ID/refreshes" \
-X post -i '{
"type": "full",
"objects": [
{"table": "FactSales", "partition": "FactSales_2024"},
{"table": "FactSales", "partition": "FactSales_2023"}
]
}'**Data-only refresh (skip recalculation):**
fab api -A powerbi "groups/$WS_ID/datasets/$MODEL_ID/refreshes" \
-X post -i '{"type":"dataOnly","objects":[{"table":"FactSales"}]}'**Calculate only (no data reload):**
fab api -A powerbi "groups/$WS_ID/datasets/$MODEL_ID/refreshes" \
-X post -i '{"type":"calculate"}'**Clear values from a table:**
fab api -A powerbi "groups/$WS_ID/datasets/$MODEL_ID/refreshes" \
-X post -i '{"type":"clearValues","objects":[{"table":"StagingTable"}]}'For the script-based approach with CLI arguments, use **`scripts/refresh_model.py`**.
fab api -A powerbi "groups/$WS_ID/datasets/$MODEL_ID/refreshes?\$top=1"
Status values: `Unknown`, `InProgress`, `Completed`, `Failed`, `Disabled`, `Cancelled`
After the refresh completes, re-run the same DAX query from Step 2 and compare:
fab api -A powerbi "groups/$WS_ID/datasets/$MODEL_ID/executeQueries" \
-X post -i '{
"queries": [{"query": "EVALUATE ROW(\"RowCount\", COUNTROWS(FactSales), \"MaxDate\", MAX('FactSales'[OrderDate]))"}],
"serializerSettings": {"includeNulls": true}
}'**If data has not changed** after a successful refresh:
To cancel an in-progress enhanced refresh, first retrieve the `requestId` from the refresh history:
fab api -A powerbi "groups/$WS_ID/datasets/$MODEL_ID/refreshes?\$top=1"
The response includes a `requestId` field. Use it to cancel:
fab api -A powerbi "groups/$WS_ID/datasets/$MODEL_ID/refreshes/<requestId>" \ -X delete
Only works for refreshes triggered via the Enhanced API (not scheduled or portal refreshes).
The **`scripts/refresh_model.py`** script wraps the Enhanced Refresh API with CLI arguments:
# Full refresh uv run scripts/refresh_model.py -w $WS_ID -m $MODEL_ID # Refresh specific tables uv run scripts/refresh_model.py -w $WS_ID -m $MODEL_ID --tables Sales,Calendar # Refresh specific partit
Power BI AI skills and Power BI agents for Claude Code and GitHub Copilot: a plugin marketplace of Power BI skills, subagents, and hooks for semantic models, DAX, TMDL, reports, and AI dashboards. Includes Microsoft Fabric skills and Fabric agents. Weekly updates.
Deneb visual creation, Vega/Vega-Lite spec authoring, and Deneb best practices for PBIR reports. Automatically invoke whenever…
Power BI custom visual (.pbiviz) development with the pbiviz toolchain and its MCP server. Automatically invoke when the user…
Python visual creation and matplotlib/seaborn patterns for PBIR reports. Automatically invoke when the user mentions "Python…
R visual creation and ggplot2 patterns for PBIR reports. Automatically invoke when the user mentions "R visual", "ggplot2",…
SVG generation via DAX measures and extension measures with ImageUrl data category for inline visualizations in PBIR reports,…
Design and revise Claude Dashboards that people trust and can read at a glance, and handle the comments people leave on them. Use…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.