¡Bienvenidos, muy buenos días tardes o noches , según donde me leas !
En el apasionante mundo del análisis de datos, la eficiencia y precisión son esenciales para obtener resultados significativos. Hoy exploraremos un modelo dimensional que utiliza dos dimensiones cruciales: fecha y tiempo. Todas las transformaciones y el modelado se han realizado en Power Query, aprovechando al máximo sus capacidades para limpiar y estructurar los datos.
Modelo dimensional con dos dimensiones una de fecha y otra de tiempo.
Todas las trasformaciones y el modelado se realizaron en Power Query.
Tenemos tres tablas.
La fuente de datos viene de un Excel, el cual podemos editar y manipular de total gestión, para normalizar los datos.
Primero realizaremos la limpieza de las tres tablas.
- Identificar si tenemos duplicados.
- Estandarización de los datos.
- Verificar que no tengamos nulos o vacíos.
- Ver si existen campos en común para combinarlos
Primera tabla en analizar.
Agent:
No tiene duplicados.
No tiene datos nulos.
No tiene datos por estandarizar.
El campo clave será id_agent, ya viene de negocio, no se tiene que recrear.
La columna Tipo la podemos eliminar ya que no genera ninguna relevancia para nuestro análisis
Se ajustan los nombres de cada columna y sus tipos de datos.
La tabla User:
No tiene duplicados.
Si que tiene nulos, en la columna name
No tiene datos por estandarizar
Los datos se relacionan desde esta tabla hacia la tabla de hechos, por medio de la columna extension-number, la cual esta en realidad en la tabla agent, pero primero realizaremos un leftjoin, desde la tabla agent a la tabla call entry.
Se ajustan los nombres de cada columna y sus tipos de datos.
Tabla call_entry :
No tiene duplicados.
Si tiene columnas con valores por estandarizar, ejemplo
Limpiar la columna Estatus, que tiene unos sin nombre y es que no tienen registro alguno imagen 2
Estandarizar la columna id_agent , donde este vacio será 0
Las columnas call_entry.trunk, id_campaign, id_contact, transfer, call_entry.duration, id_queue_call_entry serán eliminadas dado que unas no tienen información y otras no se utilizaran para el análisis.
Para fecha fin se debe realizar una limpieza mas, la cual es quitar específicamente, dado que tiene – y no se puede transformar a fecha el tipo de dato
Separamos en fecha y hora únicas las dimensiones de cada una de ellas
Empezamos con la fecha de inicio hasta acá quedamos documentando todo el proceso. De la descomposición de fechas de las columnas por separado de fecha y tiempo, extrayendo de cada columna la fecha y el tiempo
Ahora para que la tabla de hechos contenga todos los demás datos en los cuales manejamos cada proceso , debemos tener si o si las relaciones de 1 a * , traemos las columnas de NumeroExtension de la tabla Dim_Agente, con una operación de combinar , se tare la columna para la tabla de hechos, y donde no este informado se reemplaza con 0
Crear la dimensión calendario:
Para crear dimCalendario utilizaremos el mínimo y el máximo de cada columna es decir el mínimo de la fecha de entrada y el máximo de la fecha de fin de llamada
= {Number.From(List.Min(Hechos_llamadas[FechaInicio]))..Number.From(List.Max(Hechos_llamadas[FechaFin]))}
Hechos_llamadas[FechaInicio] y Hechos_llamadas[FechaFin]:
Hechos_llamadas es el nombre de la tabla.
FechaInicio y FechaFin son los nombres de las columnas dentro de esa tabla.
Hechos_llamadas[FechaInicio] devuelve una lista de todos los valores de la columna FechaInicio en la tabla Hechos_llamadas.
Hechos_llamadas[FechaFin] devuelve una lista de todos los valores de la columna FechaFin en la tabla Hechos_llamadas.
List.Min(Hechos_llamadas[FechaInicio]):
List.Min es una función que toma una lista como argumento y devuelve el valor mínimo de esa lista.
Aquí, se aplica a la lista de valores en Hechos_llamadas[FechaInicio] para encontrar la fecha más temprana en esa columna.
List.Max(Hechos_llamadas[FechaFin]):
List.Max es una función que toma una lista como argumento y devuelve el valor máximo de esa lista.
Aquí, se aplica a la lista de valores en Hechos_llamadas[FechaFin] para encontrar la fecha más tardía en esa columna.
Number.From:
Number.From convierte un valor a un número.
Se usa aquí para convertir las fechas mínimas y máximas en números.
{Number.From(List.Min(Hechos_llamadas[FechaInicio]))..Number.From(List.Max(Hechos_llamadas[FechaFin]))}:
{a..b} es una sintaxis en Power Query que crea una lista de números desde a hasta b, incluyendo ambos extremos.
Aquí, crea una lista de números desde el número correspondiente a la fecha mínima (FechaInicio) hasta el número correspondiente a la fecha máxima (FechaFin).
Se crean las colunas año mes semana nombre mes nombre día día del mes
Crear dimensión tiempo:
Se crea la columna franjaHora
La creación de las columnas en power query , para poder desarrollar , diferentes casos
Lo que se desea es en Power Query que contenga todas las horas desde las 00:00:00 hasta las 23:59:59 en incrementos de un segundo, se crea lo siguiente
let
Aca primero Define el inicio y fin de los tiempos
HoraInicio = #time(0, 0, 0), // 00:00:00
HoraFin = #time(23, 59, 59), // 23:59:59
Los Convierte las horas a número
InicioNumero = Time.ToRecord(HoraInicio),
FinNumero = Time.ToRecord(HoraFin),
Luego Genera la lista de números representando segundos desde el inicio hasta el fin
ListaSegundos = List.Transform({0..((23*3600 + 59*60 + 59))}, each #time(0,0,0) + #duration(0,0,0,_)),
Crea una tabla con la lista de tiempos, para tener las fechas de inicio a fin
TablaTiempos = Table.FromList(ListaSegundos, Splitter.SplitByNothing(), {«Hora»}),
#»Tipo cambiado» = Table.TransformColumnTypes(TablaTiempos,{{«Hora», type time}})
in
#»Tipo cambiado»
Creación de relaciones:
Teniendo modelo dimensional de 1 a * en perfecto estado optimizando su tamaño y cumpliendo con todo las reglas de negocio para responder las preguntas , que se necesiten.