Power BI + MCP: El Playbook Definitivo

Power BI MCP Playbook

Dale a la IA el contexto completo de tu semantic model, no solo código DAX suelto.

El Problema Real

Estás copiando DAX a ChatGPT y recibes consejos genéricos que:

  • Referencian tablas que no existen en tu modelo
  • Sugieren optimizaciones que no funcionan con tus relationships
  • Te obligan a explicar la estructura de tu modelo cada vez
  • Tratan tu semantic model como una caja negra

La IA está ciega. Trabaja con sintaxis, no con semántica.

Si crees que ya “sabes DAX”, MCP va a dejar en evidencia cuánto de tu trabajo sigue siendo suposición.

MCP no hace DAX más fácil. Hace que suponer sea imposible.

La Solución: MCP Server

Model Context Protocol (MCP) conecta la IA directamente a tu modelo semántico de Power BI. La IA puede:

  • Ver tus tablas, columnas y relaciones reales
  • Entender tus medidas y sus dependencias
  • Consultar la estructura de tu modelo antes de sugerir cambios
  • Generar DAX que encaja en tu modelo específico, no en una plantilla genérica

Esto no se trata de generar código más rápido. Se trata de generar código que funcione en tu modelo.

Arquitectura Técnica: Cómo Funciona Realmente

Power BI Desktop (modelo .pbix)

   VS Code (host del MCP Server via extensión)

   Antigravity (cliente MCP)

   LLM (Claude 3.5 Sonnet / GPT-4o)

IMPORTANTE: Selección de Modelo de IA

Para usar MCP con Power BI, DEBES seleccionar Claude 3.5 Sonnet o GPT-4o en el chat de Antigravity.

Gemini NO es compatible con este servidor MCP. Si usas Gemini, el agente fallará. Cambia el modelo manualmente en el selector ubicado debajo de la barra de chat.

Clarificación crítica:

  • VS Code NO es opcional. Es el host que expone el MCP Server de Power BI.
  • Antigravity se conecta al servidor MCP que corre dentro de VS Code.
  • MCP Server vive como extensión de VS Code, no como servicio independiente.

Sin VS Code en el medio, MCP no existe. No hay atajo.

Qué NO es Esto

Seamos claros:

  • Esto no es ChatGPT para DAX: ChatGPT adivina. MCP inspecciona.
  • Esto no es Copilot: Copilot autocompleta sintaxis. MCP entiende semántica.
  • Esto no es magia: Sigues necesitando saber DAX. Esto te hace más rápido, no flojo.

MCP es un multiplicador de fuerza, no un reemplazo de entender tu modelo de datos.

🧠 Modelos Mentales: Cómo MCP Cambia Tu Forma de Pensar DAX

El Cambio Fundamental

La mayoría de usuarios de Power BI piensan mal sobre la asistencia de IA. La tratan como un buscador de snippets de código. MCP habilita un modelo mental completamente diferente.

MCP No Reemplaza el Conocimiento del Modelo

MCP amplifica entendimiento. Si tu modelo está mal diseñado, es inconsistente o conceptualmente incorrecto, MCP va a dejar esos problemas en evidencia más rápido—no los va a esconder.

Esto no es un atajo para principiantes. Es una herramienta de poder para gente que ya entiende modelado semántico y quiere trabajar más rápido sin sacrificar rigor.

De Sintaxis a Semántica

Modelo Mental Viejo: Primero la Sintaxis

Cuando trabajas sin MCP, piensas en sintaxis:

  • “¿Qué función usar?”
  • “¿Cómo escribo este filtro en CALCULATE?”
  • “¿Cuál es la sintaxis correcta para time intelligence?”

Estás traduciendo lógica de negocio → sintaxis DAX en tu cabeza, después pides a la IA que valide o modifique la sintaxis.

Problema: La IA no sabe si tu sintaxis va a funcionar con tu modelo.

Modelo Mental Nuevo: Primero la Semántica

Con MCP, piensas en semántica:

  • “¿Qué contiene mi modelo?”
  • “¿Cómo están relacionadas estas tablas?”
  • “¿Cuál es la cardinalidad de esta relación?”

Describes lo que quieres lograr, y la IA inspecciona tu modelo para generar el DAX correcto.

Resultado: La IA trabaja desde la realidad de tu modelo, no desde patrones genéricos.

De Adivinar a Inspeccionar

El Juego de Adivinar (Sin MCP)

Tú: "¿Por qué mi medida de Ventas está en blanco para algunos clientes?"
IA: "Verifica si tienes una relación entre Ventas y Clientes"
Tú: "Sí tengo una"
IA: "¿Está activa?"
Tú: "Sí"
IA: "¿Cuál es la dirección del filtro?"
Tú: "Ambos"
IA: "Intenta cambiarla a dirección única"
Tú: [lo intenta] "No funcionó"
IA: "¿Tal vez tienes *row-level security* aplicada?"

