一键导入
fabric-monitoring-dmv
Monitoramento de modelos semânticos Fabric via DMV/TMSCHEMA no endpoint XMLA — refreshes, saúde do modelo e capacidade.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Monitoramento de modelos semânticos Fabric via DMV/TMSCHEMA no endpoint XMLA — refreshes, saúde do modelo e capacidade.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Índice de skills Python: FastAPI, pandas/polars, pytest, packaging, asyncio e CLIs. Use ao trabalhar com APIs REST, transformações de dados, testes, publicação de pacotes, código async ou ferramentas de linha de comando.
Engenharia de Ontologias OWL no Microsoft Fabric — import, export, design e integração com OneLake e Delta Lake.
Use Databricks built-in AI Functions (ai_classify, ai_extract, ai_summarize, ai_mask, ai_translate, ai_fix_grammar, ai_gen, ai_analyze_sentiment, ai_similarity, ai_parse_document, ai_query, ai_forecast) to add AI capabilities directly to SQL and PySpark pipelines without managing model endpoints. Also covers document parsing and building custom RAG pipelines (parse → chunk → index → query).
Create Databricks AI/BI dashboards. Use when creating, updating, or deploying Lakeview dashboards. CRITICAL: You MUST test ALL SQL queries via execute_sql BEFORE deploying. Follow guidelines strictly.
Builds Python-based Databricks applications using Dash, Streamlit, Gradio, Flask, FastAPI, or Reflex. Handles OAuth authorization (app and user auth), app resources, SQL warehouse and Lakebase connectivity, model serving integration, foundation model APIs, LLM integration, and deployment. Use when building Python web apps, dashboards, ML demos, or REST APIs for Databricks, or when the user mentions Streamlit, Dash, Gradio, Flask, FastAPI, Reflex, or Databricks app.
Patterns and best practices for Lakebase Autoscaling (next-gen managed PostgreSQL). Use when creating or managing Lakebase Autoscaling projects, configuring autoscaling compute or scale-to-zero, working with database branching for dev/test workflows, implementing reverse ETL via synced tables, or connecting applications to Lakebase with OAuth credentials.
| name | fabric-monitoring-dmv |
| description | Monitoramento de modelos semânticos Fabric via DMV/TMSCHEMA no endpoint XMLA — refreshes, saúde do modelo e capacidade. |
| updated_at | "2026-04-23T00:00:00.000Z" |
| source | web_search |
Fonte: Microsoft Fabric XMLA Endpoint (pyadomd, Power BI API) Atualizado: Abril 2026 Uso: Leia este arquivo ANTES de monitorar modelos semanticos Fabric via DMV.
Monitora modelos semanticos Fabric e capacidade programaticamente via DMV (Dynamic Management Views) -- executa queries TMSCHEMA contra endpoint XMLA, monitora refreshes, consulta saude de modelo e capacidade utilizada via REST API.
Monitoramento manual de modelo semantico Fabric (saude, partitions, memoria, refresh status) requer conexao direta a endpoint XMLA com pyadomd ou DAX Studio, e nao escala para multiplos modelos. Alem disso, rastrear historico de refresh e correlacionar com capacidade consumida requer multiplas fontes de dados (DMV + Power BI API).
Esta skill encapsula monitoramento completo:
Resultado: Observabilidade completa de modelo semantico com 1-2 queries encapsuladas.
⚠️ Breaking change em v19.82.0 (ADOMD): O pacote NuGet foi renomeado. O novo pacote multi-runtime é
Microsoft.AnalysisServices.AdomdClient(sem sufixo). Os pacotes legados.retail.amd64(Framework) e.NetCore.retail.amd64(Core) ainda existem no NuGet para compatibilidade, mas prefira o novo pacote unificado para projetos novos.
| Componente | Versão atual | Notas |
|---|---|---|
pyadomd (PyPI) | 0.1.1 | Estável; sem breaking changes recentes |
Microsoft.AnalysisServices.AdomdClient (NuGet) | 19.113.7 | Pacote multi-runtime recomendado |
ADOMD AccessToken property | desde 19.67.0 | Permite OAuth token externo sem senha inline |
| ADOMD SPN Profiles | desde 19.82.0 | Para cenários multi-tenant; não funciona em PPU |
Instalação pyadomd:
pip install pyadomd
O pyadomd requer que o DLL do ADOMD.NET esteja no sys.path antes do import:
from sys import path
path.append(r'C:\Program Files\Microsoft.NET\ADOMD.NET\150')
from pyadomd import Pyadomd
⚠️ Breaking change em junho 2025: A partir de 9 de junho de 2025, todos os SKUs de capacidade Fabric e Power BI passaram a ter XMLA leitura e escrita habilitados por padrão. Antes dessa data, capacidades no modo padrão só permitiam leitura, e admins precisavam habilitar manualmente o modo read/write. Se seu código verificava/forçava essa configuração, revise.
⚠️ Restrição confirmada (sem versão específica — comportamento atual): DMVs do tipo
$SYSTEM.DISCOVER_*não são suportados via XMLA endpoint no Fabric/Power BI Premium. Apenas as famílias abaixo funcionam:
$SYSTEM.TMSCHEMA_*— metadados do modelo tabular (tabelas, partitions, measures, colunas, etc.)$SYSTEM.DMSCHEMA_*— schema de mineração de dados$SYSTEM.MDSCHEMA_*— schema multidimensionalO DMV
$SYSTEM.DISCOVER_M_EXPRESSIONSem particular não é suportado via XMLA; para obter expressões M, use o Tabular Object Model (TOM) diretamente.DMVs do tipo
$SYSTEM.DISCOVER_STORAGE_TABLE_COLUMN_SEGMENTS,$SYSTEM.DISCOVER_DB_CONNECTIONSe similares retornam erro de permissão via XMLA endpoint — eles exigem permissão de server admin do Analysis Services, que não é concedida ao contexto Fabric.
Exemplo mais comum -- conectar a XMLA, obter partitions enriquecidas e status de refresh:
from monitoring_dmv import (
set_dmv_connection_string_spn,
dmv_fetch_partitions_enriched,
get_semantic_model_refreshes
)
# 1. Construir connection string
conn_str = set_dmv_connection_string_spn(
client_id="00000000-0000-0000-0000-000000000001",
client_secret="your-secret",
tenant_id="00000000-0000-0000-0000-000000000002",
workspace_name="analytics",
semantic_model_name="SalesModel"
)
# 2. Obter partitions enriquecidas
partitions_df = dmv_fetch_partitions_enriched(conn_str)
print(f"Partitions: {len(partitions_df)}")
print(partitions_df[['TableName', 'Name', 'RefreshedTime']])
# 3. Obter historico de refresh
refreshes = get_semantic_model_refreshes(
workspace="analytics",
semantic_model="SalesModel",
top=10
)
print(f"Ultimos refreshes: {refreshes}")
set_dmv_connection_string_spn -- Connection com SPNConstrói connection string para XMLA endpoint com Service Principal.
Parametros:
| Parametro | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
client_id | str | Sim | Application ID do SPN |
client_secret | str | Sim | Client secret do SPN |
tenant_id | str | Sim | Tenant ID do Azure |
workspace_name | str | Sim | Nome do workspace Fabric |
semantic_model_name | str | Sim | Nome do modelo semantico |
Fluxo interno:
Formato da connection string SPN (ADOMD ≥ 19.67.0):
Data Source=powerbi://api.powerbi.com/v1.0/myorg/<WorkspaceName>;
Initial Catalog=<ModelName>;
User ID=app:<client_id>@<tenant_id>;
Password=<client_secret>
💡 Alternativa com AccessToken (ADOMD ≥ 19.67.0): Se você já possui um token OAuth (ex: obtido via
azure-identity), pode passar diretamente via propriedadeAccessTokenno objetoAdomdConnection, evitando exporclient_secretna connection string.
Exemplo:
from monitoring_dmv import set_dmv_connection_string_spn
conn_str = set_dmv_connection_string_spn(
client_id="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
client_secret="secret123",
tenant_id="bbbbbbbb-cccc-dddd-eeee-ffffffffffff",
workspace_name="DataLake",
semantic_model_name="FactSales"
)
# conn_str: Data Source=powerbi://api.powerbi.com/v1.0/myorg/DataLake;Initial Catalog=FactSales;...
set_dmv_connection_string_user -- Connection com UserConstrói connection string com credenciais de usuario (AAD).
⚠️ Aviso: Autenticação interativa (usuário/senha inline) não funciona em ambientes headless (ex: pipelines CI/CD, Databricks Jobs). Para automação, prefira SPN (
set_dmv_connection_string_spn).
Parametros:
| Parametro | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
user_email | str | Sim | Email do usuario AAD |
password | str | Sim | Senha do usuario |
workspace_name | str | Sim | Nome do workspace Fabric |
semantic_model_name | str | Sim | Nome do modelo semantico |
Fluxo interno:
Exemplo:
from monitoring_dmv import set_dmv_connection_string_user
conn_str = set_dmv_connection_string_user(
user_email="analyst@company.com",
password="userpassword",
workspace_name="DataLake",
semantic_model_name="FactSales"
)
dmv_fetch_partitions_enriched -- Obter partitions com metadataConsulta TMSCHEMA_PARTITIONS e enriquece com nomes de tabelas.
Parametros:
| Parametro | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
conn_str | str | Sim | Connection string |
Fluxo interno:
SELECT * FROM $SYSTEM.TMSCHEMA_PARTITIONSSELECT * FROM $SYSTEM.TMSCHEMA_TABLES para nomes⚠️ Limitação DMV:
JOINnão é suportado na sintaxe DMV — o merge é feito em Python (pandas), não na query. Nunca tente usarJOINdireto na DMV query; ela retornará erro de sintaxe.
Exemplo:
from monitoring_dmv import dmv_fetch_partitions_enriched
partitions = dmv_fetch_partitions_enriched(conn_str)
for _, row in partitions.iterrows():
print(f"{row['TableName']} | {row['Name']} | {row['RefreshedTime']}")
evaluate_dmv_queries -- Executar query DMV customizadaExecuta query DMV customizada contra modelo semantico.
Parametros:
| Parametro | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
conn_str | str | Sim | Connection string XMLA |
query | str | Sim | Query DMV (DAX/MDX) |
Fluxo interno:
⚠️ Famílias DMV suportadas via XMLA Fabric: Use apenas
$SYSTEM.TMSCHEMA_*,$SYSTEM.DMSCHEMA_*ou$SYSTEM.MDSCHEMA_*. Queries contra$SYSTEM.DISCOVER_*retornam erro de permissão. Sintaxe DMV não suportaJOIN,GROUP BY,LIKE,CASTouCONVERT.
Exemplo:
from monitoring_dmv import evaluate_dmv_queries
# OK: TMSCHEMA_COLUMNS é suportado
query = """
SELECT
TABLE_NAME as TableName,
COLUMN_NAME as ColumnName,
DATA_TYPE as DataType
FROM $SYSTEM.TMSCHEMA_COLUMNS
"""
cols = evaluate_dmv_queries(conn_str, query)
print(cols.head())
# EVITE: $SYSTEM.DISCOVER_STORAGE_TABLE_COLUMN_SEGMENTS retorna 403 via XMLA Fabric
# query = "SELECT * FROM $SYSTEM.DISCOVER_STORAGE_TABLE_COLUMN_SEGMENTS" # NÃO FAÇA
get_semantic_model_refreshes -- Historico de refresh via Power BI APIObtem historico de operacoes de refresh de um modelo semantico via REST API.
Parametros:
| Parametro | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
workspace | str | Sim | ID ou nome do workspace |
semantic_model | str | Sim | ID ou nome do modelo |
top | int | Nao | Max resultados (padrao: todos) |
Fluxo interno:
GET /v1.0/myorg/groups/{workspaceId}/datasets/{modelId}/refreshes💡 Nota de nomenclatura da API: A Power BI REST API ainda usa
datasetsna URL mesmo para modelos semânticos Fabric (o termo "dataset" não foi renomeado na URL). Isso é esperado e documentado; não troque porsemanticmodels.
⚠️ Avisos de refresh não aparecem na resposta da API: Se o refresh foi iniciado via REST API, warnings são gravados no histórico mas os endpoints
Get Refresh HistoryeGet Refresh Execution Detailsnão retornam os warnings na resposta JSON. Para inspecionar warnings, use XMLA (resposta inline) ou o Fabric Monitoring Hub.
Exemplo:
from monitoring_dmv import get_semantic_model_refreshes
refreshes = get_semantic_model_refreshes(
workspace="analytics",
semantic_model="FactSales",
top=20
)
for refresh in refreshes:
print(f"{refresh['startTime']} | {refresh['status']} | {refresh.get('duration')}")
refresh_semantic_model -- Iniciar refresh via Power BI APIInicia refresh de modelo semantico com opcoes customizadas.
⚠️ Breaking change (comportamento confirmado 2025): Para que o refresh seja classificado como "enhanced refresh" (e não refresh simples "via API"), o payload DEVE incluir pelo menos um dos parametros enhanced:
commitMode,maxParallelism,retryCountouobjects. Além disso, o workspace DEVE estar em capacidade Premium, PPU ou Fabric — workspaces Shared/Pro não suportam enhanced refresh via SPN. Em Pro/Shared, SPN retorna 403.
Parametros:
| Parametro | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
workspace | str | Sim | ID ou nome do workspace |
semantic_model | str | Sim | ID ou nome do modelo |
type | str | Nao | Full, DataOnly, Calculate, Automatic, etc |
notify_option | str | Nao | MailOnCompletion, NoNotification |
commit_mode | str | Nao | transactional ou partialBatch (enhanced) |
max_parallelism | int | Nao | Grau de paralelismo (enhanced) |
retry_count | int | Nao | Tentativas em caso de falha (enhanced) |
objects | list | Nao | Tables/partitions selecionadas (enhanced) |
Fluxo interno:
POST /v1.0/myorg/groups/{workspaceId}/datasets/{modelId}/refreshesget_semantic_model_refreshes()Exemplo — refresh simples:
from monitoring_dmv import refresh_semantic_model
refresh_semantic_model(
workspace="analytics",
semantic_model="FactSales",
type="Full",
notify_option="MailOnCompletion"
)
Exemplo — enhanced refresh (requer Premium/PPU/Fabric):
from monitoring_dmv import refresh_semantic_model
# Inclui commitMode/maxParallelism -> classificado como "via enhanced API"
refresh_semantic_model(
workspace="analytics",
semantic_model="FactSales",
type="Full",
commit_mode="transactional",
max_parallelism=2,
retry_count=1,
objects=[
{"table": "FactSales", "partition": "2024"}
]
)
💡 Dica: Enhanced refresh não atualiza tile caches automaticamente. Caches só são atualizados quando um usuario acessa o report. Considere isso em pipelines que dependem de caches atualizados imediatamente apos o refresh.
| Issue | Solution |
|---|---|
| Pyadomd nao importa | Instale: pip install pyadomd. Adicione o path do Microsoft.AnalysisServices.AdomdClient.dll ao sys.path antes do import. Pacote NuGet recomendado: Microsoft.AnalysisServices.AdomdClient ≥ 19.113.7. |
| Connection timeout (401) | Token expirado ou SPN sem permissao. Renew credenciais. TLS 1.2+ obrigatório — atualize o AdomdClient se necessário. |
| Query retorna vazio | Modelo pode ser Import vs DirectLake. Verifique estrutura com TMSCHEMA_TABLES. |
| Partition nao encontrada | Modelo pode estar em modo DirectLake (sem partitions). Verifique TMSCHEMA_PARTITIONS. |
| XMLA endpoint desabilitado | Desde junho 2025, XMLA read/write é padrão em todos os SKUs Fabric/Power BI. Se ainda estiver desabilitado, verifique configurações de capacidade no admin portal. |
| Refresh retorna 202 | Refresh aceito; monitorar com get_semantic_model_refreshes() ate conclusao. |
| DMV query syntax error | Usar sintaxe DAX/DMV com $SYSTEM. prefix. DMV não suporta JOIN, GROUP BY, LIKE, CAST ou CONVERT. |
| DMV retorna 403 (DISCOVER_*) | $SYSTEM.DISCOVER_* DMVs não são suportados via XMLA Fabric (exigem server admin do AS). Use apenas TMSCHEMA_*, DMSCHEMA_* ou MDSCHEMA_*. |
| DISCOVER_M_EXPRESSIONS não suportado | Este DMV não é suportado via XMLA endpoint. Use Tabular Object Model (TOM) para obter expressões M. |
| User credentials prompt | Interactive login necessario. Configure SPN para automacao. |
| Refresh retorna "via API" em vez de "via enhanced API" | Inclua pelo menos um parametro enhanced no payload: commitMode, maxParallelism, retryCount ou objects. Workspace deve ser Premium/PPU/Fabric. |
| SPN retorna 403 no refresh | Refresh via SPN só funciona em workspaces Premium, PPU ou Fabric. Em workspaces Pro/Shared, use master user account como workaround. |
| Warnings de refresh ausentes na resposta da API | Esperado: os endpoints Get Refresh History e Get Refresh Execution Details não retornam warnings. Consulte o Fabric Monitoring Hub para inspeção detalhada. |