Módulo 7 · 03 | Modelado: calendario y medidas DAX

PROYECTO 1 · SESIÓN 3 DE 4
1 · Conexión2 · Power Query3 · Modelado4 · Publicación

Modelado y DAX: modelo estrella y medidas que cuadran. En la sesión 2 dejamos fCartera limpia. Hoy la convertimos en un modelo estrella: tres dimensiones, una tabla calendario y las medidas clave de cartera, mora y PAR30, cada una validada contra un número de control.

📁 Materiales del proyecto

La base, el PDF de esta sesión (Clase 3 · Modelado y DAX), Controles_Sucursal.csv y los archivos de trabajo están en la carpeta del proyecto (es la misma para las 4 sesiones):

📁 Abrir materiales en Drive

1. El punto de partida

Una fila de fCartera describe una operación presente al corte del 30/04/2018. La clave de cada operación es cod_su + nro_operacion. Antes de modelar, confirmá que tu tabla limpia de la sesión 2 da estos números:

124.400operaciones
120.955clientes
550.762.578.112 Gssaldo de capital

2. Hechos, dimensiones y modelo estrella

Las dimensiones filtran y agrupan (quién, qué, dónde, cuándo); la tabla de hechos aporta los números que suma DAX. En el centro queda fCartera y alrededor, cuatro dimensiones:

DimensiónColumnasFilasPara qué sirve
dSucursalcod_su63Comparar sucursales
dProductocod_producto, producto17Comparar productos (una descripción por código)
dOficialid_oficial802Comparar oficiales (solo IDs, sin nombres inventados)
dCalendarioDate, Anio, NroMes, Mes, AnioMes, AnioMesOrden3.652Organizar las fechas de origen (2009–2018)

¿Por qué area queda en fCartera?

45 de las 63 sucursales tienen varias áreas. Si pusiéramos area en dSucursal, la clave dejaría de ser única. Por eso dSucursal contiene solo cod_su.

Reglas de las relaciones

  1. Cada dimensión se relaciona 1 a muchos con fCartera.
  2. Relaciones activas y con filtro simple (de la dimensión hacia los hechos).
  3. Las claves de ambos lados deben tener el mismo tipo de dato.
  4. No hacen falta relaciones entre dimensiones.

3. La tabla calendario y el orden

  • Columna de fecha: dCalendario[Date], del 01/01/2009 al 31/12/2018.
  • Marcar como tabla de fechas.
  • Relación activa dCalendario[Date] → fCartera[fec_operacion].
Buena prácticaCómo
MesOrdenar por NroMes
AnioMesOrdenar por AnioMesOrden
MedidasGuardarlas en la tabla _Medidas
Códigos visiblesResumen: No resumir

4. Medidas base

Una columna calcula un valor por fila; una medida calcula bajo los filtros de cada visual: una tarjeta evalúa el contexto completo y una matriz evalúa cada segmento.

Cartera Total = SUM ( fCartera[saldo_capital_cuota] )
Operaciones   = COUNTROWS ( fCartera )
Clientes      = DISTINCTCOUNT ( fCartera[cod_cliente] )
Ticket Promedio = DIVIDE ( [Cartera Total], [Operaciones] )

Control del contexto de filtro

Filtrá una sucursal: cambian saldo y operaciones, y los porcentajes usan el saldo de esa selección. Compará contra Controles_Sucursal.csv. Al quitar los filtros tenés que volver al control general.

5. Mora y PAR30

Una operación está en mora cuando ddm > 0 (con ddm <= 0 está al día). La Cartera PAR30 usa ddm > 30: con 30 días queda fuera, con 31 entra.

Cartera en Mora =
CALCULATE ( [Cartera Total], KEEPFILTERS ( fCartera[ddm] > 0 ) )

% Mora = DIVIDE ( [Cartera en Mora], [Cartera Total] )

Cartera PAR30 =
CALCULATE ( [Cartera Total], KEEPFILTERS ( fCartera[ddm] > 30 ) )

PAR30 % = DIVIDE ( [Cartera PAR30], [Cartera Total] )

Por qué KEEPFILTERS

