Power BI · Dashboards Ejecutivos

Análisis de datos de multitienda de curaduría

Cinco paneles interactivos que transforman los datos operacionales en inteligencia accionable para la toma de decisiones.

Evaluación 3 — Descargar base de datos (.7z)

Parte 1 Parte 2 Parte 3

Evaluación 4 — Descargar base de datos (.7z)

Parte 1 Parte 2 Parte 3 Parte 4
01

Ventas y Comportamiento de Compra

Evolución de ingresos, volumen de pedidos, ticket promedio y patrones de compra en el tiempo. Permite detectar tendencias de crecimiento, estacionalidad y cambios en la demanda para anticipar decisiones comerciales con datos concretos.

Medidas DAX 8
Ingreso Total

Suma del subtotal de todos los detalles de pedidos. Se usa detalle_pedidos en lugar de pedidos[total] para que los filtros por categoría y producto funcionen correctamente.

Ingreso Total = SUM(detalle_pedidos[subtotal])
Cantidad de Pedidos

Cuenta el total de filas en la tabla pedidos, es decir, el número absoluto de pedidos realizados.

Cantidad de Pedidos = COUNTROWS(pedidos)
Ticket Promedio

Ingreso total dividido por la cantidad de pedidos. Indica cuánto gasta en promedio cada cliente por compra.

Ticket Promedio =
DIVIDE(
    SUM(detalle_pedidos[subtotal]),
    COUNTROWS(pedidos),
    BLANK()
)
Ingreso del Mes Anterior

Calcula el ingreso total retrocediendo un mes en DimFecha. Sirve de base para comparar meses consecutivos.

Ingreso del Mes Anterior =
CALCULATE(
    SUM(detalle_pedidos[subtotal]),
    PREVIOUSMONTH(DimFecha[Date])
)
% Crecimiento MoM

Porcentaje de crecimiento del ingreso entre el mes actual y el mes anterior (Month-over-Month). Variables DAX para aislar los rangos de fecha.

% Crecimiento MoM =
VAR UltimoConDatos =
    CALCULATE(
        MAX(pedidos[fecha_pedido]),
        REMOVEFILTERS(DimFecha)
    )
VAR InicioMesActual =
    DATE(YEAR(UltimoConDatos), MONTH(UltimoConDatos), 1)
VAR InicioMesAnterior =
    EOMONTH(InicioMesActual, -2) + 1
VAR FinMesAnterior =
    EOMONTH(InicioMesActual, -1)
VAR IngresoActual =
    CALCULATE(
        [Ingreso Total],
        DimFecha[Date] >= InicioMesActual
    )
VAR IngresoAnterior =
    CALCULATE(
        [Ingreso Total],
        DimFecha[Date] >= InicioMesAnterior,
        DimFecha[Date] <= FinMesAnterior
    )
RETURN
    DIVIDE(IngresoActual - IngresoAnterior, IngresoAnterior)
Unidades Vendidas

Suma de la cantidad de productos vendidos según el detalle de pedidos.

Unidades Vendidas = SUM(detalle_pedidos[cantidad])
Precio Promedio por Producto

Promedio del precio unitario de los productos vendidos.

Precio Promedio por Producto = AVERAGE(detalle_pedidos[precio_unitario])
Desviación vs Promedio

Diferencia entre las unidades vendidas de un producto y el promedio de unidades del catálogo seleccionado. Útil para Top 10 productos.

Desviacion vs Promedio =
VAR PromedioTotal =
    CALCULATE(
        AVERAGEX(VALUES(productos[id_producto]), [Unidades Vendidas]),
        ALLSELECTED(productos)
    )
RETURN [Unidades Vendidas] - PromedioTotal
02

Emprendedores y Proceso de Curaduría

Rendimiento del ecosistema emprendedor: mide la tasa de aprobación de perfiles, el tiempo promedio de evaluación, la distribución por estado y el desempeño de cada curador. Una radiografía operativa del proceso de selección.

