es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

PowerBI – DAX (Encontrar el tiempo anterior en el área filtrada y devolver el valor de otra columna)

Estoy teniendo dificultades con una tarea en DAX.

Para lograrlo (columna amarilla):
Encuentre el valor anterior de fecha y hora en el ámbito filtrado y devuelva el valor de otra columna. Me gustaría tener un ID (MOVE_ID), en lugar de la hora del movimiento anterior, que funciona bien, como se muestra a continuación.

Ya logrado (columna verde – funcionando correctamente):
Pude devolver el valor en sí mismo (función MAX como se muestra a continuación). Estuve tratando de cambiar desde “ayer” para cumplir con mis requisitos, sin éxito. Supongo que es bastante trivial, ¡pero me falta habilidad 🙂

CALCULATE(
MAX(TABLE1[Move_TIME]),
FILTER(
ALL(TABLE1),
TABLE1[Move_EQ] = EARLIER(TABLE1[Move_EQ])
&& TABLE1[Move_EQ] <> BLANK()
&& [TABLE1Move_TIME] < EARLIER(TABLE1[Move_TIME])
)
)

Move_ID Move_EQ Move_TIME Move_TIME_OF_PREVIOUS_MOVE Move_ID_OF_PREVIOUS_MOVE
1 EQ1 2021-12-13 11:02:14 null
2 EQ1 2021-12-13 11:03:01 2021-12-13 11:02:14 1
3 EQ2 2021-12-13 11:15:33 null
4 EQ1 2021-12-13 13:12:00 2021-12-13 11:03:01 2
5 EQ2 2021-12-13 14:00:00 2021-12-13 11:15:33 3
6 EQ2 2021-12-13 14:01:00 2021-12-13 14:00:00 5
7 EQ1 2021-12-13 14:32:11 2021-12-13 13:12:00 4
8 EQ1 2021-12-13 14:44:54 2021-12-13 14:32:11 7
9 EQ1 2021-12-13 14:45:01 2021-12-13 14:44:54 8
10 EQ1 2021-12-13 15:01:09 2021-12-13 14:45:01 9

¡Gracias de antemano!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que quieres reemplazar el tiempo del movimiento anterior con su ID de movimiento correspondiente. Para lograr esto, debes reemplazar la función MAX que devuelve el tiempo con una función MAXX que devuelve el ID. Aquí está la fórmula DAX modificada:

    CALCULATE(
        MAXX(TABLE1,
            IF(
                [TABLE1Move_TIME] < EARLIER(TABLE1[Move_TIME]),
                [Move_ID],
                BLANK()
            )
        ),
        FILTER(
            ALL(TABLE1),
            TABLE1[Move_EQ] = EARLIER(TABLE1[Move_EQ]) &&
            TABLE1[Move_EQ] <> BLANK()
        )
    )
    

    Esta fórmula utiliza la función MAXX para iterar sobre todas las filas de TABLE1 para un Move_EQ específico y devuelve el Move_ID de la fila con el mayor Move_TIME que es menor que el Move_TIME de la fila actual. Si no hay tal fila, devuelve BLANK(). La función CALCULATE externa luego filtra las filas según Move_EQ y aplica la función MAXX para devolver el Move_ID deseado.

    ¡Espero que esto te ayude! Déjame saber si tienes alguna pregunta adicional.

Comments are closed.