Ayuda de DAX: necesita buscar un valor de fila anterior, siguiendo un criterio

Un usuario Pregunto ✅

Necesito ayuda en dos fórmulas DAX que aportarían un valor de fila anterior para una determinada columna en función de un criterio de filtro.

La formula seria para PrevFinish = ………………………………….

Consideraría y repetiría el Finish_Downtime para la primera columna de índice [ID], obedeciendo los criterios de que pertenece a la misma MACHINE_ID.

También podría resolverse si tenemos una fórmula para el Rows_Above = ………………..

¿Cuál es la diferencia de identificador entre el identificador de fila real y la primera fila anterior que también pertenece al mismo Machine_ID

identificación IDENTIFICADOR DE MÁQUINA Finalizar_tiempo de inactividad PrevTerminar Filas_Arriba
2890 1 27/05/2021 10:54 27/5/2021 6:28
2891 2 27/5/2021 9:59 27/05/2021 10:42
2892 2 27/05/2021 10:49 27/5/2021 9:59 -1
2893 2 27/05/2021 11:04 27/05/2021 10:49 -1
2894 1 27/05/2021 11:23 27/05/2021 10:54 -4
2895 2 27/05/2021 11:43 27/05/2021 11:04 -2
2896 2 27/05/2021 12:39 27/05/2021 11:43 -1
2897 1 27/05/2021 14:30 27/05/2021 11:23 -3
2899 2 27/05/2021 14:25 27/05/2021 12:39 -2

Gracias por cualquier ayuda.

Allí, @elmorlc

Por favor, compruebe lo siguiente para crear nuevas medidas.

Imagen2.png