Esto es adivinación iterativa. Cada respuesta de la IA crea una nueva pregunta.

El Enfoque de Inspección (Con MCP)

Tú: "¿Por qué mi medida de Ventas está en blanco para algunos clientes?"
IA: [Consulta relationships] "Tu relación Ventas-Clientes es *many-to-many* con filtrado *bidirectional*. También tienes una relación inactiva vía Territorio. Dos problemas..."
IA: [Consulta measures] "Tu medida de Ventas usa CALCULATE sin *filter context* explícito, lo cual se rompe en relaciones M:M. Aquí está la corrección..."

La IA arranca con hechos, no con hipótesis. Una consulta revela el problema real.

Tres Modelos Mentales Centrales para MCP

1. Tu Modelo es una Base de Datos que la IA Puede Consultar

Pensamiento viejo: “Necesito explicarle la estructura de mi modelo a la IA”

Pensamiento nuevo: “La IA puede ver mi modelo. Solo voy a referenciar nombres de tablas y columnas.”

En la práctica:

  • No describas relationships → Deja que la IA los consulte
  • No listes tus measures → Deja que la IA las enumere
  • No expliques tu tabla de fechas → Deja que la IA la inspeccione

2. Generación de DAX = Inspección del Modelo + Aplicación de Lógica

Pensamiento viejo: “Le daré a la IA una fórmula y le pediré que la arregle”

Pensamiento nuevo: “Describiré la lógica de negocio y dejaré que la IA construya la fórmula desde mi modelo”

En la práctica:

❌ "Aquí está mi fórmula YoY. ¿Por qué no funciona?"
✅ "Calcula crecimiento year-over-year para Revenue usando mi jerarquía de fechas"

La IA va a:

  1. Encontrar tu tabla de fechas
  2. Verificar la estructura de tu jerarquía de fechas
  3. Localizar tu medida Revenue
  4. Generar lógica YoY que encaje en tu modelo específico

3. Debugging = Comparar Estado Esperado vs Estado Real del Modelo

Pensamiento viejo: “Voy a leer este DAX línea por línea para encontrar el error”

Pensamiento nuevo: “¿Qué contiene realmente el modelo vs qué creo que contiene?”

En la práctica:

❌ Mirar fijamente el CALCULATE por 10 minutos
✅ Preguntar a IA: "Muéstrame todas las relaciones inactivas a la tabla Sales"
✅ Preguntar a IA: "¿Cuál es el *filter context* cuando esta medida se evalúa?"
✅ Preguntar a IA: "Lista todas las medidas que referencian Dim_Customer"

Estás debuggeando el semantic model, no la sintaxis.

🛠️ Guía de Instalación: Configurar Antigravity

Esta guía se enfoca en configuración mínima y correcta. Si te sientes cómodo con herramientas de desarrollo, esto debería tomar menos de 10 minutos.

Antes de empezar, verifica que tengas:

  • Una PC o Laptop 😅
  • Windows 10/11
  • Conexión a internet

Paso 1: Instalar VS Code (Obligatorio)

Sin VS Code, MCP no existe.

VS Code no es un editor opcional. Es el host del MCP Server. El servidor MCP de Power BI se instala como extensión de VS Code, no como servicio independiente.

  1. Descarga VSCode desde la Microsoft Store.
  2. Espera que la instalación concluya.

Instalando VS Code

Verificar Instalación de VS Code

  1. Abre VS Code
  2. Deberías ver la pantalla de bienvenida
  3. Presiona Ctrl+Shift+X para abrir el panel de extensiones

Resultado esperado: Panel de extensiones visible. Si funciona, continúa.

Paso 2: Instalar Antigravity

  1. Descarga el instalador .exe desde Google Antigravity
  2. Ejecuta el archivo descargado
  3. Sigue el asistente de instalación (los valores por defecto están bien)
  4. Espera unos minutos para completar

Paso 3: Configurar Identidad (Google Login)

Antigravity utiliza tu cuenta de Google para autenticarse y acceder a los modelos de lenguaje.

No necesitas API Keys. No necesitas configurar tarjetas de crédito en OpenAI o Anthropic.

  1. Al abrir Antigravity, verás la pantalla de bienvenida.
  2. Haz clic en Login with Google.
  3. Completa el flujo de autenticación en tu navegador.

CRÍTICO: Siguiente Paso Obligatorio

Aunque inicias sesión con Google, NO uses el modelo Gemini para este playbook.

Antes de empezar a chatear:

  1. Ubica el selector de modelo debajo de la barra de chat.
  2. Cambia a Claude Sonnet 4.5 (Recomendado) o GPT-OSS 120B.

MCP Server for Power BI fallará si intentas usarlo con Gemini.

