Calculo de tiempo entre pasos en Power BI

Publicado por

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).

EjemploDatos

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:

Datos Después del Pivot

Posteriormente se separo la información de los pasos de la dimensión de tiempo asi:

Modelo de datos

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:

  1. Agregue la columna de fecha nuevamente, utilice la función RELATED() FechaOK = RELATED(Tiempo[FechaHora])
  2. 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]))
  3. Agregue una columna con la diferencia en segundos entre estas 2 fechas DuracionEntrePasos = DATEDIFF(EntradasPorPersona[PasoAnterior], EntradasPorPersona[FechaOK], SECOND)

Calculo de tiempo total

  1. Agregue una columna con la fecha inicial PasoInicial = CALCULATE(min(EntradasPorPersona[FechaOK]), filter(EntradasPorPersona, EARLIER(EntradasPorPersona[Persona])=EntradasPorPersona[Persona]))
  2. Agregue una columna con la fecha final PasoFinal = CALCULATE(MAX(EntradasPorPersona[FechaOK]), filter(EntradasPorPersona, EARLIER(EntradasPorPersona[Persona])=EntradasPorPersona[Persona]))
  3. Agregue una columna con la diferencia en segundos entre estas 2 fechas DuracionTotalxPersona = DATEDIFF(EntradasPorPersona[PasoInicial], EntradasPorPersona[PasoFinal], SECOND)

Al final tendremos algo asi:

Resultado final

Descargue el archivo de ejemplo aquí

Un comentario

  1. 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

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *