Diferencia entre dos fechas en dos filas en una matriz

Un usuario Pregunto ✅

_Andrés_

Hola, soy nuevo en PowerBI y tengo problemas para calcular la diferencia entre dos filas en una matriz.

Lo que quiero es una matriz que muestre la primera implementación exitosa y el intervalo entre la primera implementación exitosa de cada versión:

Versión Fecha de finalización más temprana Intervalo
2.12 19 junio 2019
2.13 12 julio 2019 23
3.0 10 agosto 2019 29
3.1 05 septiembre 2019 26

Puedo obtener fácilmente las dos primeras columnas, pero no puedo encontrar una medida para calcular la diferencia entre las fechas en las filas vecinas.

¿Es esto posible en PowerBI?

Gracias.

Andrés.

Una maqueta de los datos sin procesar es algo como esto (obviamente, los datos reales son más complicados, pero esto los reduce a esta pregunta exacta):

ID de tarea único estado de la tarea fecha completada Versión
15428 Éxito 19/06/2019 2.12
15585 Éxito 22/06/2019 2.12
15726 Éxito 26/06/2019 2.12
15771 Éxito 27/06/2019 2.12
15773 Éxito 27/06/2019 2.12
15784 Éxito 27/06/2019 2.12
15841 Éxito 28/06/2019 2.12
15843 Éxito 28/06/2019 2.12
15886 Éxito 29/06/2019 2.12
15895 Éxito 29/06/2019 2.12
16131 Éxito 07/04/2019 2.12
16137 Fallido 07/04/2019 2.12
16139 Fallido 07/04/2019 2.12
16142 Éxito 07/04/2019 2.12
16145 Éxito 07/04/2019 2.12
16247 Éxito 07/06/2019 2.12
16280 Fallido 07/06/2019 2.12
16281 Fallido 07/06/2019 2.12
16282 Fallido 07/06/2019 2.12
16284 Éxito 07/06/2019 2.12
16559 Éxito 07/12/2019 2.13
16611 Éxito 13/07/2019 2.13
16764 Éxito 17/07/2019 2.13
16846 Éxito 19/07/2019 2.13
16847 Éxito 19/07/2019 2.13
16854 Éxito 19/07/2019 2.13
16855 Éxito 19/07/2019 2.13
16890 Éxito 20/07/2019 2.13
16892 Éxito 20/07/2019 2.13
16900 Éxito 20/07/2019 2.13
16901 Éxito 20/07/2019 2.13
16942 Éxito 21/07/2019 2.13
16943 Éxito 21/07/2019 2.13
16945 Éxito 21/07/2019 2.13
16946 Éxito 21/07/2019 2.13
17800 Fallido 08/10/2019 3.0
17801 Fallido 08/10/2019 3.0
17802 Fallido 08/10/2019 3.0
17803 Éxito 08/10/2019 3.0
18056 Éxito 17/08/2019 3.0
18066 Éxito 17/08/2019 3.0
18107 Éxito 18/08/2019 3.0
18109 Éxito 18/08/2019 3.0
18205 Éxito 21/08/2019 3.0
18210 Éxito 21/08/2019 3.0
18211 Éxito 21/08/2019 3.0
18217 Éxito 21/08/2019 3.0
18252 Éxito 22/08/2019 3.0
18255 Éxito 22/08/2019 3.0
18256 Éxito 22/08/2019 3.0
18263 Éxito 22/08/2019 3.0
18264 Éxito 22/08/2019 3.0
18295 Éxito 23/08/2019 3.0
18298 Éxito 23/08/2019 3.0
18303 Éxito 23/08/2019 3.0
18408 Fallido 25/08/2019 3.0
18409 Éxito 25/08/2019 3.0
18874 Éxito 09/05/2019 3.1
18943 Éxito 07/09/2019 3.1
18944 Éxito 07/09/2019 3.1
18952 Éxito 07/09/2019 3.1
19109 Éxito 09/12/2019 3.1
19110 Éxito 09/12/2019 3.1
19111 Éxito 09/12/2019 3.1
19113 Éxito 09/12/2019 3.1
19117 Éxito 09/12/2019 3.1
19118 Fallido 09/12/2019 3.1
19119 Éxito 09/12/2019 3.1
19153 Éxito 13/09/2019 3.1
19184 Éxito 14/09/2019 3.1
19185 Éxito 14/09/2019 3.1
19187 Éxito 14/09/2019 3.1
19189 Éxito 14/09/2019 3.1
19193 Éxito 14/09/2019 3.1
19194 Éxito 14/09/2019 3.1
19225 Fallido 15/09/2019 3.1
19226 Fallido 15/09/2019 3.1
19228 Éxito 15/09/2019 3.1

