OI_GOLD_PP_PRODUCTION_MONTHLY_SUMMARY
Este modelo pertenece a la capa Gold de la arquitectura de medallón y se compone de la entidad Silver OI_SILVER_PP_PRODUCTION_ORDER_ECC. Su propósito es proporcionar una visión detallada de la planificación de producción en comparación con los tiempos reales de ejecución por período, permitiendo un seguimiento preciso de cada orden de producción.
Características del Modelo
- Comparación Plan vs. Real: Evalúa la diferencia entre los tiempos planificados y los tiempos reales de producción, asi como tambien la calidad y eficiencia de producción.
Dependencias
- OI_SILVER_PP_PRODUCTION_ORDER_ECC (Órdenes de Producción - Capa Silver)
Contiene información consolidada de las órdenes de producción dentro del módulo PP en SAP, permitiendo el análisis y seguimiento de materiales en proceso de fabricación y su impacto en la disponibilidad de stock.
OI_SILVER_PP_PRODUCTION_ORDER_ECC
- MARD (Stock de Material por Almacén)
Almacena información sobre los niveles de inventario de los materiales en cada almacén, permitiendo gestionar la disponibilidad de stock en tiempo real.
<client>_<environment>_MM_MATERIAL_ALMACEN
Supuestos
- Fecha de inicio actual:
Se obtiene concatenando los campos feinicio_real_afko y hora_inreal_afko, considerando únicamente los registros donde feinicio_real_afko sea diferente de '00000000'.
(case
when spp.feinicio_real_afko = '00000000' then null
else parseDateTimeBestEffort(toString(toDateTimeOrNull(CONCAT(
SUBSTRING(spp.feinicio_real_afko,1,4),'-',
SUBSTRING(spp.feinicio_real_afko,5,2),'-',
SUBSTRING(spp.feinicio_real_afko,7,2),' ',
hora_inreal_afko ))))
end ) as actual_start_time,
- Fecha de finalización actual:
Se calcula concatenando los campos fecha_fin_real1_afko y fin_real_hora_afko, considerando únicamente los registros donde fecha_fin_real1_afko sea diferente de '00000000'.
...
(case
when spp.fecha_fin_real1_afko = '00000000' then null
else parseDateTimeBestEffort(toString(toDateTimeOrNull(CONCAT(
SUBSTRING(spp.fecha_fin_real1_afko,1,4),'-',
SUBSTRING(spp.fecha_fin_real1_afko,5,2),'-',
SUBSTRING(spp.fecha_fin_real1_afko,7,2),' ',
fin_real_hora_afko ))))
end ) as actual_end_time,
...
- Tiempo de producción real:
Se obtiene calculando la diferencia en horas entre actual_end_time y actual_start_time. En caso de que actual_end_time sea NULL, el tiempo de producción se establece en 0.
...
(case
when actual_end_time IS NULL then 0
else DATEDIFF(HOUR, actual_end_time, actual_start_time)
end ) as real_time,
...
- Fecha de inicio planificada:
Se obtiene concatenando los campos inicio_program_afko y hora_inicio_afko, considerando únicamente los registros donde inicio_program_afko sea diferente de '00000000'.
...
(case
when spp.inicio_program_afko = '00000000' then null
else parseDateTimeBestEffort(toString(toDateTimeOrNull(CONCAT(
SUBSTRING(spp.inicio_program_afko,1,4),'-',
SUBSTRING(spp.inicio_program_afko,5,2),'-',
SUBSTRING(spp.inicio_program_afko,7,2),' ',
hora_inicio_afko ))))
end ) as planned_start_time,
...
- Fecha de finalización planificada:
Se calcula concatenando los campos fin_programado_afko y fin_hora_afko, considerando únicamente los registros donde fin_programado_afko sea diferente de '00000000'.
...
(case
when spp.fin_programado_afko = '00000000' then null
else parseDateTimeBestEffort(toString(toDateTimeOrNull(CONCAT(
SUBSTRING(spp.fin_programado_afko,1,4),'-',
SUBSTRING(spp.fin_programado_afko,5,2),'-',
SUBSTRING(spp.fin_programado_afko,7,2),' ',
fin_hora_afko ))))
end ) as planned_end_time,
...
- Tiempo de planificación:
Se obtiene calculando la diferencia en horas entre planned_end_time y planned_start_time.
DATEDIFF(HOUR, planned_end_time, planned_start_time) as planned_time,
Instalación
docker-compose up -d dbt_oi_production_order --build
Modelo sql ejecutado
- {{ config(
- order_by='(orden_afko)',
- engine='ReplacingMergeTree(_version)',
- materialized='incremental',
- incremental_strategy='append'
- ) }}
- WITH inventory AS (
- SELECT
- libre_utiliz,
- material,
- centro,
- almacen
- FROM {{ source('oneconnect', 'PR0_B_MM_MATERIAL_ALMACEN') }} FINAL
- )
- SELECT
- --material_afpo MATNR
- numero_material_afpo,
- --plant_afpo DWERK
- centro_afpo,
- -- location_afpo LGORT
- almacen_afpo,
- --order_afko AUFNR
- orden_afko,
- -- schedstart_afko GSTRS
- CONCAT(SUBSTRING(spp.inicio_program_afko,1,4),'-',SUBSTRING(spp.inicio_program_afko,5,2)) as MY_planned_start_date,
- -- act_start_afko GSTRI
- -- actstart_afko GSUZI
- (case
- when spp.feinicio_real_afko = '00000000' then null
- else parseDateTimeBestEffort(toString(toDateTimeOrNull(CONCAT( SUBSTRING(spp.feinicio_real_afko,1,4),'-' , SUBSTRING(spp.feinicio_real_afko,5,2),'-',SUBSTRING(spp.feinicio_real_afko,7,2)
- ,' ', hora_inreal_afko )))) end ) as actual_start_time,
- -- actfinish_afko GLTRI
- -- actfinish1_afko GEUZI
- (case
- when spp.fecha_fin_real1_afko = '00000000' then null
- else parseDateTimeBestEffort(toString(toDateTimeOrNull(CONCAT( SUBSTRING(spp.fecha_fin_real1_afko,1,4),'-' , SUBSTRING(spp.fecha_fin_real1_afko,5,2),'-',SUBSTRING(spp.fecha_fin_real1_afko,7,2)
- ,' ', fin_real_hora_afko )))) end ) as actual_end_time,
- --
- (case
- when actual_end_time IS NULL then 0
- else DATEDIFF(HOUR,actual_end_time, actual_start_time ) end ) as real_time,
- --schedstart_afko GSTRS
- --start_time_afko GSUZS
- --GSTRS y GSUZS
- (case
- when spp.inicio_program_afko = '00000000' then null
- else parseDateTimeBestEffort(toString(toDateTimeOrNull(CONCAT( SUBSTRING(spp.inicio_program_afko,1,4),'-' , SUBSTRING(spp.inicio_program_afko,5,2),'-',SUBSTRING(spp.inicio_program_afko,7,2)
- ,' ', hora_inicio_afko )))) end ) as planned_start_time,
- --schedfin_afko GLTRS
- -- finish_tme_afko GLUZS
- --GLTRS y GLUZS
- (case
- when spp.fin_programado_afko = '00000000' then null
- else parseDateTimeBestEffort(toString(toDateTimeOrNull(CONCAT( SUBSTRING(spp.fin_programado_afko,1,4),'-' , SUBSTRING(spp.fin_programado_afko,5,2),'-',SUBSTRING(spp.fin_programado_afko,7,2)
- ,' ', fin_hora_afko )))) end ) as planned_end_time,
-
- DATEDIFF(HOUR,planned_end_time, planned_start_time) as planned_time,
- spp._version as updated_at,
- now64() as _version
- FROM {{ ref('OI_SILVER_PP_PRODUCTION_ORDER_ECC')}} AS spp final
- LEFT JOIN inventory AS mard
- ON mard.material = spp.numero_material_afpo
- and mard.centro = spp.centro_afpo
- and mard.almacen = spp.almacen_afpo
- WHERE
- spp.utilizacion_afko = '1' AND
- spp.tipo_de_orden_aufk = '10'