Cubos de BI
Plantillas y ejemplos
Esqueletos listos para copiar a a3ERP BI y rellenar. El porqué de cada pieza — sobre todo la granularidad, que es donde se juega la credibilidad del cubo — está en el artículo de cubos de BI.
Esqueleto de cubo#
Granularidad de línea de factura de venta: cada fila del dataset es una línea, y todas las medidas son de nivel línea. Lo que viene de niveles superiores (cliente, fecha de la factura) baja solo como dimensión:
SELECT
-- Dimensiones
C.CODCLI [Cód. Cliente],
C.NOMCLI [Cliente],
YEAR(F.FECHA) [Año],
MONTH(F.FECHA) [Mes],
A.CODART [Cód. Artículo],
A.DESCART [Artículo],
-- Medidas (siempre del nivel de la fila)
L.UNIDADES [Unidades],
L.BRUTOMONEDA [Importe Bruto]
FROM LINEFACT L WITH (NOLOCK)
INNER JOIN CABEFACV F WITH (NOLOCK) ON F.IDFACV = L.IDFACV
INNER JOIN CLIENTES C WITH (NOLOCK) ON C.CODCLI = F.CODCLI
INNER JOIN ARTICULO A WITH (NOLOCK) ON A.CODART = L.CODART
WHERE F.FECHA >= '2026-01-01'
Traducir un código a texto legible#
El CASE de traducción, con su ELSE vacío para detectar valores no contemplados (si en el pivot aparecen filas con la dimensión en blanco, falta un valor en el CASE):
CASE F.ESTADO
WHEN 'A' THEN 'Abierta'
WHEN 'C' THEN 'Cerrada'
ELSE ''
END [Estado]
Acotar la ventana temporal#
Un cubo sin ventana recorre toda la tabla y puede tardar en cargar. Si el análisis no necesita todo el histórico, acótalo de forma relativa para no tener que mantener fechas fijas:
WHERE F.FECHA >= DATEADD(MONTH, -6, GETDATE()) -- últimos 6 meses
WHERE YEAR(F.FECHA) >= YEAR(GETDATE()) - 1 -- año en curso y anterior