Paso 4: Configura Tu Workspace y Verifica

Configura Tu Workspace (Recomendado)

Aunque el servidor MCP puede conectarse a cualquier Power BI abierto sin importar la carpeta, es una mejor práctica abrir Antigravity en la carpeta de tu proyecto.

  1. Clic en FileOpen Folder
  2. Navega a la carpeta donde vive tu archivo .pbix o tu proyecto .pbip
  3. Clic en Select Folder

Por qué hacer esto:

  • Mantiene tus logs y artefactos de Antigravity ordenados junto a tu proyecto.
  • Permite a la IA entender mejor el contexto de archivos auxiliares (Excel, CSVs, documentación) si los necesitas.

Verificar Instalación

  1. Lanza Antigravity
  2. Deberías ver la pantalla de bienvenida
  3. Antigravity verificará actualizaciones (permite si se solicita)

Resultado esperado: Antigravity abre con interfaz limpia, sin mensajes de error.

Paso 5: Probar Antigravity

Vamos a verificar que todo funcione:

  1. En Antigravity, presiona Ctrl+L para abrir el chat
  2. Escribe: What files are in my workspace?
  3. Presiona Enter

Resultado esperado: Antigravity lista tus archivos de workspace. Si ves esto, la instalación fue exitosa y ya tienes un agente de IA observamdo tu entorno de trabajo.

⚙️ Configuración de MCP Server para Power BI

Arquitectura Real

Power BI Desktop (.pbix/.pbip abierto)

VS Code (extensión MCP activa)

Antigravity (vía mcp-servers.json apuntando al ejecutable de VS Code)

IA con contexto del modelo

Crítico: VS Code no es un intermediario opcional. ES el host del MCP Server.

¿Qué es MCP Server?

MCP (Model Context Protocol) es un protocolo estándar que permite que herramientas de IA se comuniquen con fuentes de datos externas. El servidor MCP de Power BI específicamente habilita a la IA para:

  • Consultar la estructura de tu semantic model
  • Leer metadata de tablas/columnas
  • Inspeccionar measures y relationships
  • Analizar expresiones DAX

Sin MCP, la IA solo ve el código DAX que pegas en un chat. Con MCP, ve tu modelo completo.

¡ATENCION! Esta configuración funciona con modelos de Power BI Desktop únicamente.

Prerrequisitos

  • ✅ VS Code está instalado
  • ✅ Antigravity está instalado
  • ✅ Power BI Desktop está instalado

Quién NO Debería Continuar

¡PRECAUCIÓN! Si no entiendes qué significan relationships, cardinality o filter direction, pausa aquí.

MCP es una herramienta de poder para analistas que ya entienden modelado semántico basico. Va a dejar problemas del modelo en evidencia más rápido, no te va a enseñar fundamentos de modelado.

Paso 1: Instalar Extensión MCP de Power BI en VS Code

El MCP Server vive como extensión de VS Code.

  1. Abre VS Code
  2. Presiona Ctrl+Shift+X para abrir extensiones
  3. Busca: “Power BI MCP” o “powerbi-modeling-mcp”
  4. Haz clic en Install
  5. Espera ~30 segundos a que descargue e instale

Extension Power BI MCP

Resultado esperado: Extensión aparece en la lista de instaladas.

Verificar Instalación

  1. En VS Code, presiona Ctrl+Shift+P para abrir la paleta de comandos
  2. Escribe: MCP
  3. Deberías ver comandos relacionados con Power BI MCP

Comandos MCP

Si no ves comandos MCP, reinicia VS Code y verifica de nuevo. Despues de verificar la extension, ya puedes cerrar VS Code.

Paso 2: Copiar la Ruta del MCP Server

Esta es la parte más importante. Necesitas decirle a Antigravity dónde instaló VS Code el servidor.

  1. Abre el Explorador de Archivos.
  2. Copia y pega esta ruta en la barra de direcciones y presiona Enter: %USERPROFILE%\.vscode\extensions
  3. Busca una carpeta que empiece con microsoft.powerbi-modeling-mcp. (Ejemplo: microsoft.powerbi-modeling-mcp-1.0.0)
  4. Entra en esa carpeta, y luego entra a la carpeta server (o bin si no ves server).
  5. Busca el archivo powerbi-modeling-mcp.exe (o similar terminando en .exe).

Exec File

  1. H****az clic derecho sobre ese archivo y selecciona “Copiar como ruta de acceso” (Copy as path).

Copy Path

Tu portapapeles ahora debería tener algo como: "C:\Users\Manuel\.vscode\extensions\microsoft.powerbi-modeling-mcp-1.0.0\server\powerbi-modeling-mcp.exe"

Paso 3: Configurar Antigravity

  1. Abre Antigravity.
  2. En el chat, haz clic en el menú de tres puntos () en la esquina superior derecha del bloque de input.
  3. Selecciona MCP Servers.