Medidas DAX 11
Total Emprendedores

Cuenta el total de emprendedores registrados en la plataforma.

Total Emprendedores = COUNTROWS(perfiles_emprendedor)
Emprendedores Aprobados

Filtra y cuenta los emprendedores cuyo estado es 'aprobado'.

Emprendedores Aprobados =
CALCULATE(
    COUNTROWS(perfiles_emprendedor),
    perfiles_emprendedor[estado] = "aprobado"
)
Tasa de Aprobación

Porcentaje de emprendedores aprobados sobre el total. Indica la selectividad del proceso de curaduría.

Tasa de Aprobación =
DIVIDE(
    [Emprendedores Aprobados],
    [Total Emprendedores],
    BLANK()
)
Emprendedores Rechazados

Filtra y cuenta los emprendedores cuyo estado es 'rechazado'.

Emprendedores Rechazados =
CALCULATE(
    COUNTROWS(perfiles_emprendedor),
    perfiles_emprendedor[estado] = "rechazado"
)
Emprendedores Pendientes

Filtra y cuenta los emprendedores que aún están en estado 'pendiente' de evaluación.

Emprendedores Pendientes =
CALCULATE(
    COUNTROWS(perfiles_emprendedor),
    perfiles_emprendedor[estado] = "pendiente"
)
Total Evaluaciones

Cuenta el total de evaluaciones de curaduría registradas.

Total Evaluaciones = COUNTROWS(evaluaciones_curaduria)
Evaluaciones por Curador

Cuenta evaluaciones desglosadas por curador. Se usa con la dimensión usuarios[nombre] en el visual.

Evaluaciones por Curador = COUNTROWS(evaluaciones_curaduria)
Productos por Emprendedor

Promedio de productos publicados por cada emprendedor activo.

Productos por Emprendedor =
DIVIDE(
    COUNTROWS(productos),
    DISTINCTCOUNT(perfiles_emprendedor[id_emprendedor]),
    BLANK()
)
Ingreso por Emprendedor

Promedio de ingresos generados por cada emprendedor. Usa detalle_pedidos[subtotal] para que el filtro por emprendedor funcione.

Ingreso por Emprendedor =
DIVIDE(
    SUM(detalle_pedidos[subtotal]),
    DISTINCTCOUNT(perfiles_emprendedor[id_emprendedor]),
    BLANK()
)
Aprobaciones por Mes

Cuenta aprobaciones activando la relación inactiva entre DimFecha y fecha_aprobacion con USERELATIONSHIP.

Aprobaciones por Mes =
CALCULATE(
    COUNTROWS(perfiles_emprendedor),
    perfiles_emprendedor[estado] = "aprobado",
    USERELATIONSHIP(DimFecha[Date], perfiles_emprendedor[fecha_aprobacion])
)
FlujoCuraduria (tabla calculada)

Tabla calculada que construye un embudo de 3 etapas: Registrados → Evaluados → Aprobados. Se usa en un visual de embudo.

FlujoCuraduria =
VAR Total = COUNTROWS(perfiles_emprendedor)
VAR Evaluados =
    CALCULATE(
        COUNTROWS(perfiles_emprendedor),
        perfiles_emprendedor[estado] IN {"aprobado", "rechazado"}
    )
VAR Aprobados =
    CALCULATE(
        COUNTROWS(perfiles_emprendedor),
        perfiles_emprendedor[estado] = "aprobado"
    )
RETURN
UNION(
    ROW("Etapa", "① Registrados",  "Cantidad", Total,     "Orden", 1),
    ROW("Etapa", "② Evaluados",    "Cantidad", Evaluados, "Orden", 2),
    ROW("Etapa", "③ Aprobados",    "Cantidad", Aprobados, "Orden", 3)
)
03

Productos e Inventario

Radiografía completa del catálogo: distribución por categoría y subcategoría, productos en riesgo de quiebre de stock, estados de aprobación y rotación de inventario. Apoya las decisiones de abastecimiento y curaduría de portafolio.

