Seleccionar trabajos en función de su historial.

Un usuario Pregunto ✅

JensHN

Hola,

mi modelo de datos contiene las dos tablas «Trabajos» e «Historia», conectadas por 1:n.

conexión.jpg

La tabla «Trabajos» tiene una columna simple de ID y nombre.

La tabla «Historial» tiene una ID, una ID de trabajo (basada en la tabla de trabajos), un estado (cada estado tiene un número específico) y una marca de tiempo cuando el trabajo cambió de estado.

tabla-de-trabajos.jpghistoria-tabla.jpg

Mi problema es, ¿cómo selecciono trabajos en función de su historial?

Por ejemplo:

Quiero saber cuántos trabajos pasaron del estado 1 al 3 sin el 2. En los datos de muestra solo está el trabajo C.

¿Cuántos trabajos están en el estado 3 y no han estado en el estado 2 en ningún momento anterior? En los datos de muestra no es Trabajo.

JensHN

En respuesta a v-cherch-msft

Hola @v-cherch-msft

gracias por tu rápida repetición.

Su solución mostrada funciona bien para los dos escenarios mencionados. Como siempre, lamentablemente la realidad es mucho más compleja. Los requisitos para filtrar un escenario de historial específico pueden cambiar diariamente. Crear una fórmula DAX es demasiado complejo para el usuario final.

Mi idea es crear un archivo calculado con los números de estado. En la visualización, el usuario final puede aplicar un simple «filtro de contenido» en este campo.

Jobhistory = CONCATENATEX(RELATEDTABLE(History); History[Status];)

historia laboral.jpg

Hola @JensHN

Puede crear medidas para obtener los valores. Por ejemplo:

NextStatus =
CALCULATE (
    MAX ( History[Status] ),
    FILTER (
        ALLEXCEPT ( History, History[Job ID] ),
        History[ID]
            = MAX ( History[ID] ) + 1
    )
)
Status1-3 = COUNTROWS(FILTER(History,History[Status]=1&&[NextStatus]=3)) //how many jobs went from status 1 to 3 without 2
HasStatus2 =
VAR a =
    MAXX ( FILTER ( ALL ( History ), History[Status] = 3 ), History[ID] )
VAR b =
    CALCULATETABLE (
        VALUES ( History[Status] ),
        FILTER ( History, History[ID] < a )
    )
RETURN
    IF ( 2 IN b, 1 )
InStatus3 =
VAR a =
    MAXX ( FILTER ( ALL ( History ), History[Status] = 3 ), History[ID] )
RETURN
    IF (
        [HasStatus2] = BLANK (),
        CALCULATE ( DISTINCTCOUNT ( Jobs[Name] ), FILTER ( History, History[ID] < a ) )
    )  //How many jobs are in status 3 and have not been status 2 any time before

Saludos,

cherie

JensHN

En respuesta a v-cherch-msft

Hola @v-cherch-msft

gracias por tu rápida repetición.

Su solución mostrada funciona bien para los dos escenarios mencionados. Como siempre, lamentablemente la realidad es mucho más compleja. Los requisitos para filtrar un escenario de historial específico pueden cambiar diariamente. Crear una fórmula DAX es demasiado complejo para el usuario final.

Mi idea es crear un archivo calculado con los números de estado. En la visualización, el usuario final puede aplicar un simple «filtro de contenido» en este campo.

Jobhistory = CONCATENATEX(RELATEDTABLE(History); History[Status];)

historia laboral.jpg

Deja un comentario

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