Menu MCP

  1. Selecciona Manage MCP Servers.

Manage Servers

  1. Haz clic en View Raw Config (o Edit Configuration).

Raw Config

Esto abrirá el archivo mcp_config.json , probablemente vacío, en el editor de texto.

Construye tu Configuración JSON

Debes editar manualmente este archivo.

Primero copia y pega este fragmento de codigo, tal cual:

{
  "mcpServers": {
    "powerbi-modeling-mcp": {
      "command": "C:\\Users\\Manuel\\.vscode\\extensions\\microsoft.powerbi-modeling-mcp-1.0.0\\server\\powerbi-modeling-mcp.exe",
      "args": [
        "--start"
      ],
      "type": "stdio",
      "disabled": false
    }
  }
}

Instrucción Clave:

  • Aqui usamos la ruta que copiaste en el Paso 2:
    • Reemplaza la ruta "C: del codigo por la ruta que copiaste previamente.
  • Asegurate que al final de la ruta diga “.exe”.
  • Debes reemplazar las barras invertidas simples \ por dobles \\, o usar barras normales /.

Ejemplo Incorrecto (Fallará): "command": "C:\Users\Juan\.vscode\extensions..."

Ejemplo Correcto: "command": "C:\\Users\\Juan\\.vscode\\extensions..."

Guarda el archivo con Ctrl + S y ciérralo.

Paso 4: Verificar

  1. Reinicia Antigravity completamente.
  2. Abre el menú MCP ( -> MCP Servers).
  3. Deberías ver powerbi-modeling-mcp con el switch Enabled en On.

Enabled

Si está Enabled, ¡felicidades! Antigravity ahora puede hablar con Power BI a través del MCP.

Vamos a verificar que el servidor MCP responde correctamente:

  1. En Antigravity, abre el chat (Ctrl+L)
  2. Escribe:
List available MCP tools for powerbi-modeling-mcp

Resultado esperado: Antigravity lista herramientas MCP como: connection_operations, table_operations, measure_operations, etc.

Si ves esta lista, MCP está funcionando correctamente.

🔗 Conectando tu Modelo de Power BI a MCP

Esta guía te muestra cómo conectar un modelo de Power BI activo al servidor MCP, permitiendo que Antigravity inspeccione tu modelo semántico. Tiempo esperado: 5 minutos.

Prerrequisitos

Antes de empezar:

  • ✅ Antigravity instalado
  • ✅ MCP Server configurado
  • ✅ Power BI Desktop instalado.
  • ✅ Un modelo de Power BI (.pbix) listo para abrir

Cómo Funciona la Conexión

Cuando abres un archivo de Power BI, Power BI Desktop ejecuta una instancia local de Analysis Services. El servidor MCP se conecta a esta instancia vía puerto local, dándole a Antigravity acceso de lectura a tu semantic modelo semántico.

Importante: La conexión es de solo lectura. Antigravity puede inspeccionar tu modelo pero no puede modificarlo. Cualquier cambio debe hacerse en Power BI Desktop.

Paso 1: Abre tu Modelo de Power BI

  1. Lanza Power BI Desktop
  2. Abre tu archivo .pbix
  3. Espera a que el modelo cargue completamente
  4. Verifica que el modelo funciona (revisa una visual o ve a la vista de Modelo)

Mantén Power BI Desktop abierto durante toda esta guía.

Paso 2: Conectar MCP a Power BI

Antigravity detecta automáticamente las instancias de Power BI abiertas. No necesitas saber puertos ni direcciones IP.

En el Chat de Antigravity

  1. Abre Antigravity (y asegúrate que Power BI Desktop esté corriendo).
  2. Presiona Ctrl+L para abrir el chat.
  3. Escribe en el chat algo como:
Lista todas las instancias abiertas de Power BI

Respuesta esperada: Verás una lista de tus archivos abiertos, por ejemplo:

  • Reporte Ventas.pbix
  • Finanzas 2024.pbix
  1. Copia el nombre exacto de la lista y dile a Antigravity:
Conectate a la instancia [Nombre de Tu Modelo]

Ejemplo: “Conectate a la instancia Reporte Ventas.pbix”

Respuesta de éxito:

Conexión Establecida
Me he conectado exitosamente a la instancia de Power BI Desktop:
Nombre de conexión: PBIDesktop-Reporte Ventas-56364
...

Paso 3: Verificar Conexión

Prueba que Antigravity realmente “ve” tu modelo:

Prueba 1: Listar Tablas

Lista todas las tablas del modelo

Resultado: Lista de tus tablas (ej., Ventas, Clientes, Productos, etc.)

Prueba 2: Ver Esquema de una Tabla

Lista las columnas de la tabla Ventas

Resultado: Lista de columnas con sus tipos de datos.