Medida de aleta anterior =
Clasificación VAR por tiempo de llegada =
CLASIFICACIÓNX (
TODO SALVO ( ‘Tabla’, ‘Tabla'[MACHINE_ID] ),
CALCULAR ( MAX ( ‘Tabla'[Finish_Dowtime] ) ),
,
descripción
)
VAR tiempo anterior =
CALCULAR (
MAX (‘Tabla'[Finish_Dowtime] ),
FILTRO (
TODO SALVO ( ‘Tabla’, ‘Tabla'[MACHINE_ID] ),
CLASIFICACIÓNX (
TODO SALVO ( ‘Tabla’, ‘Tabla'[MACHINE_ID] ),
CALCULAR ( MAX ( ‘Tabla'[Finish_Dowtime] ) ),
,
descripción
) > clasificación por hora de finalización
)
)
devolución
SI ( SE FILTRA ( ‘Tabla'[ID] ), tiempo anterior )

Filas por encima de la medida =
ID actual de VAR =
MAX (‘Tabla'[ID] )
Clasificación VAR por tiempo de llegada =
CLASIFICACIÓNX (
TODO SALVO ( ‘Tabla’, ‘Tabla'[MACHINE_ID] ),
CALCULAR ( MAX ( ‘Tabla'[Finish_Dowtime] ) ),
,
descripción
)
VAR prevID =
CALCULAR (
MAX (‘Tabla'[ID] ),
FILTRO (
TODO SALVO ( ‘Tabla’, ‘Tabla'[MACHINE_ID] ),
CLASIFICACIÓNX (
TODO SALVO ( ‘Tabla’, ‘Tabla'[MACHINE_ID] ),
CALCULAR ( MAX ( ‘Tabla'[Finish_Dowtime] ) ),
,
descripción
) > clasificación por hora de finalización
)
)
devolución
SI ( SE FILTRA ( ‘Tabla'[ID] ) &&&prevID > 0, prevID – currentID, «» )
https://www.dropbox.com/s/sqai7p5etafwysg/elmorlc.pbix?dl=0

Hola, Mi nombre es Jihwan Kim.


Si este post ayuda, entonces por favor considere aceptarlo como la solución para ayudar a otros miembros a encontrarlo más rápido, y dar un gran pulgar hacia arriba.


Linkedin: linkedin.com/in/jihwankim1975/

Twitter: twitter.com/Jihwan_JHKIM

En respuesta a Syndicate_Admin

La solución funciona Jihwan, pero vienen como una medida- ¿qué debo cambiar en esas mismas fórmulas DAX para que funcionen como una nueva columna y no como una medida?

saludos

leonardo

En respuesta a Syndicate_Admin

Allí, @elmorlc

Por favor, compruebe lo siguiente.

Imagen1.png

PrevFinalizar CC =
VAR currentfinishtime=»Tabla»[Finish_Dowtime]
VAR prevfinishtime =
CALCULAR (
MAX (‘Tabla'[Finish_Dowtime] ),
FILTRO (
TODO SALVO ( ‘Tabla’, ‘Tabla'[MACHINE_ID] ),
‘Tabla'[Finish_Dowtime] < tiempo final real
)
)
devolución
prevfinishtime
Filas_Arriba CC =
VAR currentfinishtime=»Tabla»[Finish_Dowtime]
VAR prevfinishtime =
CALCULAR (
MAX (‘Tabla'[Finish_Dowtime] ),
FILTRO (
TODO SALVO ( ‘Tabla’, ‘Tabla'[MACHINE_ID] ),
‘Tabla'[Finish_Dowtime] < tiempo final actual
)
)
VAR prevID =
CALCULAR (
MAX (‘Tabla'[ID] ),
FILTRO (
TODO SALVO ( ‘Tabla’, ‘Tabla'[MACHINE_ID] ),
‘Tabla'[Finish_Dowtime] = tiempo de finalización anterior
)
)
devolución
IF ( NO ESTÁ EN BLANCO ( ‘Tabla'[PrevFinish CC] ), prevID – ‘Tabla'[ID] )
https://www.dropbox.com/s/sqai7p5etafwysg/elmorlc.pbix?dl=0

Allí, @elmorlc

Por favor, compruebe lo siguiente para crear nuevas medidas.

Imagen2.png

Medida de aleta anterior =
Clasificación VAR por tiempo de llegada =
CLASIFICACIÓNX (
TODO SALVO ( ‘Tabla’, ‘Tabla'[MACHINE_ID] ),
CALCULAR ( MAX ( ‘Tabla'[Finish_Dowtime] ) ),
,
descripción
)
VAR tiempo anterior =
CALCULAR (
MAX (‘Tabla'[Finish_Dowtime] ),
FILTRO (
TODO SALVO ( ‘Tabla’, ‘Tabla'[MACHINE_ID] ),
CLASIFICACIÓNX (
TODO SALVO ( ‘Tabla’, ‘Tabla'[MACHINE_ID] ),
CALCULAR ( MAX ( ‘Tabla'[Finish_Dowtime] ) ),
,
descripción
) > clasificación por hora de finalización
)
)
devolución
SI ( SE FILTRA ( ‘Tabla'[ID] ), tiempo anterior )

Filas por encima de la medida =
ID actual de VAR =
MAX (‘Tabla'[ID] )
Clasificación VAR por tiempo de llegada =
CLASIFICACIÓNX (
TODO SALVO ( ‘Tabla’, ‘Tabla'[MACHINE_ID] ),
CALCULAR ( MAX ( ‘Tabla'[Finish_Dowtime] ) ),
,
descripción
)
VAR prevID =
CALCULAR (
MAX (‘Tabla'[ID] ),
FILTRO (
TODO SALVO ( ‘Tabla’, ‘Tabla'[MACHINE_ID] ),
CLASIFICACIÓNX (
TODO SALVO ( ‘Tabla’, ‘Tabla'[MACHINE_ID] ),
CALCULAR ( MAX ( ‘Tabla'[Finish_Dowtime] ) ),
,
descripción
) > clasificación por hora de finalización
)
)
devolución
SI ( SE FILTRA ( ‘Tabla'[ID] ) &&&prevID > 0, prevID – currentID, «» )
https://www.dropbox.com/s/sqai7p5etafwysg/elmorlc.pbix?dl=0

Hola, Mi nombre es Jihwan Kim.


Si este post ayuda, entonces por favor considere aceptarlo como la solución para ayudar a otros miembros a encontrarlo más rápido, y dar un gran pulgar hacia arriba.


Linkedin: linkedin.com/in/jihwankim1975/

Twitter: twitter.com/Jihwan_JHKIM

En respuesta a Syndicate_Admin

La solución funciona Jihwan, pero vienen como una medida- ¿qué debo cambiar en esas mismas fórmulas DAX para que funcionen como una nueva columna y no como una medida?

saludos

leonardo

En respuesta a Syndicate_Admin

Allí, @elmorlc

Por favor, compruebe lo siguiente.

Imagen1.png

PrevFinalizar CC =
VAR currentfinishtime=»Tabla»[Finish_Dowtime]
VAR prevfinishtime =
CALCULAR (
MAX (‘Tabla'[Finish_Dowtime] ),
FILTRO (
TODO SALVO ( ‘Tabla’, ‘Tabla'[MACHINE_ID] ),
‘Tabla'[Finish_Dowtime] < tiempo final real
)
)
devolución
prevfinishtime
Filas_Arriba CC =
VAR currentfinishtime=»Tabla»[Finish_Dowtime]
VAR prevfinishtime =
CALCULAR (
MAX (‘Tabla'[Finish_Dowtime] ),
FILTRO (
TODO SALVO ( ‘Tabla’, ‘Tabla'[MACHINE_ID] ),
‘Tabla'[Finish_Dowtime]
)
)
VAR prevID =
CALCULAR (
MAX (‘Tabla'[ID] ),
FILTRO (
TODO SALVO ( ‘Tabla’, ‘Tabla'[MACHINE_ID] ),
‘Tabla'[Finish_Dowtime] = tiempo de finalización anterior
)
)
devolución
IF ( NO ESTÁ EN BLANCO ( ‘Tabla'[PrevFinish CC] ), prevID – ‘Tabla'[ID] )
https://www.dropbox.com/s/sqai7p5etafwysg/elmorlc.pbix?dl=0

En respuesta a Syndicate_Admin

jihwan,
Funcionó bien, la mayoría de mis parámetros están en Columnas y las fórmulas con medidas y Columnas siempre pueden ser un truco.

Que tengas una buena semana,

leonardo

Deja un comentario

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