Proyecto 1

🎯 Objetivos del Proyecto

1️⃣ Análisis de Solicitudes

Medir la cantidad y tipo de solicitudes ("Occasional" vs. "Regular").

2️⃣ Análisis de Comportamiento

Identificar tendencias de crecimiento o caída en solicitudes.

Analizar patrones de clientes según tipo de negocio.

3️⃣ Advertencias y Pérdidas

Calcular pérdidas por visitas sin carga ("No Cargo").

Implementar mejoras en procesos de verificación.

4️⃣ Optimización del Servicio

Coordinar con el área comercial para mitigar incidencias.

Crear reportes detallados sobre visitas fallidas.

5️⃣ Eficiencia en Transporte

Implementar KPIs: niveles de servicio, factor de carga, georreferencia y cumplimiento de horarios.

Tecnología y Herramientas

Diccionario origen de datos 'db_Request'

Proceso Creación del Modelo

Paso 1: Importación de Datos

Importé 4 archivos Excel 'GlobalTransit_Metrics' en formato .xlsx con los datos a trabajar. Los 4 archivos, al estar bien estructurados y coincidir en sus columnas, con PowerQuery procedí a unificarlos para trabajar como si fuese un solo archivo o una fuente de datos única.



Importación de datos en Power BI

Paso 2: Limpieza y Transformación de Datos

En PowerQuery, fui a la opción 'Transformar' > 'Columna de texto' > 'Dividir columna' > 'Por: de dígito a no dígito' para separar el último dígito del identificador.



Limpieza de datos en Power BI

Unimos las 2 columnas yendo a 'Transformar' > 'Columna de texto' > 'Combinar Columnas' y elegimos el separador '-'.


Relaciones entre tablas en Power BI

Eliminamos una columna vacía que no aporta valor.


Visualizaciones en Power BI

Creé una nueva columna personalizada de direcciones.


Visualizaciones en Power BI

Fui a la opción 'Agregar columna' > 'Columna personalizada' y creé la columna que llamaremos 'Address'.


Visualizaciones en Power BI

Aquí cambié el formato 'Fecha / Hora' a las columnas que venían con este formato, con el fin de tener los datos estandarizados según su campo o columna antes de cargarlos en Power BI.


Visualizaciones en Power BI

Tabla Calendario, Medidas y Fórmulas DAX

1. Creación de la Tabla Calendario

Para facilitar el análisis temporal, creé una tabla de calendario (T_Calendar) que contiene fechas iterativas basadas en el rango de fechas de la tabla db_Request. Luego, agregué columnas adicionales para desglosar la fecha en componentes útiles como día, mes, año, semestre y semana.


T_Calendar = CALENDAR(
    MIN(db_Request[Scheduling_Date]),
    MAX(db_Request[Scheduling_Date])
)
                
Columnas adicionales:

Day = DAY(T_Calendar[Date])
Day Name = FORMAT(T_Calendar[Date], "dddd")
Month = MONTH(T_Calendar[Date])
Month Name = FORMAT(T_Calendar[Date], "mmmm")
Semester = IF(MONTH([Date]) <= 6, 1, 2)
Week = WEEKNUM(T_Calendar[Date])
Year = YEAR(T_Calendar[Date])
                

2. Creación de Medidas para db_Request

Creé una tabla de medidas (T_Metrics db_request) para calcular métricas clave relacionadas con las solicitudes. Estas métricas incluyen conteos de solicitudes por estado, comparaciones con el año anterior y cálculos de excepciones operativas.


Total Request Count = COUNT(db_Request[Request_ID])

State Ready = COUNTROWS(
    FILTER(db_Request, 
        db_Request[State] = "Ready")
)

State Arrived = COUNTROWS(
    FILTER(db_Request, 
        db_Request[State] = "Arrived")
)

State Assigned = COUNTROWS(
    FILTER(db_Request, 
        db_Request[State] = "Assigned")
)

State Progress = COUNTROWS(
    FILTER(db_Request, 
        db_Request[State] = "In Progress")
)

State Transit = COUNTROWS(
    FILTER(db_Request, db_Request[State] = "In Transit")
)

State Warning = COUNTROWS(
    FILTER(db_Request, 
        db_Request[State] = "Warning")
)

State Unscheduled = COUNTROWS(
    FILTER(db_Request, 
        db_Request[State] = "Unscheduled")
)

Status Pending Completion = COUNTROWS(
    FILTER(db_Request, 
        db_Request[Status] = "Pending Completion")
)

Last Year Request Count = CALCULATE(
    [Total Request Count], 
        SAMEPERIODLASTYEAR(T_Calendar[Date])
)

Request Count Difference = [Total Request Count] - [Last Year Request Count]