Prueba 3: Listar Medidas

Lista todas las medidas del modelo

Resultado: Tus medidas DAX con sus expresiones.

Si las tres pruebas funcionan, tu modelo está conectado exitosamente. 🎉

Trabajando con Múltiples Modelos

Cambiar entre Modelos

Cuando tienes múltiples archivos .pbix abiertos:

  1. Cada modelo corre en un puerto diferente
  2. Debes conectarte explícitamente al que quieres trabajar
  3. Para cambiar, desconéctate y reconecta

Desconectar:

Desconéctame del modelo actual

Reconectar a otro:

Conéctate al modelo [Nombre del Otro Archivo]

🔄 Flujo de Trabajo Diario

El Ciclo Core

1. Abre Power BI Desktop con tu modelo
2. Conecta Antigravity al modelo
3. Trabaja con IA teniendo contexto completo
4. Implementa cambios en Power BI Desktop
5. Verifica e itera

Tareas Diarias Comunes

Tarea 1: Debuggear una Medida que Devuelve Valores Incorrectos

Nuevo flujo (con MCP):

Tú: "Mi medida [Total Ventas] muestra blanks para algunos productos. ¿Por qué?"

IA: [Consulta tu modelo]
    - Revisa relación Ventas-Productos → encuentra *many-to-many*
    - Analiza medida [Total Ventas] → ve un SUM() simple
    - Identifica problema: M:M rompe agregaciones simples
    
IA: "Tu relación Ventas-Productos es *many-to-many*. Tu medida:
    Total Ventas = SUM(Ventas[Monto])
    Esto falla en contextos M:M. Usa esto:
    ...
    Esto define explícitamente el camino de la relación."

Tú: [Copias medida corregida a Power BI] → Funciona inmediatamente

Tarea 2: Crear Nueva Medida desde Lógica de Negocio

Nuevo flujo (con MCP):

Tú: "Necesito crecimiento de ingresos año contra año (YoY). 
      Debe filtrar por categoría de producto."

IA: [Consulta tu modelo]
    - Encuentra tabla fecha: Dim_Calendario
    - Encuentra jerarquía: Año-Mes-Día
    - Encuentra medida base: [Ingresos Totales]
    
IA: "Basado en tu estructura:
    YoY Revenue Growth % = 
    VAR RevenueCurrent = [Ingresos Totales]
    VAR RevenuePrevYear = ...
    RETURN ...
    Esto usa tu columna Dim_Calendario[Fecha] y respeta 
    los filtros de Productos automáticamente."

Tú: [Copias a Power BI] → Test → Funciona

Tips para el Flujo Diario

  1. Refresca el Contexto: Si agregas columnas/tablas, pide “Refresca el esquema de mi modelo”.
  2. Usa Nombres Descriptivos: En lugar de “Arregla esto”, di “La medida [CLV] da error para clientes B2B”.
  3. Pide Explicaciones: “¿Por qué CALCULATE aquí y no FILTER?”. Aprende patrones.

✅ Mejores Prácticas y Limitaciones

Mejores Prácticas

1. Empieza Inspeccionando, No Generando

No: “Genera una medida para ventas totales” ✅ : “Muéstrame las tablas relacionadas a ventas… Ahora crea una medida…“

2. Conversación Descriptiva

No: “Arregla esto: [código opaco]” ✅ : “Mi medida [Ventas] debería filtrar por Categoría A pero no lo hace…“

3. Verifica el Entendimiento

Antes de implementar, pide a la IA que confirme qué relaciones usará.

Limitaciones: Lo Que MCP NO Puede Hacer

  1. No puede modificar tu modelo: Solo lectura. Tú debes copiar el código.
  2. No ve valores reales (filas): Solo metadata. Para valores, usa Power BI.
  3. Power BI Service: Solo funciona con Desktop (local).

Cuándo NO Usar MCP

  • Aprendiendo DAX Básico: Hazlo a la antigua para aprender conceptos.
  • Cálculos Simples: SUM(Ventas) es más rápido escribirlo tú.
  • Problemas Visuales: MCP no ve gráficos, solo datos.

La Regla de Oro

Usa MCP cuando la IA necesite conocer la estructura de tu modelo para ayudarte. MCP es una motosierra. Usarla para untar mantequilla es ineficiente y peligroso. Usarla para cortar árboles es perfecto.

Ejemplo 1: Debugging de una Medida DAX

Escenario

Estás trabajando en un modelo de retail. Creaste una medida para calcular ingresos totales, pero muestra valores en blanco (blank) para ciertas categorías de productos. Funciona bien para “Electronics” y “Clothing”, pero devuelve blank para “Home & Garden”.

Estructura de Tu Modelo

Fact Table: Sales

  • SalesID
  • ProductKey (FK)
  • CustomerKey (FK)
  • DateKey (FK)
  • Quantity
  • UnitPrice
  • Amount