Medidas DAX 12
Total Productos

Cuenta el total de productos en el catálogo.

Total Productos = COUNTROWS(productos)
Productos Aprobados

Filtra y cuenta los productos con estado 'aprobado'.

Productos Aprobados =
CALCULATE(
    COUNTROWS(productos),
    productos[estado] = "aprobado"
)
Tasa de Aprobación de Productos

Porcentaje de productos aprobados sobre el total del catálogo.

Tasa de Aprobación de Productos =
DIVIDE(
    [Productos Aprobados],
    [Total Productos],
    BLANK()
)
Stock Total

Suma de la cantidad de unidades disponibles en inventario.

Stock Total = SUM(inventario[cantidad])
Productos bajo Stock Mínimo

Cuenta los productos cuyo stock actual es menor o igual al stock mínimo definido.

Productos bajo Stock Mínimo =
CALCULATE(
    COUNTROWS(inventario),
    inventario[cantidad] <= inventario[stock_minimo]
)
% Productos en Riesgo de Quiebre

Porcentaje del catálogo que está en riesgo de quiebre de stock.

% Productos en Riesgo de Quiebre =
DIVIDE(
    [Productos bajo Stock Mínimo],
    COUNTROWS(inventario),
    BLANK()
)
Precio Promedio del Catálogo

Promedio del precio de todos los productos del catálogo.

Precio Promedio del Catálogo = AVERAGE(productos[precio])
Unidades Vendidas

Suma de cantidades vendidas desde el detalle de pedidos.

Unidades Vendidas = SUM(detalle_pedidos[cantidad])
Rotación de Inventario

Unidades vendidas divididas por stock disponible. Valores mayores a 1 indican alta rotación.

Rotación de Inventario =
DIVIDE(
    SUM(detalle_pedidos[cantidad]),
    SUM(inventario[cantidad]),
    BLANK()
)
Stock Actual (columna calculada)

Trae el stock actual desde la tabla inventario usando RELATED. Alternativa con LOOKUPVALUE si RELATED no funciona.

Stock Actual = RELATED(inventario[cantidad])

-- Alternativa:
Stock Actual =
LOOKUPVALUE(
    inventario[cantidad],
    inventario[id_producto],
    productos[id_producto]
)
Stock Mínimo (columna calculada)

Trae el stock mínimo desde inventario. Misma lógica que Stock Actual.

Stock Minimo = RELATED(inventario[stock_minimo])

-- Alternativa:
Stock Minimo =
LOOKUPVALUE(
    inventario[stock_minimo],
    inventario[id_producto],
    productos[id_producto]
)
Alerta Stock

Medida de formato condicional: devuelve 1 si el stock actual es menor o igual al mínimo, 0 en caso contrario.

Alerta Stock =
IF(
    [Stock Actual] <= [Stock Minimo],
    1,
    0
)
04

Pagos y Métodos de Pago

Análisis financiero de transacciones: distribución por método de pago, tasa de aprobación y rechazo, ingresos por canal, y comportamiento de reembolsos. Revela de inmediato qué métodos funcionan mejor y dónde hay fricción.

Medidas DAX 10
Monto Total Pagado

Suma del monto de todas las transacciones de pago.

Monto Total Pagado = SUM(pagos[monto])
Cantidad de Transacciones

Cuenta el total de transacciones registradas en la tabla pagos.

Cantidad de Transacciones = COUNTROWS(pagos)
Ticket Promedio por Pago

Monto total dividido por la cantidad de transacciones. Valor promedio por operación.

Ticket Promedio por Pago =
DIVIDE(
    [Monto Total Pagado],
    [Cantidad de Transacciones],
    BLANK()
)
Pagos Aprobados

Cuenta las transacciones cuyo estado es 'aprobado'.

Pagos Aprobados =
CALCULATE(
    [Cantidad de Transacciones],
    pagos[estado] = "aprobado"
)
Tasa de Aprobación de Pagos

