Refresh Data
refresh triggers processing at model, table, or partition scope and can also provide refresh observability:
- live DMV status for Desktop or Service XMLA connections,
- Desktop-local refresh plans and MCP-initiated history,
- Power BI Service refresh history,
- Power BI Service execution details and failure diagnosis,
- reliability and stale/SLA checks over recent Service history.
Use it when:
- you changed partitions or schema and want to validate on fresh data,
- you need to confirm that a processing request was submitted,
- you want to run a calculate-only processing pass (when appropriate).
- you need to understand why a Power BI Service semantic model refresh failed.
You typically won’t call the tool directly-tell the LLM what you want refreshed and why, and it will use refresh safely.
What to ask the LLM (quick prompts)
“Refresh the whole model (Full) and then re-run the validation queries.” “Refresh tableSales (DataOnly).”
“Refresh partition p2025_01 in table Sales (DataOnly).”
“Check refresh status only; don’t start a refresh. Include details.”
“Plan a model refresh first and show which tables will be skipped or overridden.”
“Show refresh reliability for this Service dataset over the last 20 runs.”
“Diagnose the latest failed refresh and tell me who should fix it.”
Scopes (what you can refresh)
You can refresh at:
- Model: processes all tables except tables marked
exclude_from_model_refreshby default. - Table: processes all partitions of a table.
- Partition: processes a specific partition in a table.
If you’re not sure what partitions exist:
“List partitions for tableSales and then refresh the right one.”
Refresh types (what “Full / DataOnly / Calculate” mean)
The tool supports three processing types:
- Full: standard processing (data + calculations as needed).
- DataOnly: process data without forcing a full calculation pass.
- Calculate: force calculation processing.
Important nuances:
- Unknown
refresh_typevalues are rejected. Valid values areFull,DataOnly, andCalculate. - Some calculated tables/partitions don’t support
Full/DataOnlyprocessing in the engine. In those cases, the server reports an override to Calculate before execution.
If you care about exactly what will happen:
“Before refreshing, explain the chosen refresh type per table (especially for calculated tables).”Planning before execution
Use operation="plan" to see the exact Desktop-local refresh plan without mutating the model:
{ "operation": "plan", "scope": "Model", "refresh_type": "Full" }
Plans include:
- target scope and affected tables/partitions,
- requested versus actual refresh type,
- calculated table/partition overrides,
- skipped tables marked
exclude_from_model_refresh, - warnings for broad model refreshes or large partition sets.
Model refresh skips tables marked exclude_from_model_refresh by default. Set include_excluded=true only when you explicitly want to refresh those tables too.
Status-only checks (best-effort)
You can ask for status without triggering a refresh:
“Check status only for the model.” “Check status only for tableSales.”
“Check status only for partition p2025_01 in table Sales.”
What status means:
- The server inspects engine DMV state and returns a best-effort signal like “is a refresh-like command currently running?”.
- Results include
best_effort=true,status_source="discover_commands_dmv", confidence, and limitations. - It does not guarantee a full “job history”, request/job ID, progress percentage, or reliable in-progress detection, and it may miss work depending on host/engine behavior.
- Legacy payloads with
status_only=trueare treated asoperation="status".
Prompt:
“Check refresh status only and include details (started time, elapsed, and command text).”Refresh history and diagnostics
For Desktop connections, operation="history" returns local history for refreshes initiated by SemanticOps MCP. It includes explicit refresh executions and automatic post-write refreshes initiated by manage_schema, with trigger_source distinguishing entries such as refresh_tool, schema_create_table_process, schema_update_partition_process, and schema_calculated_column_materialization. It is not Power BI Desktop's full refresh history and cannot include refreshes started outside SemanticOps MCP.
For Power BI Service connections, refresh supports read-only Service diagnostics:
operation="history": recent refreshes with request ID, status, timing, attempts, and sanitized service exception summaries.operation="details": execution details for a suppliedrequest_id, including messages, attempts, objects, and metrics when the REST API returns them.operation="diagnose": classify a suppliedrequest_idor latest failed refresh as gateway, credentials, source timeout, mashup/query, permissions, capacity/memory, disabled, cancelled, throttled, or unknown.operation="reliability": success rate, consecutive failures, last successful refresh age, duration percentiles, stale flags, and recommended actions.
Examples:
{ "operation": "history", "limit": 20 }
{ "operation": "details", "request_id": "9399bb89-25d1-44f8-8576-136d7e9014b1" }
{ "operation": "reliability", "limit": 20, "max_age_minutes": 120, "max_duration_minutes": 30 }
Notes:
- These operations require a selected Power BI Service model and suitable REST permissions.
- Desktop connections use local MCP-initiated history for
operation="history"and return clear unsupported results for Service-onlydetails,diagnose, andreliability. - Service exception text is redacted before it is returned.
Locked-down environments (mode behavior)
| Mode | Availability |
|---|---|
| Full mode | AvailableAvailable |
| Read-only mode | AvailableAvailable |
| Browse-only mode | Not availableNot available |
Notes: Status is best-effort; no cancel; may prompt on first model modification.
If refresh is blocked, ask:
“Explain whether refresh is blocked by mode or policy, and give me an alternative validation plan.”Common workflows
1) Refresh after partition work
“We changed partitions forSales. Refresh table Sales (DataOnly), then rerun the validation queries.”
2) Partition refresh (incremental patterns)
“Refresh partitionp2025_01 in table Sales (DataOnly), then check status with details.”
3) Calculate-only pass (targeted)
“Run a calculate refresh for the model and explain when this is the right choice vs Full/DataOnly.”4) “Don’t surprise me” safety pattern
“Before running refresh, summarize the exact scope and type you’ll execute, and wait for my confirmation.”Troubleshooting
You may be in browse-only mode, or your org policy restricts refresh. Ask for an allowed alternative: smaller validation queries, a manual refresh path, or an execution plan for a different environment.
Status is best-effort. Ask for status with details, or validate by running a query that checks known “freshness” indicators in your model (if you have them).
Refresh is treated as a model operation by the engine. If your client supports confirmations/elicitation, you may be prompted the first time in a session. If you don’t want refresh to run, decline and ask for a read-only validation plan.