Dimension Table: Products

  • ProductKey (PK)
  • ProductName
  • Category
  • Subcategory
  • Brand

Relación: Sales[ProductKey]Products[ProductKey] (Many-to-One, Both directions)

La Medida Problemática

Total Revenue = 
SUM(Sales[Amount])

Comportamiento esperado: Debería mostrar ingresos para TODAS las categorías.

Comportamiento real: Devuelve blank para productos “Home & Garden”.

Sin MCP: Debugging Tradicional

Tu proceso sería:

  1. Verificar si existen datos para Home & Garden (Vista de Tabla → filtrar)
  2. Verificar relación (Vista de Modelo → ver línea)
  3. Googlear “DAX sum returns blank”
  4. Copiar medida a ChatGPT: “¿Por qué está en blanco?”
  5. ChatGPT: “Revisa relaciones, asegura que las columnas existan…” (consejos genéricos)
  6. Pruebas aleatorias
  7. Sigue roto

Tiempo gastado: 20-30 minutos adivinando.


Con MCP: Debugging Estructurado

Paso 1: Conectar e Inspeccionar

Abre Antigravity, conecta a tu modelo:

Connect to Power BI

Paso 2: Describir el Problema

Tú: "Mi medida [Total Revenue] funciona para Electronics y Clothing 
     pero muestra blank para la categoría Home & Garden. ¿Por qué?"

Paso 3: La IA Investiga (Detrás de Escena)

La IA consulta tu modelo:

  1. Revisa la medida: SUM(Sales[Amount])
  2. Revisa relaciones:
    • Ve que Sales a Products tiene filtro cruzado Ambas direcciones (Both).
  3. Identifica el problema:
    • Filtro bidireccional + agregación simple puede causar blanks.

Paso 4: La IA Explica la Causa Raíz

Respuesta de IA:

Encontré el problema. Tu relación Sales-Products usa filtro cruzado
bidireccional, lo cual causa blanks inesperados.

Lo que sucede:
1. Tu medida es un SUM simple.
2. Al filtrar "Home & Garden":
   - Filtro viaja: Products → Sales (ok)
   - Filtro rebota: Sales → Products (causa problema)
   - El contexto de filtro circular crea ambigüedad.
   - DAX engine devuelve BLANK() por seguridad.

Esto pasa en Home & Garden específicamente porque (verificando datos)
probablemente tienes una orfandad o inconsistencia que rompe la
propagación bidireccional solo ahí.

Solución: Haz el contexto de filtro explícito.

Paso 5: La IA Provee la Medida Corregida

Total Revenue = 
CALCULATE(
    SUM(Sales[Amount]),
    USERELATIONSHIP(Sales[ProductKey], Products[ProductKey])
)

Explicación: Esto fuerza explícitamente el camino de la relación, previniendo la ambigüedad bidireccional. USERELATIONSHIP activa el camino correcto sin importar la dirección predeterminada.

Alternativa (Mejor a largo plazo): Cambia tu relación a Single direction. Bidireccional raramente es necesaria y daña el performance.

Paso 6: Verificar en Power BI

  1. Copia la medida a Power BI Desktop
  2. Prueba:
    • Electronics: ✅ Valor correcto
    • Clothing: ✅ Valor correcto
    • Home & Garden: ✅ Ahora muestra valor!

Arreglado en 3 minutos.


Lo Que Aprendiste

Causa Raíz

Las relaciones bidireccionales causan ambigüedad de filtros en agregaciones simples. El motor DAX devuelve BLANK() cuando no puede resolver el camino.

Por Qué MCP Fue Rápido

  1. IA vio el tipo de relación → Identificó problema bidireccional al instante.
  2. IA consultó tus tablas reales → No adivinó nombres.
  3. IA entendió el grafo del modelo → Rastreó la propagación del filtro.

Debugging Tradicional: Por Qué Fue Lento

Sin MCP, ChatGPT no sabe que tu relación es bidireccional. Te daría consejos genéricos que no aplican a tu esquema específico.


Bonus: Optimización Adicional

Después de arreglarlo, preguntas:

Tú: "¿Está optimizada esta medida? Mi tabla Sales tiene 5 millones de filas."

Respuesta IA:

Tu medida actual funciona, pero con 5M filas:
*Performance* actual: ~200ms (*overhead* de CALCULATE + USERELATIONSHIP)

Si cambias la relación Sales-Products a dirección Única (*Single*):
Nueva medida: Total Revenue = SUM(Sales[Amount])
Performance: ~50ms (4x más rápido)

Recomendación: Cambia la relación a Single en la vista de modelo.

Implementas el cambio de relación → la medida funciona Y es más rápida.


