powerbi-report-management
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseTelemetry — MANDATORY. Everycall must carryapi.fabric.microsoft.com(x-ms-fabric-skill: powerbi-report-management:az rest), including every LRO poll,--headers "x-ms-fabric-skill=powerbi-report-management"and retry. Snippets omit it — add it anyway.fabric_lro
CRITICAL NOTES
- To find the workspace details (including its ID) from workspace name: list all workspaces and, then, use JMESPath filtering
- To find the item details (including its ID) from workspace ID, item type, and item name: list all items of that type in that workspace and, then, use JMESPath filtering
遥测 — 强制要求。每个调用必须携带api.fabric.microsoft.com(x-ms-fabric-skill: powerbi-report-management中使用:az rest), 包括每个LRO轮询、--headers "x-ms-fabric-skill=powerbi-report-management"和重试操作。代码片段中省略了该参数,但仍需自行添加。fabric_lro
重要说明
- 从工作区名称查找工作区详情(包括其ID):列出所有工作区,然后使用JMESPath进行筛选
- 从工作区ID、项类型和项名称查找项详情(包括其ID):列出该工作区中该类型的所有项,然后使用JMESPath进行筛选
Power BI Report Management
Power BI报表管理
Manage Power BI reports in Microsoft Fabric workspaces using against
the Fabric REST API. This skill covers the full CRUD lifecycle for report items
and their PBIR definitions.
az restScope: Report item CRUD and definition management only. For report layout authoring (pages, visuals, filters, formatting), use.powerbi-report-authoring
Boundary: This skill transports PBIR definitions to and from Fabric. PBIR content authoring remains owned by.powerbi-report-authoring
通过调用Fabric REST API,管理Microsoft Fabric工作区中的Power BI报表。本技能涵盖报表项及其PBIR定义的完整CRUD生命周期。
az rest适用范围:仅包含报表项CRUD和定义管理。若要进行报表布局创作(页面、可视化组件、筛选器、格式设置),请使用。powerbi-report-authoring
边界说明:本技能负责在本地与Fabric之间传输PBIR定义。PBIR内容创作由负责。powerbi-report-authoring
Companion Skills
配套技能
This skill is one of three that partition the Power BI authoring surface.
Each owns a single concern; route work to the right one.
| Skill | Owns | Use for |
|---|---|---|
| Report content (PBIR JSON authoring) | Pages, visuals, filters, formatting, themes, expressions, |
| Report transport to/from Fabric | List, create, get, update, delete report items; download/upload PBIR definitions |
| Semantic-model authoring skill | Semantic model authoring + deployment | Create/edit measures/tables/relationships, TMDL, deploy semantic models to Fabric |
When publishing a local to Fabric, this skill is the entry
point. If the user wants to publish the local semantic model alongside
the report, this skill delegates the model deploy to
an available semantic-model authoring skill, then resolves
the resulting and binds the report to it. See the
Publishing a local .pbip workflow.
.pbipsemanticModelId本技能是划分Power BI创作领域的三个技能之一。每个技能负责单一职责,请将任务分配给对应的技能。
| 技能 | 负责内容 | 适用场景 |
|---|---|---|
| 报表内容(PBIR JSON创作) | 页面、可视化组件、筛选器、格式设置、主题、表达式、 |
| 报表在本地与Fabric之间的传输 | 列出、创建、获取、更新、删除报表项;下载/上传PBIR定义 |
| 语义模型创作技能 | 语义模型创作与部署 | 创建/编辑度量值/表/关系、TMDL、将语义模型部署到Fabric |
当将本地发布到Fabric时,本技能是入口点。如果用户希望将本地语义模型与报表一起发布,本技能会将模型部署任务委托给可用的语义模型创作技能,然后解析生成的并将报表与其绑定。请参阅发布本地.pbip工作流。
.pbipsemanticModelIdTool Stack
工具栈
| Tool | Role | Install |
|---|---|---|
| Primary: | Pre-installed in most dev environments |
| Parse and construct JSON payloads | Standard CLI tool — see COMMON-CLI.md § Tool Selection Rationale |
| Encode/decode PBIR file content for definition payloads | Built-in on Linux/macOS · Windows: use PowerShell |
Agent check — verify before first operation:bashaz version 2>/dev/null || echo "INSTALL: https://learn.microsoft.com/cli/azure/install-azure-cli"
| 工具 | 作用 | 安装方式 |
|---|---|---|
| 主要工具:通过 | 大多数开发环境中已预装 |
| 解析和构造JSON负载 | 标准CLI工具 — 请参阅COMMON-CLI.md § 工具选择依据 |
| 对PBIR文件内容进行编码/解码以用于定义负载 | Linux/macOS系统内置 · Windows系统:使用PowerShell的 |
代理检查 — 首次操作前请验证:bashaz version 2>/dev/null || echo "INSTALL: https://learn.microsoft.com/cli/azure/install-azure-cli"
Authentication
身份验证
All calls use the Fabric API audience. Using the wrong audience returns a 401.
| API | Audience ( |
|---|---|
| Fabric Report Items API | |
For the shared authentication model, token audiences, and identity types, see
COMMON-CORE.md § Authentication & Token Acquisition.
For full authentication recipes (interactive, device-code, service principal, managed identity),
see COMMON-CLI.md § Authentication Recipes.
所有调用都使用Fabric API受众。使用错误的受众会返回401错误。
| API | 受众( |
|---|---|
| Fabric报表项API | |
有关共享身份验证模型、令牌受众和标识类型,请参阅COMMON-CORE.md § 身份验证与令牌获取。
有关完整的身份验证方案(交互式、设备代码、服务主体、托管标识),请参阅COMMON-CLI.md § 身份验证方案。
Finding Workspaces and Reports
查找工作区和报表
Shared patterns — workspace and item resolution, pagination, and LRO polling are documented in the common skill library. Read COMMON-CLI.md § Finding Workspaces and Items in Fabric before using the CRUD operations below.
通用模式 — 工作区和项解析、分页以及LRO轮询的相关文档位于通用技能库中。 在使用以下CRUD操作之前,请阅读COMMON-CLI.md § 在Fabric中查找工作区和项。
Resolve Report ID by Name
通过名称解析报表ID
Once you have the workspace ID (per COMMON-CLI.md), resolve the report:
bash
REPORT_NAME="Sales Report"
REPORT_ID=$(az rest --method get \
--resource "https://api.fabric.microsoft.com" \
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/reports" \
--query "value[?displayName=='$REPORT_NAME'] | [0].id" \
--output tsv)获取工作区ID后(按照COMMON-CLI.md中的方法),解析报表:
bash
REPORT_NAME="Sales Report"
REPORT_ID=$(az rest --method get \
--resource "https://api.fabric.microsoft.com" \
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/reports" \
--query "value[?displayName=='$REPORT_NAME'] | [0].id" \
--output tsv)Examples: CRUD Operations
示例:CRUD操作
List Reports
列出报表
Returns all reports in a workspace.
- Permissions: Viewer workspace role
- Scopes: or
Workspace.Read.AllWorkspace.ReadWrite.All
bash
az rest --method get \
--resource "https://api.fabric.microsoft.com" \
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/reports" \
--query "value[].{name:displayName, id:id, description:description}" \
--output tableSupports pagination via query parameter.
continuationToken返回工作区中的所有报表。
- 权限:工作区查看者角色
- 范围:或
Workspace.Read.AllWorkspace.ReadWrite.All
bash
az rest --method get \
--resource "https://api.fabric.microsoft.com" \
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/reports" \
--query "value[].{name:displayName, id:id, description:description}" \
--output table支持通过查询参数进行分页。
continuationTokenGet Report (Properties)
获取报表(属性)
Returns properties of a specific report (name, description, ID, workspace, sensitivity label).
- Permissions: Read permissions on the report
- Scopes: or
Report.Read.AllReport.ReadWrite.All
bash
az rest --method get \
--resource "https://api.fabric.microsoft.com" \
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/reports/$REPORT_ID"返回特定报表的属性(名称、描述、ID、工作区、敏感度标签)。
- 权限:报表的读取权限
- 范围:或
Report.Read.AllReport.ReadWrite.All
bash
az rest --method get \
--resource "https://api.fabric.microsoft.com" \
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/reports/$REPORT_ID"Get Report Definition
获取报表定义
Downloads the full PBIR definition. This is a POST (not GET) and supports LRO.
- Permissions: Read and write permissions on the report
- Scopes: or
Report.ReadWrite.AllItem.ReadWrite.All - Limitation: Blocked for reports with encrypted sensitivity labels
Always request — without this parameter, older reports may
return PBIR-Legacy format (a single blob), which this skill does
not support.
format=PBIRreport.jsonbash
RESPONSE=$(az rest --method post \
--resource "https://api.fabric.microsoft.com" \
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/reports/$REPORT_ID/getDefinition?format=PBIR" \
--verbose 2>&1)下载完整的PBIR定义。此操作使用POST(而非GET),并支持LRO。
- 权限:报表的读写权限
- 范围:或
Report.ReadWrite.AllItem.ReadWrite.All - 限制:带有加密敏感度标签的报表无法执行此操作
务必指定 — 如果缺少此参数,旧版报表可能会返回PBIR-Legacy格式(单个 blob),本技能不支持该格式。
format=PBIRreport.jsonbash
RESPONSE=$(az rest --method post \
--resource "https://api.fabric.microsoft.com" \
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/reports/$REPORT_ID/getDefinition?format=PBIR" \
--verbose 2>&1)If 202 Accepted, extract operation ID and poll the LRO (see Long-Running Operations section)
如果返回202 Accepted,提取操作ID并轮询LRO(请参阅长时运行操作部分)
If 200 OK, the response contains the definition parts
如果返回200 OK,响应中包含定义部分
> **Format check**: After retrieving the definition, verify
> `definition.format == "PBIR"`. If it is `"PBIR-Legacy"`, this skill does not
> support that format.
> **格式检查**:获取定义后,请验证`definition.format == "PBIR"`。如果是`"PBIR-Legacy"`,本技能不支持该格式。Decode Definition Parts to Local Files
将定义部分解码到本地文件
Note:often returnsgetDefinition(LRO). Check the Long-Running Operations section to extract the operation ID and poll for the result before decoding.202 Accepted
bash
undefined注意:通常返回getDefinition(LRO)。在解码之前,请参阅长时运行操作部分提取操作ID并轮询获取结果。202 Accepted
bash
undefinedAfter retrieving the definition (from 200 response or LRO result):
获取定义后(来自200响应或LRO结果):
echo "$DEFINITION_JSON" | jq -r '.definition.parts[] | "(.path)\t(.payload)"' |
while IFS=$'\t' read -r path payload; do mkdir -p "$(dirname "./report-definition/$path")" echo "$payload" | base64 -d > "./report-definition/$path" done
while IFS=$'\t' read -r path payload; do mkdir -p "$(dirname "./report-definition/$path")" echo "$payload" | base64 -d > "./report-definition/$path" done
undefinedecho "$DEFINITION_JSON" | jq -r '.definition.parts[] | "(.path)\t(.payload)"' |
while IFS=$'\t' read -r path payload; do mkdir -p "$(dirname "./report-definition/$path")" echo "$payload" | base64 -d > "./report-definition/$path" done
while IFS=$'\t' read -r path payload; do mkdir -p "$(dirname "./report-definition/$path")" echo "$payload" | base64 -d > "./report-definition/$path" done
undefinedCreate Report (with Definition)
创建报表(带定义)
Creates a new report with a PBIR definition. Supports LRO.
- Permissions: Contributor workspace role
- Scopes: or
Report.ReadWrite.AllItem.ReadWrite.All
bash
undefined使用PBIR定义创建新报表。支持LRO。
- 权限:工作区参与者角色
- 范围:或
Report.ReadWrite.AllItem.ReadWrite.All
bash
undefinedWalk ./report-definition/ and build the parts[] array — every file under the
遍历./report-definition/并构建parts[]数组 — 目录下的所有文件都会被编码并上传。包括definition.pbir、report.json、version.json、pages/pages.json、每个pages/<page>/page.json以及每个pages/<page>/visuals/<visual>/visual.json。
directory is encoded and uploaded. Includes definition.pbir, report.json,
—
version.json, pages/pages.json, every pages/<page>/page.json, and every
—
pages/<page>/visuals/<visual>/visual.json.
—
PARTS=$(find ./report-definition -type f -not -name '.*' -not -name 'Thumbs.db' | while read -r file; do
rel="${file#./report-definition/}"
payload=$(base64 < "$file" | tr -d '\n')
jq -nc --arg p "$rel" --arg b "$payload"
'{path:$p, payload:$b, payloadType:"InlineBase64"}' done | jq -sc '.')
'{path:$p, payload:$b, payloadType:"InlineBase64"}' done | jq -sc '.')
jq -n
--arg name "My New Report"
--arg desc "Created via Fabric API"
--argjson parts "$PARTS"
'{displayName:$name, description:$desc, definition:{parts:$parts}}' \
--arg name "My New Report"
--arg desc "Created via Fabric API"
--argjson parts "$PARTS"
'{displayName:$name, description:$desc, definition:{parts:$parts}}' \
create-report.json
az rest --method post
--resource "https://api.fabric.microsoft.com"
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/reports"
--headers "Content-Type=application/json"
--body @create-report.json
--verbose 2>&1
--resource "https://api.fabric.microsoft.com"
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/reports"
--headers "Content-Type=application/json"
--body @create-report.json
--verbose 2>&1
> **PowerShell** — use `Get-ChildItem -Recurse -File` to walk the directory and
> `[Convert]::ToBase64String([System.IO.File]::ReadAllBytes($_.FullName))` to
> encode each file (instead of `base64 | tr -d '\n'`).
> **Important**: `definition.pbir` is always required. The directory walk above
> includes every file under `./report-definition/` automatically — make sure
> your local directory mirrors the full PBIR layout (top-level files, plus all
> `pages/<page>/page.json` and `pages/<page>/visuals/<visual>/visual.json`
> files) before encoding.PARTS=$(find ./report-definition -type f -not -name '.*' -not -name 'Thumbs.db' | while read -r file; do
rel="${file#./report-definition/}"
payload=$(base64 < "$file" | tr -d '\n')
jq -nc --arg p "$rel" --arg b "$payload"
'{path:$p, payload:$b, payloadType:"InlineBase64"}' done | jq -sc '.')
'{path:$p, payload:$b, payloadType:"InlineBase64"}' done | jq -sc '.')
jq -n
--arg name "My New Report"
--arg desc "Created via Fabric API"
--argjson parts "$PARTS"
'{displayName:$name, description:$desc, definition:{parts:$parts}}' \
--arg name "My New Report"
--arg desc "Created via Fabric API"
--argjson parts "$PARTS"
'{displayName:$name, description:$desc, definition:{parts:$parts}}' \
create-report.json
az rest --method post
--resource "https://api.fabric.microsoft.com"
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/reports"
--headers "Content-Type=application/json"
--body @create-report.json
--verbose 2>&1
--resource "https://api.fabric.microsoft.com"
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/reports"
--headers "Content-Type=application/json"
--body @create-report.json
--verbose 2>&1
> **PowerShell** — 使用`Get-ChildItem -Recurse -File`遍历目录,使用`[Convert]::ToBase64String([System.IO.File]::ReadAllBytes($_.FullName))`对每个文件进行编码(替代`base64 | tr -d '\n'`)。
> **重要提示**:`definition.pbir`是必填项。上述目录遍历会自动包含`./report-definition/`下的所有文件 — 编码前请确保本地目录与完整的PBIR布局一致(顶层文件,加上所有`pages/<page>/page.json`和`pages/<page>/visuals/<visual>/visual.json`文件)。Update Report Definition
更新报表定义
Overwrites the entire definition. This is a POST and supports LRO.
- Permissions: Read and write permissions on the report
- Scopes: or
Report.ReadWrite.AllItem.ReadWrite.All
bash
undefined覆盖整个定义。此操作使用POST,并支持LRO。
- 权限:报表的读写权限
- 范围:或
Report.ReadWrite.AllItem.ReadWrite.All
bash
undefinedRebuild parts[] from ./report-definition/ after edits (same walk as Create).
编辑后从./report-definition/重新构建parts[]数组(与创建操作的遍历方式相同)。
PARTS=$(find ./report-definition -type f -not -name '.*' -not -name 'Thumbs.db' | while read -r file; do
rel="${file#./report-definition/}"
payload=$(base64 < "$file" | tr -d '\n')
jq -nc --arg p "$rel" --arg b "$payload"
'{path:$p, payload:$b, payloadType:"InlineBase64"}' done | jq -sc '.')
'{path:$p, payload:$b, payloadType:"InlineBase64"}' done | jq -sc '.')
jq -n --argjson parts "$PARTS"
'{definition:{parts:$parts}}' \
'{definition:{parts:$parts}}' \
update-definition.json
az rest --method post
--resource "https://api.fabric.microsoft.com"
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/reports/$REPORT_ID/updateDefinition"
--headers "Content-Type=application/json"
--body @update-definition.json
--verbose 2>&1
--resource "https://api.fabric.microsoft.com"
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/reports/$REPORT_ID/updateDefinition"
--headers "Content-Type=application/json"
--body @update-definition.json
--verbose 2>&1
> **Critical**: `updateDefinition` replaces the **entire** definition. Include
> ALL parts — modified and unmodified. Omitting parts deletes them.
Optional query parameter `?updateMetadata=true` updates item metadata from
`.platform` file if included.PARTS=$(find ./report-definition -type f -not -name '.*' -not -name 'Thumbs.db' | while read -r file; do
rel="${file#./report-definition/}"
payload=$(base64 < "$file" | tr -d '\n')
jq -nc --arg p "$rel" --arg b "$payload"
'{path:$p, payload:$b, payloadType:"InlineBase64"}' done | jq -sc '.')
'{path:$p, payload:$b, payloadType:"InlineBase64"}' done | jq -sc '.')
jq -n --argjson parts "$PARTS"
'{definition:{parts:$parts}}' \
'{definition:{parts:$parts}}' \
update-definition.json
az rest --method post
--resource "https://api.fabric.microsoft.com"
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/reports/$REPORT_ID/updateDefinition"
--headers "Content-Type=application/json"
--body @update-definition.json
--verbose 2>&1
--resource "https://api.fabric.microsoft.com"
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/reports/$REPORT_ID/updateDefinition"
--headers "Content-Type=application/json"
--body @update-definition.json
--verbose 2>&1
> **关键提示**:`updateDefinition`会替换**整个**定义。请包含所有部分 — 修改过的和未修改的。省略部分会导致其被删除。
可选查询参数`?updateMetadata=true`会从包含的`.platform`文件更新项元数据。Update Report (Properties)
更新报表(属性)
Updates display name and/or description only (not the definition).
- Permissions: Read and write permissions on the report
- Scopes: or
Report.ReadWrite.AllItem.ReadWrite.All
bash
cat > update-report.json << 'EOF'
{
"displayName": "Renamed Report",
"description": "Updated description"
}
EOF
az rest --method patch \
--resource "https://api.fabric.microsoft.com" \
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/reports/$REPORT_ID" \
--headers "Content-Type=application/json" \
--body @update-report.json仅更新显示名称和/或描述(不更新定义)。
- 权限:报表的读写权限
- 范围:或
Report.ReadWrite.AllItem.ReadWrite.All
bash
cat > update-report.json << 'EOF'
{
"displayName": "Renamed Report",
"description": "Updated description"
}
EOF
az rest --method patch \
--resource "https://api.fabric.microsoft.com" \
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/reports/$REPORT_ID" \
--headers "Content-Type=application/json" \
--body @update-report.jsonDelete Report
删除报表
Deletes a report. Supports soft-delete (default) and hard-delete.
- Permissions: Write permissions on the report
- Scopes: or
Report.ReadWrite.AllItem.ReadWrite.All
bash
undefined删除报表。支持软删除(默认)和硬删除。
- 权限:报表的写入权限
- 范围:或
Report.ReadWrite.AllItem.ReadWrite.All
bash
undefinedSoft delete (recoverable)
软删除(可恢复)
az rest --method delete
--resource "https://api.fabric.microsoft.com"
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/reports/$REPORT_ID"
--resource "https://api.fabric.microsoft.com"
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/reports/$REPORT_ID"
az rest --method delete
--resource "https://api.fabric.microsoft.com"
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/reports/$REPORT_ID"
--resource "https://api.fabric.microsoft.com"
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/reports/$REPORT_ID"
Hard delete (permanent)
硬删除(永久)
az rest --method delete
--resource "https://api.fabric.microsoft.com"
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/reports/$REPORT_ID?hardDelete=true"
--resource "https://api.fabric.microsoft.com"
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/reports/$REPORT_ID?hardDelete=true"
undefinedaz rest --method delete
--resource "https://api.fabric.microsoft.com"
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/reports/$REPORT_ID?hardDelete=true"
--resource "https://api.fabric.microsoft.com"
--url "https://api.fabric.microsoft.com/v1/workspaces/$WS_ID/reports/$REPORT_ID?hardDelete=true"
undefinedLong-Running Operations (LRO)
长时运行操作(LRO)
Create ReportGet Report DefinitionUpdate Report Definition202 Acceptedx-ms-operation-idThe management-specific guardrails below take precedence over the generic
pattern when they conflict.
⚠️ Never retry a create POST after receiving 202. Aresponse means the operation was accepted and is likely being processed server-side. Retrying the POST risks creating duplicates.202 AcceptedAlways writeoutput to a file to reliably capture the--verboseheader on every attempt — this is the only reliable way to track the operation. Regex extraction from in-memory strings is fragile across shells and platforms. Once captured, poll the operation to completion just like any other LRO call.x-ms-operation-idpowershell# PowerShell — reliable operation ID capture az rest --method post ... --verbose 2>&1 | Out-File "$env:TEMP\lro-response.txt" -Encoding utf8 $opId = (Select-String -Path "$env:TEMP\lro-response.txt" -Pattern "x-ms-operation-id.*?'([a-f0-9-]+)'" | Select-Object -First 1).Matches.Groups[1].ValueAs a last resort, if the operation ID is still lost despite writing to a file, list reports in the workspace to locate the created report — but this should not be the normal path.
For more details, see Long-Running Operations.
创建报表获取报表定义更新报表定义202 Acceptedx-ms-operation-id以下管理特定的规则与通用模式冲突时,以这些规则为准。
⚠️ 收到202响应后切勿重试创建POST请求。响应表示操作已被接受,且可能正在服务器端处理。重试POST请求可能会导致创建重复报表。202 Accepted务必将输出写入文件,以可靠地捕获每次尝试的--verbose头 — 这是跟踪操作的唯一可靠方式。从内存字符串中通过正则表达式提取在不同Shell和平台上不稳定。捕获到操作ID后,像处理其他LRO调用一样轮询操作直到完成。x-ms-operation-idpowershell# PowerShell — 可靠捕获操作ID az rest --method post ... --verbose 2>&1 | Out-File "$env:TEMP\lro-response.txt" -Encoding utf8 $opId = (Select-String -Path "$env:TEMP\lro-response.txt" -Pattern "x-ms-operation-id.*?'([a-f0-9-]+)'" | Select-Object -First 1).Matches.Groups[1].Value万不得已时,如果即使写入文件仍丢失了操作ID,可以列出工作区中的报表来查找已创建的报表 — 但这不应成为常规操作方式。
有关更多详细信息,请参阅长时运行操作。
PBIR Definition Structure
PBIR定义结构
Reports use the PBIR format — a folder of JSON files:
text
Report/
├── definition.pbir # Semantic model reference (required)
├── definition/
│ ├── report.json # Report-level settings (required)
│ ├── version.json # Format version (required)
│ ├── pages/
│ │ ├── pages.json # Page listing (required)
│ │ ├── <pageId>/
│ │ │ ├── page.json # Page layout
│ │ │ ├── visuals/
│ │ │ │ ├── <visualId>/
│ │ │ │ │ ├── visual.json # Visual config
│ │ │ │ │ ├── mobile.json # Mobile layout (optional)
│ ├── bookmarks/ # Bookmarks (optional)
├── StaticResources/ # Custom themes, images (optional)All parts are base64-encoded in API payloads using .
"payloadType": "InlineBase64"报表使用PBIR格式 — 一个包含多个JSON文件的文件夹:
text
Report/
├── definition.pbir # 语义模型引用(必填)
├── definition/
│ ├── report.json # 报表级设置(必填)
│ ├── version.json # 格式版本(必填)
│ ├── pages/
│ │ ├── pages.json # 页面列表(必填)
│ │ ├── <pageId>/
│ │ │ ├── page.json # 页面布局
│ │ │ ├── visuals/
│ │ │ │ ├── <visualId>/
│ │ │ │ │ ├── visual.json # 可视化组件配置
│ │ │ │ │ ├── mobile.json # 移动端布局(可选)
│ ├── bookmarks/ # 书签(可选)
├── StaticResources/ # 自定义主题、图片(可选)所有部分在API负载中都使用进行base64编码。
"payloadType": "InlineBase64"definition.pbir — Semantic Model Reference
definition.pbir — 语义模型引用
For Fabric API, use (not ):
byConnectionbyPathjson
{
"$schema": "https://developer.microsoft.com/json-schemas/fabric/item/report/definitionProperties/2.0.0/schema.json",
"version": "4.0",
"datasetReference": {
"byConnection": {
"connectionString": "semanticmodelid=<SemanticModelId>"
}
}
}对于Fabric API,请使用(而非):
byConnectionbyPathjson
{
"$schema": "https://developer.microsoft.com/json-schemas/fabric/item/report/definitionProperties/2.0.0/schema.json",
"version": "4.0",
"datasetReference": {
"byConnection": {
"connectionString": "semanticmodelid=<SemanticModelId>"
}
}
}Must/Prefer/Avoid
必须/推荐/避免
MUST
必须
- ALL PBIR content MUST go through the skill — this is the single most important rule. Whether creating a brand-new report or modifying an existing one, every PBIR file (
powerbi-report-authoring,definition.pbir,report.json,version.json, page configs, visuals, filters, formatting, themes, expressions) must be authored usingpages.json. Follow its guidance for correct PBIR structure, schemas, and field values. Use its CLI tools for validation. Never construct any PBIR JSON from memory or guesswork — not even "simple" files likepowerbi-report-authoringordefinition.pbir. This skill is strictly for API transport (download, encode, upload) — it does not author PBIR content.version.json - Always pass to
--resource "https://api.fabric.microsoft.com"— omitting it causes silent auth failures.az rest - Always pass on
?format=PBIR— without it, older reports return PBIR-Legacy format which is not supported by this skill.getDefinition - Only work with PBIR format — if a definition comes back with , stop and tell the user that PBIR-Legacy is not supported.
"format": "PBIR-Legacy" - Include ALL definition parts in — modified + unmodified. The API replaces the entire definition; omitting parts deletes them.
updateDefinition - Base64-encode all part payloads — every value must be base64-encoded.
payload - Use in
byConnectionfor Fabric API —definition.pbiris for local/Git scenarios only.byPath - Poll LRO to completion — ,
Create, andgetDefinitionreturnupdateDefinition. Poll until terminal state.202 Accepted - Always use on LRO operations —
--verbosedoes not expose response headers by default. Withoutaz rest, you cannot capture the--verboseheader needed for polling, and there is no other way to retrieve it after the fact.x-ms-operation-id - Clean up temporary files — delete any local temp directories and files (decoded definitions, JSON payloads) created during the workflow once the operation completes. These can be large and accumulate on the user's machine.
- Verify semantic-model bindings after the target model is resolved — once the report's target semantic model is known (whether by a fresh deploy through an available semantic-model authoring skill or by selecting an existing workspace model), download its TMDL and compare all PBIR bindings (,
Entity,queryRef, filternativeQueryRef/Sourcereferences) against the model's table/column/measure names. This applies to both branches: even a hand-off deploy may rename or transform the model during publish, so the diff is not optional. If names differ but models are structurally equivalent (same columns/measures), remap all table-qualified bindings viaEntity. If the models are not structurally equivalent, prompt the user before attempting to re-author — explain which tables/columns/measures don't match and ask whether to proceed.powerbi-report-authoring - Local edits stay local by default — when a user requests changes to a local report, apply the changes to the local files only. Do not publish to Fabric unless the user explicitly asks to publish, upload, or push the report. Even if the report was previously published to Fabric, treat subsequent edits as local-only until told otherwise. When the user does request publishing a local
.pbip, follow the Publishing a local .pbip workflow: (a) confirm the target workspace once up front, (b) prompt publish-the-local-model vs. connect-to-an-existing-workspace-model, (c) on the publish-model branch, check whether a semantic-model authoring skill is available in the current session and degrade gracefully if not, (d) confirm create-new vs. update-existing for the report itself..pbip
- 所有PBIR内容必须通过技能处理 — 这是最重要的规则。无论是创建全新报表还是修改现有报表,所有PBIR文件(
powerbi-report-authoring、definition.pbir、report.json、version.json、页面配置、可视化组件、筛选器、格式设置、主题、表达式)都必须使用pages.json技能进行创作。遵循其关于正确PBIR结构、模式和字段值的指导。使用其CLI工具进行验证。切勿从内存中构造或猜测任何PBIR JSON — 即使是powerbi-report-authoring或definition.pbir这类“简单”文件也不行。本技能仅用于API传输(下载、编码、上传) — 不负责PBIR内容创作。version.json - 务必向传递
az rest— 省略该参数会导致静默身份验证失败。--resource "https://api.fabric.microsoft.com" - 在操作中务必传递
getDefinition— 缺少该参数时,旧版报表会返回PBIR-Legacy格式,本技能不支持该格式。?format=PBIR - 仅处理PBIR格式 — 如果定义返回,请停止操作并告知用户PBIR-Legacy不受支持。
"format": "PBIR-Legacy" - 在中包含所有定义部分 — 修改过的和未修改的。API会替换整个定义;省略部分会导致其被删除。
updateDefinition - 对所有部分负载进行Base64编码 — 每个值都必须进行Base64编码。
payload - 在中使用
definition.pbir— 针对Fabric API,byConnection仅适用于本地/Git场景。byPath - 轮询LRO直到完成 — 、
创建和getDefinition操作会返回updateDefinition。轮询直到进入终端状态。202 Accepted - 在LRO操作中务必使用—
--verbose默认不暴露响应头。如果不使用az rest,无法捕获轮询所需的--verbose头,且事后没有其他方式获取该值。x-ms-operation-id - 清理临时文件 — 操作完成后,删除工作流中创建的所有本地临时目录和文件(解码的定义、JSON负载)。这些文件可能很大,会占用用户机器的存储空间。
- 解析目标模型后验证语义模型绑定 — 一旦确定报表的目标语义模型(无论是通过可用的语义模型创作技能重新部署,还是选择现有工作区模型),下载其TMDL并将所有PBIR绑定(、
Entity、queryRef、筛选器nativeQueryRef/Source引用)与模型的表/列/度量值名称进行比较。这适用于两个分支:即使是委托部署,模型在发布过程中也可能重命名或转换,因此差异检查是必须的。如果名称不同但模型结构等效(列/度量值相同),请通过Entity重新映射所有表限定绑定。如果模型结构不等效,请在尝试重新创作前提示用户 — 说明哪些表/列/度量值不匹配,并询问是否继续。powerbi-report-authoring - 本地编辑默认仅保留在本地 — 当用户请求修改本地报表时,仅对本地文件进行更改。除非用户明确要求发布、上传或推送报表到Fabric,否则不要发布。即使报表之前已发布到Fabric,后续编辑也应视为仅本地修改,直到用户明确指示。当用户请求发布本地
.pbip时,请遵循发布本地.pbip工作流:(a) 提前确认目标工作区;(b) 提示用户选择发布本地模型还是连接到工作区中现有模型;(c) 在发布模型分支中,检查当前会话中是否有可用的语义模型创作技能,如果没有则优雅降级;(d) 确认报表是创建新报表还是更新现有报表。.pbip
PREFER
推荐
- Soft delete over hard delete — allows recovery.
- with JMESPath
az restfor filtering — built-in JSON parsing, no extra tools needed.--query
- 优先使用软删除而非硬删除 — 允许恢复。
- 使用带JMESPath 的
--query进行筛选 — 内置JSON解析,无需额外工具。az rest
AVOID
避免
- Hand-writing or directly constructing PBIR JSON — whether creating new files or modifying existing ones, all PBIR content (,
definition.pbir,report.json, pages, visuals, filters, formatting, themes, expressions) must go through theversion.jsonskill. Never construct any PBIR JSON from memory or guesswork — not even "simple" structural files. No exceptions.powerbi-report-authoring - PBIR-Legacy format — do not create, read, or update PBIR-Legacy definitions. Only modern PBIR format is supported.
- Sending only modified parts in — the API replaces the full definition; missing parts are deleted.
updateDefinition - Using in
byPathfor API payloads — only works for local/Git scenarios.definition.pbir - Hardcoded workspace/report IDs — resolve dynamically via the List APIs.
- Skipping LRO polling — definition operations may be async; always check for 202 responses.
- Omitting on
?format=PBIR— may return unusable PBIR-Legacy format.getDefinition - Retrying a create POST after receiving 202 — risks creating duplicates. See the LRO section for the correct recovery pattern.
- 手动编写或直接构造PBIR JSON — 无论是创建新文件还是修改现有文件,所有PBIR内容(、
definition.pbir、report.json、页面、可视化组件、筛选器、格式设置、主题、表达式)都必须通过version.json技能处理。切勿从内存中构造或猜测任何PBIR JSON — 即使是“简单”的结构文件也不行。无例外。powerbi-report-authoring - PBIR-Legacy格式 — 不要创建、读取或更新PBIR-Legacy定义。仅支持现代PBIR格式。
- 在中仅发送修改过的部分 — API会替换完整定义;缺少的部分会被删除。
updateDefinition - 在API负载的中使用
definition.pbir— 仅适用于本地/Git场景。byPath - 硬编码工作区/报表ID — 通过List API动态解析。
- 跳过LRO轮询 — 定义操作可能是异步的;务必检查202响应。
- 在中省略
getDefinition— 可能返回无法使用的PBIR-Legacy格式。?format=PBIR - 收到202响应后重试创建POST请求 — 可能导致创建重复报表。请参阅LRO部分了解正确的恢复模式。
Agentic Workflow
代理工作流
Publishing a local .pbip
.pbip发布本地.pbip
.pbipThis is the primary entry point when a user has a local (report
plus sibling ) on disk and asks to publish, upload, push,
or deploy the report to a Fabric workspace.
.pbip.SemanticModel1. Detect that the source is a local . Any of these signals:
.pbip- A file in or above the working directory.
<Name>.pbip - A folder with a sibling
<Name>.Reportfolder.<Name>.SemanticModel - The report's uses
definition.pbir(local/Git form) rather thanbyPath(API form).byConnection - Presence of a cache folder.
.pbi/
If the source is not a local (e.g., the report was already
downloaded from Fabric and only the folder is present with a
), use the
Modifying an existing report in Fabric
workflow instead.
.pbip.ReportbyConnectiondefinition.pbir2. Confirm the target workspace once. Resolve and store the workspace
ID by name (per COMMON-CLI.md).
This single workspace is reused for both the model deploy (if applicable)
and the report publish — never split them.
3. Prompt the user about the semantic model. Ask explicitly — do not
silently choose:
"Do you want me to publish the local semantic model to this workspace too, or connect this report to an existing semantic model already in the workspace?"
4a. Branch: "Publish the local model".
- Check whether a semantic-model authoring skill is
available in the current session.
- Available → hand off to that workflow to
create or update the semantic model. Pass: target workspace ID,
the local folder path (TMDL source), and the desired model display name. Wait for that skill's workflow to reach terminal success before proceeding.
.SemanticModel - Not available → tell the user a semantic-model authoring skill is not loaded in this session and that publishing the local model is not possible without it. Then degrade to branch 4b (connect-to-existing) and re-prompt for which workspace model to bind the report to.
- Available → hand off to that workflow to
create or update the semantic model. Pass: target workspace ID,
the local
4b. Branch: "Connect to an existing model in the workspace".
- List semantic models in the target workspace and confirm the target
model with the user. Resolve by name.
semanticModelId
5. Resolve . Regardless of branch, the report needs
a concrete model ID to bind to:
semanticModelId- After 4a: list semantic models in the target workspace and find the model just deployed by name (the model skill verifies by listing workspace items but does not return an ID).
- After 4b: this was already done.
6. Verify bindings against the resolved model (universal, both
branches). Download the model TMDL and run the bindings diff per
MUST Verify semantic-model bindings after the target model is
resolved. Even on the publish-the-local-model branch, the
model skill may rename tables or apply transforms during deploy, so
this diff is not optional. Remap any drift via skill
or, if structurally divergent, prompt the user before re-authoring.
powerbi-report-authoring7. Rebind from → . Use
to set:
definition.pbirbyPathbyConnectionpowerbi-report-authoringjson
"datasetReference": {
"byConnection": {
"connectionString": "semanticmodelid=<resolved-id>"
}
}The Fabric API rejects ; this swap is mandatory on every
local-source publish.
byPath8. Decide create-new vs. update-existing for the report. Default the
report to the filename without extension (e.g.
→ ). Surface the default to the
user so they can override.
displayName.pbipSalesDashboard.pbip"SalesDashboard"- List reports in the target workspace and look up the chosen
.
displayName- Not found → create. Follow Create Report (with Definition).
- Found → confirm with the user: overwrite the existing report
(), publish under a different name, or cancel. Follow Update Report Definition on overwrite.
updateDefinition
9. Encode and upload. Run the existing transport — base64-encode all
PBIR parts (forward-slash paths!), build the payload, POST,
capture (with written to a file), poll
the LRO to terminal success.
partsx-ms-operation-id--verbose10. Clean up any temporary files created during the flow.
Note on report-side verification: there is no reliable programmatic way to confirm a report renders correctly post-publish — the report lives at a Fabric Service URL and visual rendering requires a browser session. Surface the workspace/report URL so the user can verify in the browser.
当用户本地磁盘上有(报表及其同级)并要求发布、上传、推送或部署到Fabric工作区时,这是主要入口点。
.pbip.SemanticModel1. 检测源是否为本地。以下任一信号均可:
.pbip- 工作目录中或其上级目录存在文件。
<Name>.pbip - 存在文件夹,且同级目录有
<Name>.Report文件夹。<Name>.SemanticModel - 报表的使用
definition.pbir(本地/Git形式)而非byPath(API形式)。byConnection - 存在缓存文件夹。
.pbi/
2. 确认目标工作区。通过名称解析并存储工作区ID(按照COMMON-CLI.md中的方法)。该工作区将同时用于模型部署(如适用)和报表发布 — 切勿分开使用。
3. 提示用户关于语义模型的选择。明确询问 — 不要默认选择:
“您希望我将本地语义模型也发布到该工作区,还是将此报表连接到工作区中已有的语义模型?”
4a. 分支:“发布本地模型”
- 检查当前会话中是否有可用的语义模型创作技能。
- 可用 → 将任务委托给该工作流以创建或更新语义模型。传递:目标工作区ID、本地文件夹路径(TMDL源)以及所需的模型显示名称。等待该技能的工作流完成后再继续。
.SemanticModel - 不可用 → 告知用户当前会话中未加载语义模型创作技能,无法发布本地模型。然后降级到4b分支(连接到现有模型),重新提示用户选择要绑定报表的工作区模型。
- 可用 → 将任务委托给该工作流以创建或更新语义模型。传递:目标工作区ID、本地
4b. 分支:“连接到工作区中的现有模型”
- 列出目标工作区中的语义模型,并与用户确认目标模型。通过名称解析。
semanticModelId
5. 解析。无论选择哪个分支,报表都需要一个具体的模型ID进行绑定:
semanticModelId- 选择4a分支后:列出目标工作区中的语义模型,通过名称查找刚刚部署的模型(模型技能会通过列出工作区项进行验证,但不会返回ID)。
- 选择4b分支后:此步骤已完成。
6. 验证与解析后模型的绑定(通用步骤,两个分支均适用)。下载模型TMDL并按照必须中的解析目标模型后验证语义模型绑定步骤进行绑定差异检查。即使在发布本地模型分支中,模型技能在部署过程中也可能重命名表或应用转换,因此差异检查是必须的。通过技能重新映射任何差异,或者如果结构不同,在重新创作前提示用户。
powerbi-report-authoring7. 将从重新绑定为。使用技能设置:
definition.pbirbyPathbyConnectionpowerbi-report-authoringjson
"datasetReference": {
"byConnection": {
"connectionString": "semanticmodelid=<resolved-id>"
}
}Fabric API会拒绝;每次从本地源发布时,此转换都是必须的。
byPath8. 决定创建新报表还是更新现有报表。默认报表为文件名(不含扩展名)(例如 → )。将默认名称告知用户,以便他们可以覆盖。
displayName.pbipSalesDashboard.pbip"SalesDashboard"- 列出目标工作区中的报表,查找所选的。
displayName
9. 编码并上传。执行现有传输流程 — 对所有PBIR部分进行base64编码(使用正斜杠路径!),构建负载,发送POST请求,捕获(将输出写入文件),轮询LRO直到完成。
partsx-ms-operation-id--verbose10. 清理工作流中创建的所有临时文件。
报表端验证说明:目前没有可靠的程序化方式确认报表发布后是否正确渲染 — 报表位于Fabric服务URL,可视化渲染需要浏览器会话。提供工作区/报表URL,以便用户在浏览器中验证。
Modifying an existing report in Fabric
修改Fabric中的现有报表
- Authenticate → see COMMON-CLI.md § Authentication Recipes
- Find workspace → Resolve workspace ID by name
- List/find report → Resolve report ID by name
- Download definition → → poll LRO → decode parts to local files
getDefinition?format=PBIR - Author PBIR content → Use the skill for ALL changes. This covers every file:
powerbi-report-authoring,definition.pbir,report.json,version.json, page configs, visuals, filters, formatting, themes, and expressions. Follow its guidance for correct structure, schemas, and field values. Use its CLI tools to validate. Never construct any PBIR JSON from memory or guesswork.pages.json - Upload changes → Re-encode all local files to base64 → with ALL parts (modified + unmodified)
updateDefinition - Clean up → Delete all temporary local files and directories created during the workflow
- 身份验证 → 请参阅COMMON-CLI.md § 身份验证方案
- 查找工作区 → 通过名称解析工作区ID
- 列出/查找报表 → 通过名称解析报表ID
- 下载定义 → → 轮询LRO → 将部分解码到本地文件
getDefinition?format=PBIR - 创作PBIR内容 → 使用技能进行所有更改。这涵盖所有文件:
powerbi-report-authoring、definition.pbir、report.json、version.json、页面配置、可视化组件、筛选器、格式设置、主题和表达式。遵循其关于正确结构、模式和字段值的指导。使用其CLI工具进行验证。切勿从内存中构造或猜测任何PBIR JSON。pages.json - 上传更改 → 将所有本地文件重新编码为base64 → 使用所有部分(修改过的和未修改的)执行
updateDefinition - 清理 → 删除工作流中创建的所有本地临时文件和目录
Creating a new report in Fabric
在Fabric中创建新报表
- Authenticate → see COMMON-CLI.md § Authentication Recipes
- Find workspace → Resolve workspace ID by name
- Resolve semantic model → Find the semantic model ID and workspace name for the connection string
definition.pbir - Verify semantic-model bindings → Download the target semantic model definition (TMDL) and compare all PBIR ,
Entity,queryRef, and filter references against the target table/column names. If names differ but structure matches, remap all table-qualified bindings. If models are structurally different, prompt the user before proceeding — explain what doesn't match and ask whether to re-author the affected bindingsnativeQueryRef - Author PBIR content → Use the skill to generate the complete PBIR definition from scratch —
powerbi-report-authoring,definition.pbir,report.json,version.json, page configs, and all visuals. Never construct any PBIR JSON from memory or guesswork.pages.json - Upload → Encode all files to base64 → with
POST /reportsand all definition partsdisplayName - Clean up → Delete temporary local files
- 身份验证 → 请参阅COMMON-CLI.md § 身份验证方案
- 查找工作区 → 通过名称解析工作区ID
- 解析语义模型 → 查找连接字符串所需的语义模型ID和工作区名称
definition.pbir - 验证语义模型绑定 → 下载目标语义模型定义(TMDL),将所有PBIR的、
Entity、queryRef和筛选器引用与目标表/列名称进行比较。如果名称不同但结构匹配,重新映射所有表限定绑定。如果模型结构不同,在继续前提示用户 — 说明哪些内容不匹配,并询问是否重新创作受影响的绑定。nativeQueryRef - 创作PBIR内容 → 使用技能从头生成完整的PBIR定义 —
powerbi-report-authoring、definition.pbir、report.json、version.json、页面配置和所有可视化组件。切勿从内存中构造或猜测任何PBIR JSON。pages.json - 上传 → 将所有文件编码为base64 → 使用和所有定义部分执行
displayNamePOST /reports - 清理 → 删除本地临时文件
Troubleshooting
故障排除
| Error | Cause | Fix |
|---|---|---|
| Wrong or missing | Always pass |
| Insufficient permissions | Check workspace role (Contributor+ for write ops) |
| Wrong workspace or report ID | Re-resolve IDs via List APIs |
| Malformed base64 or invalid PBIR JSON | Re-encode files; validate JSON before encoding |
| LRO not polled to completion | Implement LRO polling pattern |
| Report has encrypted sensitivity label | Cannot get definition for encrypted reports |
| Duplicate name in workspace | Use a unique display name |
| Report was created before PBIR was default | PBIR-Legacy is not supported by this skill |
| Visuals empty / no data after publish | PBIR entity names don't match workspace semantic model table names (e.g., local CSV table name vs workspace table name) | Download target semantic model TMDL, compare table names, update all |
| Definition part paths use backslashes ( | Normalize all |
| Duplicate reports appear in workspace after create | Create POST was retried after a | Never retry a create POST after |
Visuals empty after publishing a local | The semantic-model authoring skill may rename or transform tables/columns during deploy, so the freshly deployed model's TMDL no longer matches the report's PBIR bindings. | Re-run the TMDL-diff verification against the deployed model (per MUST Verify semantic-model bindings after the target model is resolved) and remap drifted bindings via |
| Visuals empty after publish, despite TMDL diff being clean | | Re-run step 7 of Publishing a local .pbip to set |
| Semantic-model authoring skill not available when user wants to publish the local model | No semantic-model authoring skill is loaded in the current session. | Inform the user and degrade to the connect-to-existing branch — re-prompt for which workspace model to bind the report to. Do not silently fall through. |
| Model published to one workspace, report POSTed to another | Workspace was not confirmed up front, or two different workspaces were used for the model deploy and the report publish. | Enforce the single-workspace rule (step 2 of Publishing a local .pbip). Recovery: either re-publish the report into the model's workspace, or move the model. |
| 错误 | 原因 | 解决方法 |
|---|---|---|
| | 务必传递 |
| 权限不足 | 检查工作区角色(写入操作需要参与者及以上权限) |
| 工作区或报表ID错误 | 通过List API重新解析ID |
| Base64格式错误或PBIR JSON无效 | 重新编码文件;编码前验证JSON |
| 未轮询LRO直到完成 | 实现LRO轮询模式 |
| 报表带有加密敏感度标签 | 无法获取加密报表的定义 |
| 工作区中存在重复名称 | 使用唯一的显示名称 |
| 报表创建于PBIR成为默认格式之前 | 本技能不支持PBIR-Legacy格式 |
| 发布后可视化组件为空/无数据 | PBIR实体名称与工作区语义模型表名称不匹配(例如,本地CSV表名称与工作区表名称) | 下载目标语义模型TMDL,比较表名称,更新所有 |
创建/更新时出现 | 定义部分路径使用反斜杠( | 上传前将负载中的所有 |
| 创建后工作区中出现重复报表 | 收到 | 收到 |
通过模型委托发布本地 | 语义模型创作技能在部署过程中可能重命名或转换表/列,因此新部署模型的TMDL与报表的PBIR绑定不再匹配。 | 针对部署的模型重新运行TMDL差异验证(按照必须中的解析目标模型后验证语义模型绑定步骤),并通过 |
| 发布后可视化组件为空,尽管TMDL差异检查正常 | | 重新执行发布本地.pbip的步骤7,将 |
| 用户希望发布本地模型时,语义模型创作技能不可用 | 当前会话中未加载语义模型创作技能。 | 告知用户并降级到连接到现有模型分支 — 重新提示用户选择要绑定报表的工作区模型。不要静默跳过。 |
| 模型发布到一个工作区,报表POST到另一个工作区 | 未提前确认工作区,或模型部署和报表发布使用了两个不同的工作区。 | 强制执行单一工作区规则(发布本地.pbip的步骤2)。恢复方法:要么将报表重新发布到模型所在的工作区,要么移动模型。 |