Files
MBS/Dashboards MARMOTECH/Guia_Dashboard_Presidencia_PowerBI.md

10 KiB
Raw Permalink Blame History

Dashboard Ejecutivo de Presidencia — Guía de armado en Power BI

Radiografía financiera para el Presidente, basada en el Mayor General Analítico (cgprrp008.4gl) y el Análisis de Gastos por Departamento (cgprrp009.4gl). Datos servidos por la capa BI: 192.168.40.8 / MarmotechBI, esquema presidencia (vistas creadas por el script SQL_Vistas_Presidencia.sql). Fecha: 2026-08-26 · Autor: jsoto.


0. Lo que ya está hecho (capa de datos)

Se crearon 3 vistas en MarmotechBI — restringidas a jsoto (DENY SELECT a public + GRANT explícito a MARMOTECH\jsoto y jsoto; el resto del equipo db_datareader no las ve):

Vista Grano Para qué Columnas clave
presidencia.vwPLMensual año × mes × cuenta Estado de Resultados (cgprrp008) ano, numero_mes, mes, AnoMes, fecha_mes, grupo, linea, orden_linea, subgrupo_cod, subgrupo_desc, cuenta, cuenta_desc, debito, credito, resultado, costo_gasto
presidencia.vwGastosDepto año × mes × depto × cuenta Análisis de gastos (cgprrp009) …, gerencia_cod, gerencia, departamento, depto_nombre, subgrupo_cod, subgrupo_desc, cuenta, cuenta_desc, debito, credito, gasto
presidencia.vwBalanceMensual año × mes × cuenta Balance / liquidez …, grupo, grupo_desc, subgrupo_cod, subgrupo_desc, cuenta, cuenta_desc, movimiento_mes, saldo_natural, saldo_presentacion

Reglas de negocio ya aplicadas dentro de las vistas (no hay que replicarlas en DAX):

  • Estado de Resultados por primer dígito de la cuenta: 4 Ventas · 5 Costo · 7 Gastos · 8 Otros (incl. 88 = ISR).
  • resultado = credito debito → la suma de todas las líneas del P&L = Utilidad Neta. Ventas suma positivo; costo, gastos e ISR restan.
  • Solo transacciones activas (status_t IS NULL).
  • Se excluye el asiento de cierre anual (ref tipo ED.99-001/12AA); sin esto, todo año cerrado neteaba a cero.

Validado contra el sistema: julio-2026 reproduce exactamente la imagen del cgprrp008.


1. Conexión y consultas (Power Query / M)

Obtener datos → SQL Server · Servidor 192.168.40.8 · Base MarmotechBI · Modo Import (o DirectQuery si se quiere en vivo). Traer las 3 vistas del esquema presidencia. Ejemplo de la consulta base (las otras dos son idénticas cambiando el nombre):

let
    Origen = Sql.Database("192.168.40.8", "MarmotechBI"),
    PL = Origen{[Schema="presidencia", Item="vwPLMensual"]}[Data]
in
    PL

Tabla de calendario (necesaria para YoY / YTD)

Crear una tabla calculada DimCalendario (grano día, contigua) y marcarla como Tabla de fechas:

DimCalendario =
VAR MinD = DATE(2015,1,1)   -- ajustar si se quiere histórico más largo
VAR MaxD = DATE(2028,12,31)
RETURN
ADDCOLUMNS(
    CALENDAR(MinD, MaxD),
    "Año",        YEAR([Date]),
    "MesNo",      MONTH([Date]),
    "Mes",        FORMAT([Date],"MMM","es-DO"),
    "AñoMes",     FORMAT([Date],"yyyy-MM"),
    "PrimerDiaMes", DATE(YEAR([Date]),MONTH([Date]),1),
    "Trimestre",  "T" & FORMAT([Date],"Q")
)

Modelado → seleccionar DimCalendario → Marcar como tabla de fechas (columna Date).


2. Relaciones (vista Modelo)

Las vistas traen fecha_mes = primer día del mes. Relacionar una sola dirección, Dimensión (1) → Hecho (*):

Desde (1) Columna Hacia (*) Columna
DimCalendario Date vwPLMensual fecha_mes
DimCalendario Date vwGastosDepto fecha_mes
DimCalendario Date vwBalanceMensual fecha_mes

