ENTIDAD GOLD DE TABLERO DE FACTURAS
También conocido como Tablero de Ventas, este modelo pertenece a la capa Gold de la arquitectura de medallón y está compuesto por la entidad BI_SILVER_SD_INVOICE_ECC. Su objetivo principal es proporcionar una visión consolidada y analítica de las ventas realizadas en el tiempo, permitiendo un monitoreo efectivo del desempeño comercial.
Características del Modelo:
- Análisis temporal: Permite visualizar las ventas tanto en un nivel anual como mensual, facilitando la evaluación de tendencias.
- Gestión de moneda: Considera las ventas en distintas monedas, asegurando una correcta interpretación de los valores de facturación en función de las tasas de conversión aplicadas.
- Consolidación de datos: Integra información clave de facturación para proporcionar reportes detallados y dashboards estratégicos.
Entidades que componen el Tablero de Inventarios
- BI_GOLD_SALES_INVOICE_ECC.sql
BI_GOLD_SALES_INVOICE_ECC
Este modelo pertenece a la capa Gold de la arquitectura medallón y se compone de la entidad Silver de facturas. Su propósito es proyectas los totales vendidos por año y mes.
Este modelo pertenece a la capa Gold de la arquitectura de medallón y se compone de la entidad Silver de facturas. Su propósito es proyectar los totales de ventas realizadas por año y mes, proporcionando una visión consolidada del desempeño comercial.
Características del Modelo:
- Análisis temporal: Agrega los montos de facturación a nivel anual y mensual, permitiendo evaluar tendencias de ventas a lo largo del tiempo.
- Consolidación de facturación: Integra información de múltiples documentos de ventas para obtener un total agregado por período.
- BI_SILVER_SD_INVOICE_ECC (Facturas de Venta - Capa Silver)
Contiene información consolidada de las facturas de venta dentro del módulo SD en SAP.
BI_SILVER_SD_INVOICE_ECC
- T001W (Centros de Planta)
Contiene la lista de centros en SAP, representando ubicaciones físicas donde se realizan operaciones logísticas, productivas o de almacenamiento.
<client>_<environment>_DM_PLANTAS
- TVKOT (Organización de Ventas - Descripción)
Contiene las descripciones de las organizaciones de ventas en diferentes idiomas, permitiendo identificar las estructuras comerciales dentro de SAP.
<client>_<environment>_DM_ORGANIZACION_VENTAS_TXT
- TVTWT (Canales de Distribución - Descripción)
Almacena las descripciones de los canales de distribución utilizados en SAP, facilitando la segmentación y gestión de ventas.
<client>_<environment>_DM_CANAL_DISTRBUCION_TXT
- TSPAT (Grupo de Estadísticas de Materiales)
Contiene información sobre la clasificación de materiales para estadísticas de ventas y análisis de desempeño comercial.
<client>_<environment>_DM_SECTOR_COMERCIAL_TXT
- T023T (Grupo de Materiales - Descripción)
Almacena las descripciones de los grupos de materiales en diferentes idiomas, facilitando la categorización de productos dentro del sistema SAP.
<client>_<environment>_DM_GRUPO_MATERIAL_TXT
- TVKBT (Grupos de Clientes - Descripción)
Contiene las descripciones de los grupos de clientes en SAP SD, permitiendo segmentar estrategias de venta y políticas comerciales.
<client>_<environment>_DM_OFICINA_VENTAS_TXT
- T179T (Jerarquía de Materiales - Descripción)
Almacena la información estructurada de la jerarquía de materiales, facilitando la clasificación de productos dentro del sistema.
<client>_<environment>_DM_JERARQUIA_MATERIALES_TXT
- T171T (Tipos de Facturación - Descripción)
Contiene la información descriptiva de los diferentes tipos de facturación utilizados en SAP, permitiendo su correcta identificación y análisis.
<client>_<environment>_ZONA_VENTAS_TXT
Supuestos
- Las ventas mensuales se calculan como la sumatoria de valor_neto_vbrp, agrupada por mes, año, material y moneda.
- El mes y el año se extraen del campo fechafact_vbrk utilizando las siguientes transformaciones:
substring(ssi.fechafact_vbrk, 1, 6) AS mes_factura,
substring(ssi.mes_factura, 5, 2) AS mes,
substring(ssi.mes_factura, 1, 4) AS anio
Instalación
docker-compose up -d dbt_bi_invoice --build
Modelo sql ejecutado
- {{ config(
- order_by="(mes_factura,
- material_vbrp,
- moneda_vbrk)",
- engine='ReplacingMergeTree(_version)',
- materialized='incremental',
- incremental_strategy='append'
- )
- }}
- WITH new_data AS (
- SELECT
- ssi.factura_vbrk, -- VBELN
- ssi.ctdfacume_vbrp, -- FKLMG
- ssi.valor_neto_vbrp, -- NETWR
- ssi.tipo_doc_vbrk, -- VBTYP
- ssi.anulada_vbrk, -- FKSTO
- ssi.fechafact_vbrk, -- FKDAT
- ssi.centro_vbrp, -- WERKS
- ssi.orgventas_vbrk, -- VKORG
- ssi.candistr_vbrk, -- VTWEG
- ssi.sector1_vbrp, -- SPARA
- ssi.gpoartic_vbrp, -- MATKL
- ssi.oficvta_vbrp, -- VKBUR
- ssi.jquiaprod_vbrp, -- PRODH
- ssi.zona_vta_vbrk, -- BZIRK
- ssi.material_vbrp, -- MATNR
- ssi.denomin1_vbrp, -- ARKTX
- ssi.moneda_vbrk, -- WAERK
- substring(ssi.fechafact_vbrk, 1, 6) AS mes_factura
- FROM {{ ref('BI_SILVER_SD_INVOICE_ECC')}} AS ssi FINAL
- WHERE ssi.tipo_doc_vbrk = 'M' AND ssi.anulada_vbrk != 'X'
- {% if is_incremental() %}
- AND ssi._version >= (select max(_version) from {{this}})
- {% endif %}
- ),
- affected_data AS (
- {% if is_incremental() %}
- SELECT
- ssi.ctdfacume_vbrp,
- ssi.valor_neto_vbrp,
- ssi.factura_vbrk,
- ssi.tipo_doc_vbrk,
- ssi.anulada_vbrk,
- ssi.fechafact_vbrk,
- ssi.centro_vbrp,
- ssi.orgventas_vbrk,
- ssi.candistr_vbrk,
- ssi.sector1_vbrp,
- ssi.gpoartic_vbrp,
- ssi.oficvta_vbrp,
- ssi.jquiaprod_vbrp,
- ssi.zona_vta_vbrk,
- ssi.material_vbrp,
- ssi.denomin1_vbrp,
- ssi.moneda_vbrk,
- substring(ssi.fechafact_vbrk, 1, 6) AS mes_factura
- FROM {{ ref('BI_SILVER_SD_INVOICE_ECC')}} AS ssi FINAL
- WHERE (ssi.material_vbrp, substring(ssi.fechafact_vbrk, 1, 6)) IN (SELECT DISTINCT material_vbrp, mes_factura FROM new_data)
- {% else %}
- -- PROCESAR TODO
- SELECT
- *
- FROM new_data
- {% endif %}
- ),
- transform_data AS (
- SELECT
- SUM(valor_neto_vbrp) AS ventas_mensual,
- mes_factura,
- any(centro_vbrp) as centro_vbrp,
- any(orgventas_vbrk) as orgventas_vbrk,
- any(candistr_vbrk) as candistr_vbrk,
- any(sector1_vbrp) as sector1_vbrp,
- any(gpoartic_vbrp) as gpoartic_vbrp,
- any(oficvta_vbrp) as oficvta_vbrp,
- any(jquiaprod_vbrp) as jquiaprod_vbrp,
- any(zona_vta_vbrk) as zona_vta_vbrk,
- material_vbrp,
- any(denomin1_vbrp) as denomin1_vbrp,
- moneda_vbrk
- FROM affected_data
- GROUP BY
- mes_factura,
- material_vbrp,
- moneda_vbrk
- order by mes_factura asc
- )
- SELECT
- ssi.ventas_mensual as ventas_mensual,
- substring(ssi.mes_factura, 5, 2) AS mes,
- substring(ssi.mes_factura, 1, 4) AS anio,
- ssi.mes_factura as mes_factura,
-
- ssi.centro_vbrp AS centro_vbrp,
- ssi.orgventas_vbrk AS orgventas_vbrk,
- ssi.candistr_vbrk AS candistr_vbrk,
- ssi.sector1_vbrp AS sector1_vbrp,
- ssi.gpoartic_vbrp AS gpoartic_vbrp,
- ssi.oficvta_vbrp AS oficvta_vbrp,
- ssi.jquiaprod_vbrp AS jquiaprod_vbrp,
- ssi.zona_vta_vbrk AS zona_vta_vbrk,
- ssi.material_vbrp AS material_vbrp,
- ssi.denomin1_vbrp AS denomin1_vbrp,
- ssi.moneda_vbrk AS moneda_vbrk,
-
- t001w.nom1 as centro,
- t001w.idioma AS idioma,
- tvkot.denomin AS orgventas,
- tvtwt.denomin AS candistr,
- tspat.denomin AS sector,
- t023t.gpoartic1 AS gpoartic,
- tvkbt.denomin AS oficvta,
- t179t.denom as jquiaprod,
- t171t.denomzvtas AS zona_vta,
- now64() as _version
- FROM transform_data AS ssi
- LEFT JOIN (SELECT cp, nom1, centro , idioma FROM {{ source('oneconnect', 'PR0_B_DM_PLANTAS') }} FINAL) AS t001w on t001w.centro = ssi.centro_vbrp AND t001w.idioma ='S'
- LEFT JOIN (SELECT denomin, orgventas, idioma FROM {{ source('oneconnect', 'PR0_B_DM_ORGANIZACION_VENTAS_TXT') }} FINAL) AS tvkot on tvkot.orgventas = ssi.orgventas_vbrk and tvkot.idioma = t001w.idioma
- LEFT JOIN (SELECT denomin, candistr, idioma FROM {{ source('oneconnect', 'PR0_B_DM_CANAL_DISTRBUCION_TXT') }} FINAL) AS tvtwt on tvtwt.candistr = ssi.candistr_vbrk and tvtwt.idioma = t001w.idioma
- LEFT JOIN (SELECT idioma, sector, denomin FROM {{ source('oneconnect', 'PR0_B_DM_SECTOR_COMERCIAL_TXT') }} FINAL) AS tspat on tspat.sector = ssi.sector1_vbrp and tspat.idioma = t001w.idioma
- LEFT JOIN (SELECT gpoartic1, gpoartic, idioma FROM {{ source('oneconnect', 'PR0_B_DM_GRUPO_MATERIAL_TXT') }} FINAL) AS t023t on t023t.gpoartic = ssi.gpoartic_vbrp and t023t.idioma = t001w.idioma
- LEFT JOIN (SELECT idioma, oficvta, denomin FROM {{ source('oneconnect', 'PR0_B_DM_OFICINA_VENTAS_TXT') }} FINAL) AS tvkbt on tvkbt.oficvta = ssi.oficvta_vbrp and tvkbt.idioma = t001w.idioma
- LEFT JOIN (SELECT idioma, jquiaprod, denom FROM {{ source('oneconnect', 'PR0_B_DM_JERARQUIA_MATERIALES_TXT') }} FINAL) AS t179t on t179t.jquiaprod = ssi.jquiaprod_vbrp and t179t.idioma = t001w.idioma
- LEFT JOIN (SELECT zona_vta, denomzvtas, idioma FROM {{ source('oneconnect', 'PR0_B_DM_ZONA_VENTAS_TXT') }} FINAL) AS t171t ON t171t.zona_vta = ssi.zona_vta_vbrk and t001w.idioma = t171t.idioma