Explicación de la fórmula EARLIER

Un usuario Pregunto ✅

Anónimo

Estimados,

He leído sobre la función anterior pero no me parece que tenga sentido.
Si es posible, ¿podría alguien dar una explicación aclaratoria con un ejemplo?

Muchas gracias

sreenathv

Hola,

Intentaré explicar el propósito de la función ANTERIORES usando un ejemplo.

Supongamos que tenemos la siguiente tabla.

Nombre de la tabla: USUARIOS

Usuario

País

A

X

B

X

C

X

D

Y

mi

Y

F

Z

Si necesitamos una columna calculada que proporcione el recuento de otros usuarios del mismo país contra cada usuario, podemos usar la función ANTES.

UsersFromSameCountry =
SUMX ( Users, IF ( EARLIER ( Users[Country] ) = Users[Country], 1, 0 ) )

SUMX iterará sobre la tabla «Usuarios» creando un contexto de fila para cada fila de la tabla. es decir, iterará sobre el registro de cada usuario de la A a la F.

Aunque parece que no hemos creado ningún contexto de fila anidada en la fórmula mencionada anteriormente, en realidad, siempre que una columna calculada se define usando una fórmula DAX, la definición de columna en sí crea un contexto de fila para evaluar un valor diferente para cada fila usando el misma fórmula. Eso significa que, cuando definimos la columna calculada, la fórmula se ejecuta para cada fila de la tabla. Como resultado, existe un contexto de fila anidado. Uno creado por la definición de columna calculada y otro creado por la función de agregación – SUMX.

La tabla Usuarios tiene 6 pares de combinaciones Usuario-País AX, BX, CX, DY, EY, FZ y, por lo tanto, para cada par, el SUMX iterará sobre la tabla Usuarios para contar el número de usuarios del mismo país. Para el primer par, la condición IF se ejecuta 6 veces.

Usuario

País

Usuario de iteración

País iterado

SI Condición

SI Resultado de la condición

A

X

A

X

X = X?

1

A

X

B

X

X = X?

1

A

X

C

X

X = X?

1

A

X

D

Y

X = Y?

0

A

X

mi

Y

X = Y?

0

A

X

F

Z

X = Z?

0

Resultado SUMX

3

El resultado de SUMX para el contexto de la primera fila (par AZ) será 3. De manera similar, SUMX iterará sobre la tabla Usuarios 5 veces más para cada uno de los pares restantes Usuario-País.

Si observa el ejemplo dado en la tabla anterior, la condición SI es comparar los Usuarios[Country] campo consigo mismo, pero solo varía el contexto de la fila.

Si hubiéramos escrito la fórmula como …

SUMX ( Users, IF ( Users[Country] = Users[Country], 1, 0 ) )

Entonces, la condición SI siempre será verdadera y el resultado de SUMX siempre será 6 para cada fila de la tabla.

Escribiendo la fórmula como

SUMX ( Users, IF ( EARLIER ( Users[Country] ) = Users[Country], 1, 0 ) )

Podremos comparar el valor de los Usuarios[Country] campo de la iteración de SUMX con cada fila de la tabla (contexto de fila creado por la definición de columna calculada) y, por lo tanto, da el resultado correcto de la siguiente manera …

Usuario

País

UsersFromSameCountry

A

X

3

B

X

3

C

X

3

D

Y

2

mi

Y

2

F

Z

1

En resumen, EARLIER se usa para referirse al contexto de fila exterior en el caso de un contexto de fila anidada. El anidamiento de contextos de fila se puede realizar escribiendo explícitamente un código DAX por el usuario o por el motor DAX cuando se utiliza una función agregada en la definición de columna calculada.

Ola_S

= SUMX(Users, - -(EARLIER(Users[Country])=Users[Country]))

Nota: – – es un truco de Power BI, basado en el antiguo – truco de Excel.

sreenathv

Hola,

Intentaré explicar el propósito de la función ANTERIORES usando un ejemplo.

Supongamos que tenemos la siguiente tabla.

Nombre de la tabla: USUARIOS

Usuario

País

A

X

B

X

C

X

D

Y

mi

Y

F

Z

Si necesitamos una columna calculada que proporcione el recuento de otros usuarios del mismo país contra cada usuario, podemos usar la función ANTES.

UsersFromSameCountry =
SUMX ( Users, IF ( EARLIER ( Users[Country] ) = Users[Country], 1, 0 ) )

SUMX iterará sobre la tabla «Usuarios» creando un contexto de fila para cada fila de la tabla. es decir, iterará sobre el registro de cada usuario de la A a la F.