Como cada mes tiene un solo fecha_mes (día 1), la relación con el calendario diario funciona perfecto para TOTALYTD y SAMEPERIODLASTYEAR. Los slicers de Año / Mes se ponen sobre DimCalendario (Año, Mes).


3. Medidas DAX

Crear una tabla de medidas vacía (_Medidas) o alojarlas en vwPLMensual.

3.1 Estado de Resultados (base)

Ventas Netas        = CALCULATE( SUM(vwPLMensual[resultado]),   vwPLMensual[grupo] = "4" )
Costo de Ventas     = CALCULATE( SUM(vwPLMensual[costo_gasto]), vwPLMensual[grupo] = "5" )
Gastos Operativos   = CALCULATE( SUM(vwPLMensual[costo_gasto]), vwPLMensual[grupo] = "7" )
Otros Ing. y Gastos = CALCULATE( SUM(vwPLMensual[costo_gasto]), vwPLMensual[linea] = "Otros Ingresos y Gastos" )
ISR                 = CALCULATE( SUM(vwPLMensual[costo_gasto]), vwPLMensual[linea] = "Impuesto sobre la Renta" )

Utilidad Bruta      = [Ventas Netas] - [Costo de Ventas]
Utilidad Operativa  = [Utilidad Bruta] - [Gastos Operativos]
Utilidad antes ISR  = [Utilidad Operativa] - [Otros Ing. y Gastos]
Utilidad Neta       = SUM( vwPLMensual[resultado] )     -- suma de todas las líneas

3.2 Márgenes

Margen Bruto %      = DIVIDE( [Utilidad Bruta],     [Ventas Netas] )
Margen Operativo %  = DIVIDE( [Utilidad Operativa], [Ventas Netas] )
Margen Neto %       = DIVIDE( [Utilidad Neta],      [Ventas Netas] )
Costo % Ventas      = DIVIDE( [Costo de Ventas],    [Ventas Netas] )
Gastos % Ventas     = DIVIDE( [Gastos Operativos],  [Ventas Netas] )

3.3 Comparativos (YoY y YTD)

Ventas AA           = CALCULATE( [Ventas Netas],  SAMEPERIODLASTYEAR(DimCalendario[Date]) )
Utilidad Neta AA    = CALCULATE( [Utilidad Neta], SAMEPERIODLASTYEAR(DimCalendario[Date]) )
Gastos AA           = CALCULATE( [Gastos Operativos], SAMEPERIODLASTYEAR(DimCalendario[Date]) )

Ventas YoY %        = DIVIDE( [Ventas Netas] - [Ventas AA], [Ventas AA] )
Utilidad YoY %      = DIVIDE( [Utilidad Neta] - [Utilidad Neta AA], [Utilidad Neta AA] )
Gastos YoY %        = DIVIDE( [Gastos Operativos] - [Gastos AA], [Gastos AA] )

Ventas YTD          = TOTALYTD( [Ventas Netas],  DimCalendario[Date] )
Utilidad Neta YTD   = TOTALYTD( [Utilidad Neta], DimCalendario[Date] )

3.4 Gastos (vwGastosDepto)

Gasto Total         = SUM( vwGastosDepto[gasto] )
Gasto AA            = CALCULATE( [Gasto Total], SAMEPERIODLASTYEAR(DimCalendario[Date]) )
Gasto YoY %         = DIVIDE( [Gasto Total] - [Gasto AA], [Gasto AA] )
Gasto % de Ventas   = DIVIDE( [Gasto Total], [Ventas Netas] )

3.5 Balance / liquidez (vwBalanceMensual)

El saldo del balance es el saldo acumulado al último mes del contexto. Medidas:

Saldo (fin periodo) =
VAR ultima = MAX( vwBalanceMensual[fecha_mes] )
RETURN CALCULATE( SUM(vwBalanceMensual[saldo_presentacion]),
                  vwBalanceMensual[fecha_mes] = ultima )

Activos      = CALCULATE( [Saldo (fin periodo)], vwBalanceMensual[grupo]="1" )
Pasivos      = CALCULATE( [Saldo (fin periodo)], vwBalanceMensual[grupo]="2" )
Patrimonio   = CALCULATE( [Saldo (fin periodo)], vwBalanceMensual[grupo]="3" )