Archivos en Este Ejemplo

  • README.md (este archivo) - Descripción del problema
  • medida-original.dax - Medida rota original
  • proceso-debug.md - Conversación de debugging detallada
  • medida-corregida.dax - Medida arreglada

Siguiente Ejemplo

Ejemplo 2: Optimizando una Medida Lenta →

Ejemplo 2: Optimizando una Medida Lenta

Escenario

Estás construyendo un dashboard de Recursos Humanos. Tienes una medida que calcula el Salario Promedio por Departamento, pero tarda 8-12 segundos en refrescar cuando los usuarios filtran. Los stakeholders se quejan.

El dashboard lo usan 50+ gerentes diario, la lentitud es un problema real.

Estructura de Tu Modelo

Fact Table: Salaries

  • EmployeeID (FK)
  • DateKey (FK)
  • BaseSalary
  • TotalCompensation
  • Filas: 2.5 millones (histórico mensual)

Dimension Table: Employees

  • EmployeeID (PK)
  • DepartmentID (FK)
  • Filas: 15,000 empleados

Dimension Table: Departments

  • DepartmentID (PK)
  • DepartmentName
  • Filas: 120 departamentos

Relaciones: SalariesEmployeesDepartments

La Medida Lenta

Avg Salary by Department = 
AVERAGEX(
    VALUES(Employees[EmployeeID]),
    CALCULATE(
        AVERAGE(Salaries[TotalCompensation])
    )
)

Performance: 8-12 segundos.

Por qué es lenta (aún no lo sabes):

  • Itera sobre 15,000 empleados
  • Cada iteración corre un CALCULATE (transición de contexto)
  • 15,000 transiciones de contexto × scan de tabla grande = Desastre.

Sin MCP: Adivinando Optimizaciones

Proceso tradicional:

  1. Google “DAX AVERAGEX slow”
  2. ChatGPT: “Usa variables”, “Usa SUMMARIZE” (consejos genéricos)
  3. Pruebas sin entender la causa
  4. Sigue lento
  5. Frustración.

Con MCP: Optimización Basada en Datos

Paso 1: Conectar y Describir

Connect to Power BI...
Tú: "Mi medida [Avg Salary by Department] toma 12 segundos. ¿Cómo la optimizo?"

Paso 2: IA Analiza Medida y Modelo

IA consulta tu modelo:

  1. Medida: Ve el AVERAGEX(VALUES(...), CALCULATE(...))
  2. Cardinalidad: Ve que Employees tiene 15K filas y Salaries 2.5M.
  3. Cuello de botella: Identifica iteración masiva innecesaria.

Paso 3: IA Explica el Problema

Respuesta IA:

Encontré el problema de performance.

Tu medida itera 15,000 veces (VALUES(Employees)).
En cada iteración, hace un CALCULATE que escanea la tabla Salaries (2.5M filas).

Estás forzando 15,000 transiciones de contexto innecesarias.
Estás trabajando a granularidad de empleado cuando solo necesitas 
agregación por departamento.

Paso 4: IA Provee Solución Optimizada

Solución 1: Agregación Directa (Best)

Avg Salary by Department = 
VAR EmployeesInContext = 
    DISTINCTCOUNT(Salaries[EmployeeID])
VAR TotalComp = 
    SUM(Salaries[TotalCompensation])
RETURN
    DIVIDE(TotalComp, EmployeesInContext, BLANK())

Explicación IA:

Esto elimina la iteración completamente:
- Trabaja directo sobre la fact table Salaries
- Usa agregaciones simples (SUM, DISTINCTCOUNT) optimizadas en VertiPaq
- Cero transiciones de contexto

Performance esperada: ~200-300ms (40x más rápido)

Paso 5: Pruebas

Copias la medida a Power BI:

Antes: 12 segundos Después: 0.25 segundos

Mejora de 50x.


Preguntas de Seguimiento

: “¿La optimización funciona si filtro por fecha?”

IA:

Sí, escala mejor.
Si filtras un mes, SUM y DISTINCTCOUNT solo escanean las filas de ese mes
(~100K filas). Es aún más rápido.

La medida original seguiría iterando 15K empleados aunque filtres un solo mes.

Resumen: Antes y Después

MétricaAntesDespués
LógicaIterador (AVERAGEX)Agregación (SUM/DIVIDE)
Operaciones~37 mil millones~5 millones
Tiempo12 seg0.25 seg
UXLento y frustranteInstantáneo

Tiempo de optimización: 5 minutos con MCP vs Horas de prueba y error.

Archivos en Este Ejemplo

  • README.md (este archivo)
  • medida-lenta.dax
  • proceso-optimizacion.md - Chat completo
  • medida-optimizada.dax

Siguiente Ejemplo

Ejemplo 3: Creando Métricas de Negocio →

Ejemplo 3: Creando Métricas desde Lógica de Negocio

Escenario