Como si salieras del despliegue de Octopus.

Hola andrew_,

Supongamos que el tipo de datos de [Version] es numérico.

Tu necesitas un [Rank] columna en la tabla de origen (supongamos que es Table1).

Rank = RANKX(Table1,Table1[Version],,ASC,Dense)

Luego, cree algunas medidas como se muestra a continuación:

earliest date this version = MIN(Table1[Completed Date]) 
earliest date last version =
CALCULATE (
    MIN ( Table1[Completed Date] ),
    FILTER (
        ALL ( Table1 ),
        Table1[Rank]
            = MAX ( Table1[Rank] ) - 1
            && Table1[TaskState] = "Success"
    )
)

Interval =
SWITCH (
    TRUE (),
    [earliest date last version] < [earliest date this version], DATEDIFF ( [earliest date last version], [earliest date this version], DAY ),
    [earliest date last version] > [earliest date this version], -1
        * DATEDIFF ( [earliest date this version], [earliest date last version], DAY ),
    0
)

Agregue las columnas correspondientes a Matrix.

1 PNG

Atentamente,
Yuliana Gu

_Andrés_

Gracias @fhill: parece un enfoque interesante, pero no pude hacerlo funcionar. Sin embargo, tomaré nota de ello.

@ v-yulgu-msft: eso hace exactamente lo que quiero, muchas gracias por su ayuda. Solo necesitaba ajustar fecha más antigua última versión ligeramente para trabajar con mis datos reales.

Creo que una buena idea para investigar a continuación sería hacer que la medida reaccione a cualquier filtro que se aplique en lugar de codificarla en la medida.

Gracias.

Hola andrew_,

Supongamos que el tipo de datos de [Version] es numérico.

Tu necesitas un [Rank] columna en la tabla de origen (supongamos que es Table1).

Rank = RANKX(Table1,Table1[Version],,ASC,Dense)

Luego, cree algunas medidas como se muestra a continuación:

earliest date this version = MIN(Table1[Completed Date]) 
earliest date last version =
CALCULATE (
    MIN ( Table1[Completed Date] ),
    FILTER (
        ALL ( Table1 ),
        Table1[Rank]
            = MAX ( Table1[Rank] ) - 1
            && Table1[TaskState] = "Success"
    )
)

Interval =
SWITCH (
    TRUE (),
    [earliest date last version] < [earliest date this version], DATEDIFF ( [earliest date last version], [earliest date this version], DAY ),
    [earliest date last version] > [earliest date this version], -1
        * DATEDIFF ( [earliest date this version], [earliest date last version], DAY ),
    0
)

Agregue las columnas correspondientes a Matrix.

1 PNG

Atentamente,
Yuliana Gu

fhill

Mira si esto te da lo que necesitas… tuviste tu en blanco en la primera línea, pero mi lógica mueve el ‘desconocido’ a la última línea. Para hacer cálculos, tuve que elegir alguna ‘fecha’ para finalizar la lógica, así que puse el código allí para usar siempre MAX (Fecha) al final del archivo. Esto es necesario para ‘saltar’ la comparación de la versión final porque no hay versiones superiores para compararla también… También quiero agradecer este artículo IMPRESIONANTE que me ayudó a entender ANTERIOR/LISTA ANTERIOR para escribir esta ‘primera vez usar ‘código… http://tinylizard.com/dax-earlier-function/

Si alguien tiene una manera más fácil, ¡no dude en participar!

Para descanso

Grupos calculados:

Fin de la versión = IF (Tabla 1[Version] = MAX(Tabla1[Version]),MAX(Tabla1[Date]), // Averigüe qué hacer cuando alcancemos el número de versión MAX, ya que no hay nada más alto que usar para calcular una fecha más alta… He puesto la fecha MAX, pero tendrá que decidir cómo quiere manejar ¿¿¿esta???
CALCULAR(MIN (Tabla1[Date]), // Para números de versión no máximos, obtenga la fecha mínima antes de…
FILTRO(TODO(Tabla1), Tabla1[Date] > ANTES(Tabla1[Date])), // Una Fila MAYOR que la Fila actual para Fecha
FILTRO(Tabla1, Tabla1[Version] > ANTES(Tabla1[Version])), // Una fila mayor que la fila actual para la versión
FILTRO(Tabla1, Tabla1[TaskState] = «Éxito») // Eso es un ÉXITO
) -1 ) // Retrocede 1 día y cierra la declaración IF

Medidas:

Min_Date = MIN (Tabla1[Date])

Intervalo = DATEDIFF([Min_Date],PROMEDIO(Tabla1[End of Version]),DÍA)

Captura.PNGCaptura2.PNG

greg_deckler

Mire las funciones EARLIER y EARLIEST.

Deja un comentario

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