Aunque parece que no hemos creado ningún contexto de fila anidada en la fórmula mencionada anteriormente, en realidad, siempre que una columna calculada se define usando una fórmula DAX, la definición de columna en sí crea un contexto de fila para evaluar un valor diferente para cada fila usando el misma fórmula. Eso significa que, cuando definimos la columna calculada, la fórmula se ejecuta para cada fila de la tabla. Como resultado, existe un contexto de fila anidado. Uno creado por la definición de columna calculada y otro creado por la función de agregación – SUMX.

La tabla Usuarios tiene 6 pares de combinaciones Usuario-País AX, BX, CX, DY, EY, FZ y, por lo tanto, para cada par, el SUMX iterará sobre la tabla Usuarios para contar el número de usuarios del mismo país. Para el primer par, la condición IF se ejecuta 6 veces.

Usuario

País

Usuario de iteración

País iterado

SI Condición

SI Resultado de la condición

A

X

A

X

X = X?

1

A

X

B

X

X = X?

1

A

X

C

X

X = X?

1

A

X

D

Y

X = Y?

0

A

X

mi

Y

X = Y?

0

A

X

F

Z

X = Z?

0

Resultado SUMX

3

El resultado de SUMX para el contexto de la primera fila (par AZ) será 3. De manera similar, SUMX iterará sobre la tabla Usuarios 5 veces más para cada uno de los pares restantes Usuario-País.

Si observa el ejemplo de la tabla anterior, la condición SI está comparando los Usuarios[Country] campo consigo mismo, pero solo varía el contexto de la fila.

Si hubiéramos escrito la fórmula como …

SUMX ( Users, IF ( Users[Country] = Users[Country], 1, 0 ) )

Entonces, la condición SI siempre será verdadera y el resultado de SUMX siempre será 6 para cada fila de la tabla.

Escribiendo la fórmula como

SUMX ( Users, IF ( EARLIER ( Users[Country] ) = Users[Country], 1, 0 ) )

Podremos comparar el valor de los Usuarios[Country] campo de la iteración de SUMX con cada fila de la tabla (contexto de fila creado por la definición de columna calculada) y, por lo tanto, da el resultado correcto de la siguiente manera …

Usuario

País

UsersFromSameCountry

A

X

3

B

X

3

C

X

3

D

Y

2

mi

Y

2

F

Z

1

En resumen, EARLIER se usa para referirse al contexto de fila exterior en caso de un contexto de fila anidada. El anidamiento de contextos de fila se puede realizar escribiendo explícitamente un código DAX por el usuario o por el motor DAX cuando se utiliza una función agregada en la definición de columna calculada.

acaryasin01

En respuesta a sreenathv

Hola @sreenathv

Es una explicación muy útil e importante. Muchas gracias.

Solo me pregunto,

Si tengo una tabla de datos como la siguiente,

¿Cómo puedo crear una nueva columna (debajo de la COLUMNA DESEADA) que se calcula por Valor agrupado por Compnay como promedio?

Escribí este dax pero devolvió el promedio de página ¡¿no ?!

¿Cómo se puede obtener el valor medio de cada página? el valor de retorno debe estar en cada una de sus filas.

Promedio del valor de la misma página = PROMEDIO(AEX , SI(MÁS TEMPRANO(AEX[pageno]) = AEX[pageno] , 1 , 0))
Compnay Página No Valor COLUMNA DESEADA
A 2 30 70
A 2 40 70
B 2 10 100
B 2 40 100
B 3 50 100
C 1 10 60
C 1 20 60
C 3 20 60
C 3 10 60

TomMartens

Oye,

Hubiera sido útil si hubiera proporcionado lo que ha estado leyendo hasta ahora.

Básicamente, EARLIER proporciona acceso a valores de un determinado contexto de filtro de forma predeterminada, el contexto de filtro más interno. Esto puede resultar muy útil si existen contextos de filtro anidados.

Hoy en día, recomendaría usar variables en lugar de usar EARLIER.

Este artículo explica por qué utilizar variables en lugar de ANTES:

https://www.sqlbi.com/articles/variables-in-dax/

Saludos,

Tomás

MFelix

Hola @Anónimo,

Consulte los dos enlaces a continuación con explicaciones y ejemplos de la sintaxis EARLIER.

https://exceleratorbi.com.au/earlier-vs-earliest-dax/

https://powerpivotpro.com/2012/03/the-correct-usage-of-earlier/

Saludos,

MFelix

Deja un comentario

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