Cuando se trata de normalizar o desnormalizar para simplificar un proceso hay muchos caminos, hace poco me tope con el siguiente escenario:
Una empresa tiene la información de personas y una serie de pasos que ejecuta cada persona en cada una de sus visitas a sus puntos de atención, de esta forma (Datos de ejemplo).
Si intentamos cruzar la información con una dimensión de tiempo nos encontraremos con una cantidad de relaciones inactivas (Aprenda a lidiar con ellas) que sería necesario activarlas a discreción para poder resolver los diferentes cálculos, de igual manera, si aparecen más pasos en el futuro esto podría ser un problema que queremos dejar resuelto desde ya.
Procedimos a realizar un pivot de los datos para tenerlos de esta forma:
Posteriormente se separo la información de los pasos de la dimensión de tiempo asi:
La columna de Fecha en EntradasPorPersona corresponde a un número entero que cruza con la columna ID en la tabla Tiempo, la tabla de Tiempo se encuentra organizada y el ID es un autonumérico.
Calculo de tiempo entre pasos:
- Agregue la columna de fecha nuevamente, utilice la función RELATED()
FechaOK = RELATED(Tiempo[FechaHora])
- Agregue una nueva columna que devuelva la fecha y hora inmediatamente anterior
PasoAnterior = CALCULATE(MAX(EntradasPorPersona[FechaOK]), filter(EntradasPorPersona, EARLIER(EntradasPorPersona[Fecha])>EntradasPorPersona[Fecha]), filter(EntradasPorPersona, EARLIER(EntradasPorPersona[Persona])=EntradasPorPersona[Persona]))
- Agregue una columna con la diferencia en segundos entre estas 2 fechas
DuracionEntrePasos = DATEDIFF(EntradasPorPersona[PasoAnterior], EntradasPorPersona[FechaOK], SECOND)
Calculo de tiempo total
- Agregue una columna con la fecha inicial
PasoInicial = CALCULATE(min(EntradasPorPersona[FechaOK]), filter(EntradasPorPersona, EARLIER(EntradasPorPersona[Persona])=EntradasPorPersona[Persona]))
- Agregue una columna con la fecha final
PasoFinal = CALCULATE(MAX(EntradasPorPersona[FechaOK]), filter(EntradasPorPersona, EARLIER(EntradasPorPersona[Persona])=EntradasPorPersona[Persona]))
- Agregue una columna con la diferencia en segundos entre estas 2 fechas
DuracionTotalxPersona = DATEDIFF(EntradasPorPersona[PasoInicial], EntradasPorPersona[PasoFinal], SECOND)
Al final tendremos algo asi:
Hola buenas,
soy nuevo en esto y no sé como generar la tabla de tiempo que has usado en power bi..
Me puedes ayudar con esa función dax?
Gracias