esofitec. CoreDocs

esofitec. CoreDocs

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