Tu CFO te envía un correo con requerimientos para la junta directiva:

“Necesitamos tracking de retención de clientes. Específicamente:

  1. Tasa de Clientes Activos: % de clientes con al menos una compra en los últimos 90 días.
  2. Tasa de Recompra: % de clientes con 2+ compras en el trimestre actual.
  3. Churn de Clientes: Clientes que compraron el trimestre pasado pero NO este.

Deben funcionar filtrados por Categoría y Región. Para mañana.”

Tienes el modelo. Sabes DAX básico. Pero traducir lógica de negocio a DAX con contextos de filtro complejos toma horas.

Estructura de Tu Modelo

Fact: Transactions (8M filas) Dims: Customers, Products, Date

Sin MCP: Traducción Manual

  1. Leer requerimientos.
  2. Dibujar lógica en papel.
  3. Buscar funciones de tiempo (DATESINPERIOD? PARALLELPERIOD?).
  4. Escribir medida 1 → Falla con filtro de región.
  5. Arreglar → Rompe filtro de categoría.
  6. Escribir medida 2 → Conflicto.
  7. Frustración y horas perdidas.

Con MCP: Lógica de Negocio a DAX

Paso 1: Conectar y Dar Contexto

Connect to Power BI...
Tú: "Necesito crear 3 métricas de retención. Aquí los requerimientos del CFO..."
[Pegas el correo]

Paso 2: IA Inspecciona Modelo

IA:

Revisando modelo...
Encontré tabla Transactions, Customers y Date.
Relaciones correctas detectadas.
Puedo construir las medidas usando tu estructura actual.

Paso 3: IA Genera las 3 Medidas

Medida 1: Tasa Clientes Activos (Last 90 Days)

IA:

Active Customer Rate = 
VAR Hoy = MAX(Date[Date])
VAR Hace90Dias = Hoy - 90
VAR ClientesActivos = 
    CALCULATE(
        DISTINCTCOUNT(Transactions[CustomerID]),
        Transactions[TransactionDate] >= Hace90Dias,
        Transactions[TransactionDate] <= Hoy
    )
VAR TotalClientes = COUNTROWS(Customers)
RETURN DIVIDE(ClientesActivos, TotalClientes, 0)

IA explica: Usa tu columna TransactionDate. Respeta filtros de Región (afecta TotalClientes) y Categoría (afecta ClientesActivos).

Medida 2: Tasa de Recompra (2+ compras en Q)

IA:

Repeat Purchase Rate = 
VAR ClientesConCompras = 
    SUMMARIZE(
        Transactions,
        Transactions[CustomerID],
        "ConteoCompras", COUNTROWS(Transactions)
    )
VAR ClientesRecurrentes = 
    COUNTROWS(FILTER(ClientesConCompras, [ConteoCompras] >= 2))
VAR TotalClientesConVenta = DISTINCTCOUNT(Transactions[CustomerID])
RETURN DIVIDE(ClientesRecurrentes, TotalClientesConVenta, 0)

Medida 3: Churn (Compró Q pasado, no este)

IA:

Customer Churn = 
VAR ClientesQActual = VALUES(Transactions[CustomerID])
VAR ClientesQPasado = 
    CALCULATETABLE(
        VALUES(Transactions[CustomerID]),
        DATEADD(Date[Date], -1, QUARTER)
    )
VAR ClientesPerdidos = 
    EXCEPT(ClientesQPasado, ClientesQActual)
RETURN COUNTROWS(ClientesPerdidos)

Paso 4: Pruebas y Clarificación

: “¿Qué pasa con el Churn si filtro por Categoría ‘Electrónica’?”

IA:

El *Churn* será específico de categoría.
Contará clientes que compraron Electrónica el Q pasado y NO compraron 
Electrónica este Q (aunque hayan comprado otra cosa).

Si quieres *Churn* Global (que ignore filtro de producto), avísame
y modifico la medida con ALL(Products).

: “Dame ambas versiones.”

IA: Genera la segunda versión inmediatamente.


Resultado Final

Tiempo total: 15 minutos. Entregable: 4 medidas complejas, probadas, con lógica de negocio exacta. CFO: Feliz.

Lo Que Aprendiste

  1. MCP traduce Negocio → DAX: Tú dices QUÉ, IA resuelve CÓMO.
  2. Contexto de Filtro: IA maneja las interacciones complejas (Date, Product, Region) automáticamente.
  3. Velocidad: De horas a minutos.

Archivos

  • README.md (este archivo)
  • logica-negocio.md - Requerimientos originales
  • metricas-generadas.dax - Código final

¿Qué sigue?

Has visto los 3 ejemplos.

¿Listo para empezar? → Ve a la Guía de Instalación

¿Dudas? → Revisa Mejores Prácticas y Modelos Mentales

BACK TO INDEX
CONTENIDO