Porcentaje de transacciones aprobadas sobre el total.

Tasa de Aprobación de Pagos =
DIVIDE(
    [Pagos Aprobados],
    [Cantidad de Transacciones],
    BLANK()
)
Pagos Rechazados

Cuenta las transacciones cuyo estado es 'rechazado'.

Pagos Rechazados =
CALCULATE(
    [Cantidad de Transacciones],
    pagos[estado] = "rechazado"
)
Tasa de Rechazo

Porcentaje de transacciones rechazadas sobre el total.

Tasa de Rechazo =
DIVIDE(
    [Pagos Rechazados],
    [Cantidad de Transacciones],
    BLANK()
)
Monto Reembolsado

Suma del monto de las transacciones con estado 'reembolsado'.

Monto Reembolsado =
CALCULATE(
    SUM(pagos[monto]),
    pagos[estado] = "reembolsado"
)
Tasa de Reembolso

Porcentaje del monto reembolsado sobre el monto total pagado.

Tasa de Reembolso =
DIVIDE(
    [Monto Reembolsado],
    [Monto Total Pagado],
    BLANK()
)
Transacciones por Método de Pago

Cuenta transacciones desglosadas por método de pago. Se usa con pagos[metodo_pago] como dimensión.

Transacciones por Método de Pago = COUNTROWS(pagos)
05

Geografía de Clientes y Ventas

Mapa de penetración regional: identifica qué regiones, ciudades y comunas concentran los ingresos y la base de clientes, dónde hay mayor densidad de ventas y qué zonas representan oportunidades de expansión territorial.

Medidas DAX 10
Ingreso Total

Suma del subtotal de detalles de pedidos. Permite filtrar por región, ciudad o comuna correctamente.

Ingreso Total = SUM(detalle_pedidos[subtotal])
Clientes Únicos

Cuenta los usuarios distintos que han realizado pedidos.

Clientes Únicos = DISTINCTCOUNT(usuarios[id_usuario])
Pedidos por Región

Cuenta pedidos, se desglosa automáticamente al usar direcciones[region] como dimensión.

Pedidos por Región = COUNTROWS(pedidos)
Ticket Promedio por Ciudad

Ingreso total dividido por pedidos en cada ciudad.

Ticket Promedio por Ciudad =
DIVIDE(
    SUM(detalle_pedidos[subtotal]),
    COUNTROWS(pedidos),
    BLANK()
)
Densidad de Clientes

Cuenta clientes únicos por comuna. Se usa con direcciones[comuna] como dimensión.

Densidad de Clientes = DISTINCTCOUNT(usuarios[id_usuario])
% del Ingreso Nacional

Contribución porcentual de cada región al ingreso nacional. Usa ALL(direcciones) para remover el filtro de región y obtener el total.

% del Ingreso Nacional =
DIVIDE(
    SUM(detalle_pedidos[subtotal]),
    CALCULATE(
        SUM(detalle_pedidos[subtotal]),
        ALL(direcciones)
    ),
    BLANK()
)
Región #1

Nombre de la región con mayor ingreso, usando TOPN y CONCATENATEX.

Región #1 =
CONCATENATEX(
    TOPN(
        1,
        VALUES(direcciones[region]),
        [Ingreso Total],
        DESC
    ),
    direcciones[region],
    ", "
)
Ingreso Región #1

Monto de ingreso de la región líder, usando TOPN y MAXX.

Ingreso Región #1 =
MAXX(
    TOPN(
        1,
        VALUES(direcciones[region]),
        [Ingreso Total],
        DESC
    ),
    [Ingreso Total]
)
Regiones con Ventas

Cuenta cuántas regiones distintas tienen ventas registradas.

Regiones con Ventas =
DISTINCTCOUNT(direcciones[region])
Ciudades con Ventas

Cuenta cuántas ciudades distintas tienen ventas registradas.

Ciudades con Ventas =
DISTINCTCOUNT(direcciones[ciudad])

Presentación en video