Conserva la intersección con el filtro que ya tenga el visual sobre ddm (por ejemplo, un tramo). Y el total del % se calcula con saldos totales, no como promedio de porcentajes. Formato: Gs sin decimales, % con dos decimales.

6. Meses de origen y mes anterior

Hay operaciones originadas en 96 meses, de 2009-05 a 2018-04. Como el calendario se relaciona con fec_operacion, el saldo por mes es el saldo actual de cada cohorte de origen.

Monto Original Registrado = SUM ( fCartera[monto_original] )

Cartera Mes Anterior =
CALCULATE ( [Cartera Total], DATEADD ( dCalendario[Date], -1, MONTH ) )
  • Usá meses completos y consecutivos.
  • DIVIDE controla el denominador cero; si falta el mes actual o el anterior, la variación queda en blanco.

⚠ Alcance del análisis temporal

Con un solo corte podés comparar cohortes de origen, pero no la evolución de la mora: para eso hacen falta varios cortes (clave futura: operación + fecha_proceso). El monto histórico completo requiere otra fuente.

7. Controles finales

MedidaControl sin filtros
Operaciones124.400
Clientes120.955
Cartera Total550.762.578.112 Gs
Cartera en Mora135.863.525.266 Gs (24,67 %) · 35.336 operaciones
Cartera PAR3076.710.385.814 Gs (13,93 %)
Clientes en Mora34.837
Dimensiones63 sucursales · 17 productos · 802 oficiales

8. Con IA: tu copiloto

Compartí los nombres de tablas y columnas, definí ddm > 0 y ddm > 30, pedí que te explique filtros y formato y, sobre todo, validá cada medida contra los controles. Si usás Claude Desktop con el MCP de Power BI conectado y el .pbix abierto con fCartera cargada, este prompt arma el modelo completo:

Usa el MCP de Power BI sobre mi modelo abierto. fCartera ya está cargada. No inventes datos.
1. Crea dSucursal (cod_su), dProducto (cod_producto, producto) y dOficial (id_oficial) desde fCartera.
2. Crea dCalendario del 01/01/2009 al 31/12/2018 con Anio, NroMes, Mes, AnioMes y AnioMesOrden; márcala como tabla de fechas. Ordena Mes por NroMes y AnioMes por AnioMesOrden.
3. Relaciones 1:*, activas y de filtro simple hacia fCartera por cod_su, cod_producto, id_oficial y dCalendario[Date] → fec_operacion. Claves con el mismo tipo de dato; códigos en No resumir.
4. En la tabla _Medidas crea: Cartera Total, Operaciones, Clientes, Ticket Promedio, Cartera en Mora (ddm > 0 con KEEPFILTERS), % Mora, Cartera PAR30 (ddm > 30), PAR30 %, Clientes en Mora y Cartera Mes Anterior (DATEADD -1 MONTH). Formato: Gs sin decimales, % con dos decimales.
5. Valida con consultas DAX y muéstrame una tabla de controles: 124.400 operaciones · 120.955 clientes · 550.762.578.112 Gs cartera · 135.863.525.266 Gs en mora (24,67 %) · 76.710.385.814 Gs PAR30 (13,93 %) · 34.837 clientes en mora.
Si un control no cuadra, detente y explica la causa antes de seguir.

Practicá · Tu turno

  1. Creá la medida Clientes en Mora. Control: 34.837 clientes.
  2. Armá una matriz por TramoMora con operaciones y saldo.
  3. Probá el filtro con la sucursal 53 y un producto.

⚠ Clientes por tramo

DISTINCTCOUNT no es aditivo: un cliente puede aparecer en varios tramos, así que la suma de las filas no coincide con el total, que recalcula clientes únicos. Reto opcional: asignar a cada cliente su peor tramo global.

Tarea para la sesión 4

  1. Guardá Cartera_Taller_Sesion03.pbix.
  2. Captura del modelo y registro de validaciones.
  3. Una página de control con cinco KPI.
  4. Matrices por sucursal y por producto.

En la sesión 4: tablero, concentración y publicación.

Curso Power BI + DAX + IA · Proyecto 1: Cartera de Créditos · Quantux AI · MSc. Oscar González Frutos.

Scroll al inicio
¿Consultas? Escribinos