Successful Service = SUMX(
    db_Request,
    IF(
        db_Request[Status] = "Loaded" || 
        (db_Request[Status] = "Warning" && db_Request[Reason] = "No Cargo"),
        1, 0
    )
)

Unique Truck = CALCULATE(
    DISTINCTCOUNT(db_Request[Truck_ID]),
    ALLSELECTED(T_Calendar[Date]),
    NOT(ISBLANK(db_Request[Truck_ID]))
)

Operational Exceptions = COUNTROWS(
    FILTER(
        db_Request,
        db_Request[Reason] <> "Loaded" &&
        db_Request[Reason] <> "No Cargo" &&
        db_Request[Reason] <> "Pending Completion" &&
        db_Request[Reason] <> "Unscheduled"
    )
)
                

3. Creación de Medidas para Porcentajes

Para complementar el análisis, creé una segunda tabla de medidas (T_Metrics % db_request) que calcula porcentajes basados en las métricas anteriores. Esto permite entender la proporción de solicitudes en cada estado respecto al total.


% State Ready = [State Ready] / [Total Request Count]

% State Warning = [State Warning] / [Total Request Count]

% State Unscheduled = [State Unscheduled] / [Total Request Count]

% Status Pen Com = [Status Pending Completion] / [Total Request Count]
                

4. Creación de Medidas para db_customer

Finalmente, creé una tabla de medidas (T_Metrics db_customer) para analizar métricas relacionadas con los clientes. Estas métricas incluyen el conteo de solicitudes por segmento de cliente, como "Account Customers", "Business Units", "Company Branches", "E-commerce Customer" y "Retail Business".


Account Customers Count = 
    CALCULATE(
        COUNTROWS(db_Request),
            db_Customer[Customer_Segment] = "Account Customers"
    )

Business Units Count = 
    CALCULATE(
        COUNTROWS(db_Request),
            db_Customer[Customer_Segment] = "Business Units"
    )

Company Branches Count = 
    CALCULATE(
        COUNTROWS(db_Request),
            db_Customer[Customer_Segment] = "Company Branches"
    )

E-commerce Customer Count = 
    CALCULATE(
        COUNTROWS(db_Request),
            db_Customer[Customer_Segment] = "E-commerce Customer"
    )

Retail Business Count = 
    CALCULATE(
        COUNTROWS(db_Request),
            db_Customer[Customer_Segment] = "Retail Business"
    )
                

Relaciones entre Orígenes de Datos

El modelo de datos conecta múltiples tablas, representando distintas áreas de la empresa. Por ejemplo:

  • La tabla db_Customer se relaciona con db_Request a través del campo Customer_ID, permitiendo rastrear solicitudes por cliente.
  • La tabla db_CarrierRate está vinculada a db_TruckMetrics mediante el campo Truck_ID, para analizar tarifas por vehículo.
  • La tabla db_Budget conecta con T_Calendar, alineando presupuestos con períodos específicos.
  • La tabla db_Worked_truck_day se cruza con db_TruckMetrics para calcular métricas diarias de trabajo por camión.

Las relaciones en este modelo de datos fueron diseñadas para integrar información clave de diversas áreas, como clientes, camiones, presupuestos y métricas operativas. Esto permite combinar datos que, de forma aislada, no tendrían el mismo impacto. Por ejemplo, conectar las solicitudes de clientes con el desempeño de los camiones ayuda a identificar patrones de uso, evaluar costos y mejorar la eficiencia operativa. Asimismo, vincular los presupuestos con el calendario facilita el análisis temporal para alinear recursos con las necesidades del negocio

Relaciones en Power BI

Relaciones creadas en Power BI: explicando cómo se conectan los datos.

Visualizaciones en Power BI (SIN FIGMA)

Aquí mostraré algunas imagenes de los paneles creados a partir de las de las medidas creadas anteriormente, pero los paneles finales los mostraré una vez que los alla personalizado con FIGMA para finalizar con una Historytelling con todo lo visto.

Visualización 1

Total 'Request' por 'Year', 'Month', y 'Type_Request' .

Visualizaciones en Power BI (CON FIGMA)

Aquí mostraré los los diseños que he creado con figma para crear un impacto visual mas potente de los dashboard que he creado. Los dashboard y paneles de mando estaran en la siguiente publicación.

Visualización 1

Descripción inicial de la sección CON FIGMA.

Conclusiones del Proyecto

Panel 1: Total Request



Panel 2: Analysis Customer


Panel: Analysis Warning


Panel: Impacto Financiero de "No Cargo"


Panel: Daily Logistics Management Report


Panel: Monthly Operational Report Analysis


Panel: Monthly Carrier Cost and Budget Analysis


Panel: Budget vs. Cost Truck Analysis


Panel: Customer Requests and Geofencing Analysis


Panel: Customer Requests and Geofencing Analysis (2024)