Activo Corriente = CALCULATE( [Saldo (fin periodo)], vwBalanceMensual[subgrupo_cod]="11" )
Pasivo Corriente = CALCULATE( [Saldo (fin periodo)],
                     vwBalanceMensual[subgrupo_cod] IN {"20","21"} )

Razón Corriente   = DIVIDE( [Activo Corriente], [Pasivo Corriente] )
Capital de Trabajo= [Activo Corriente] - [Pasivo Corriente]
Endeudamiento %   = DIVIDE( [Pasivos], [Activos] )

4. Formato de medidas

  • Importes: moneda RD$, 0 decimales (o en millones con formato personalizado #,##0.0,, " M").
  • Porcentajes: 1 decimal.
  • Activar tabular-nums implícito (Power BI ya alinea) y usar la fuente del tema corporativo.

5. Páginas y visuales (ver prototipo Dashboard_Presidencia_Mockup.html)

Página 1 — Radiografía (resumen ejecutivo)

  • Fila de KPIs (tarjetas): Ventas Netas + Ventas YoY % · Utilidad Bruta + Margen Bruto % · Utilidad Operativa + Margen Operativo % · Utilidad Neta + Utilidad YoY % + Margen Neto %.
  • Cascada (Waterfall): eje = campo linea de vwPLMensual (orden por orden_linea), valor = [Utilidad Neta] con desglose por línea → arranca en Ventas y aterriza en Utilidad Neta. (El visual Waterfall nativo suma correctamente porque resultado ya trae el signo).
  • Comportamiento del periodo actual (columnas + línea): eje DimCalendario[Mes]; columnas = [Ventas Netas]; línea = [Utilidad Neta]; línea secundaria opcional = [Margen Neto %].
  • Trayectoria anual (barras agrupadas): eje DimCalendario[Año]; valores [Ventas Netas] y [Utilidad Neta].
  • Slicers: Año, Mes.

Página 2 — Análisis de Gastos (cgprrp009)

  • KPIs: Gasto Total + Gasto YoY % · Gasto % de Ventas · gerencia de mayor peso · mayor alza YoY.
  • Barras por gerencia: eje vwGastosDepto[gerencia]; valores [Gasto Total] y [Gasto AA]. Drill-down a depto_nombre y luego cuenta_desc.
  • Naturaleza del gasto: tabla o treemap por subgrupo_desc con [Gasto Total] y [Gasto % de Ventas]. (Nota: subgrupo 76 Cierre gtos fabricación es una absorción negativa a costo).
  • Gasto mensual + % de ventas: columnas [Gasto Total] por Mes con línea [Gasto % de Ventas] (control de eficiencia).

Página 3 — Estructura Financiera (balance / liquidez)

  • KPIs: Activos · Razón Corriente · Capital de Trabajo · Endeudamiento %.
  • Activos = Pasivos + Patrimonio + resultado del ejercicio (columnas apiladas): la diferencia contra Activos es la utilidad del año en curso aún no cerrada — es normal y se puede rotular como "Resultado del ejercicio".
  • Composición del activo / pasivo: tabla por subgrupo_desc con [Saldo (fin periodo)].
  • Tendencia del patrimonio: línea [Patrimonio] por Año.

6. Suscripción del Presidente

Publicar en el workspace corporativo → Suscribir al Presidente (envío por correo con captura del reporte, p. ej. cada lunes). Requiere que el dataset tenga actualización programada (gateway sobre 192.168.40.8).


7. Ideas de ampliación (opcional, reutilizando vistas existentes)

Para una radiografía "de un vistazo" también semanal, se puede añadir una página Panorama que combine, con las vistas ya publicadas en MarmotechBI (sin crear nada nuevo):

  • Ventas vs. presupuesto del mes (vwFactVentas + vwFactPresupuesto).
  • Cuentas por cobrar y vencido (vwFactCxC_Real).
  • Backlog / órdenes pendientes de despacho (vwOrdenesPendientesDespacho).
  • Producción del periodo (vwProduccion_pub).

Se maneja como modelo aparte (área comercial) para no mezclar granos; ver Documentacion_MarmotechBI.md.