Función EARLIER
Devuelve el valor actual de la columna especificada en un paso de la evaluación exterior de la columna mencionada.
EARLIER es útil para los cálculos anidados en que se desea usar un cierto valor como entrada para generar cálculos basados en esa entrada. En Microsoft Excel, estos cálculos solo se pueden realizar dentro del contexto de la fila actual; sin embargo, en DAX el valor de la entrada se puede almacenar y, a continuación, realizar el cálculo con los datos de la tabla completa.
EARLIER se usa principalmente en el contexto de columnas calculadas.
Sintaxis
EARLIER(<column>, <number>)
Parámetros
Término |
Definición |
---|---|
column |
Columna o expresión que se resuelve en una columna. |
num |
(Opcional) Número positivo para el paso de la evaluación exterior. El siguiente nivel de evaluación exterior se representa mediante 1; dos niveles exteriores se representan mediante 2, etc. Cuando se omite, el valor predeterminado es 1. |
Valor de propiedad y valor devuelto
Valor actual de la fila, de la columna, en el número de pasos de la evaluación exterior.
Excepciones
Descripción de los errores
Comentarios
EARLIER es correcta si existe un contexto de fila anterior al principio del recorrido de tabla. En caso contrario, devuelve un error.
El rendimiento de EARLIER puede ser lento porque, en teoría, tendrá que realizar un número de operaciones cercano al número total de filas (de la columna) multiplicado por el mismo número (en función de la sintaxis de la expresión). Por ejemplo, si hay 10 filas en la columna, se necesitarán aproximadamente unas 100 operaciones; si hay 100 filas, será necesario realizar unas 10.000 operaciones.
[!NOTA]
En la práctica, el motor analítico en memoria xVelocity (VertiPaq) realiza las optimizaciones para reducir el número real de cálculos, pero debería tener cuidado al crear fórmulas que impliquen recursividad.
Ejemplo
Para describir el uso de EARLIER, es necesario generar una situación de ejemplo que calcule un valor de rango y, a continuación, usar ese valor de rango en otros cálculos.
El ejemplo siguiente está basado en esta tabla simple, ProductSubcategory, que muestra las ventas totales para cada ProductSubcategory.
A continuación se muestra la tabla final, que incluye la columna de clasificación.
ProductSubcategoryKey |
EnglishProductSubcategoryName |
TotalSubcategorySales |
SubcategoryRanking |
---|---|---|---|
18 |
Bib-Shorts |
$156,167.88 |
18 |
26 |
Bike Racks |
$220,720.70 |
14 |
27 |
Bike Stands |
$35,628.69 |
30 |
28 |
Bottles and Cages |
$59,342.43 |
24 |
5 |
Bottom Brackets |
$48,643.47 |
27 |
6 |
Brakes |
$62,113.16 |
23 |
19 |
Caps |
$47,934.54 |
28 |
7 |
Chains |
$8,847.08 |
35 |
29 |
Cleaners |
$16,882.62 |
32 |
8 |
Cranksets |
$191,522.09 |
15 |
9 |
Derailleurs |
$64,965.33 |
22 |
30 |
Fenders |
$41,974.10 |
29 |
10 |
Forks |
$74,727.66 |
21 |
20 |
Gloves |
$228,353.58 |
12 |
4 |
Handlebars |
$163,257.06 |
17 |
11 |
Headsets |
$57,659.99 |
25 |
31 |
Helmets |
$451,192.31 |
9 |
32 |
Hydration Packs |
$96,893.78 |
20 |
21 |
Jerseys |
$699,429.78 |
7 |
33 |
Lights |
|
36 |
34 |
Locks |
$15,059.47 |
33 |
1 |
Mountain Bikes |
$34,305,864.29 |
2 |
12 |
Mountain Frames |
$4,511,170.68 |
4 |
35 |
Panniers |
|
36 |
13 |
Pedals |
$140,422.20 |
19 |
36 |
Pumps |
$12,695.18 |
34 |
2 |
Road Bikes |
$40,551,696.34 |
1 |
14 |
Road Frames |
$3,636,398.71 |
5 |
15 |
Saddles |
$52,526.47 |
26 |
22 |
Shorts |
$385,707.80 |
10 |
23 |
Socks |
$28,337.85 |
31 |
24 |
Tights |
$189,179.37 |
16 |
37 |
Tires and Tubes |
$224,832.81 |
13 |
3 |
Touring Bikes |
$13,334,864.18 |
3 |
16 |
Touring Frames |
$1,545,344.02 |
6 |
25 |
Vests |
$240,990.04 |
11 |
17 |
Wheels |
$648,240.04 |
8 |
Crear un valor de rango
Una manera de obtener un valor de rango para un valor determinado en una fila consiste en contar el número de filas de la misma tabla que tienen un valor superior (o inferior) al valor que se está comparando. Esta técnica devuelve un valor en blanco o cero para el valor máximo de la tabla, mientras que los valores iguales tendrán el mismo valor de rango, y el valor siguiente (después de los valores iguales) tendrá un valor de rango no consecutivo. Vea el ejemplo siguiente.
Una nueva columna calculada, SubCategorySalesRanking, se crea mediante la fórmula siguiente.
= COUNTROWS(FILTER(ProductSubcategory, EARLIER(ProductSubcategory[TotalSubcategorySales])<ProductSubcategory[TotalSubcategorySales]))+1
Los pasos siguientes describen el método de cálculo con más detalle.
La función EARLIER obtiene el valor de TotalSubcategorySales para la fila actual de la tabla. En este caso, puesto que el proceso se está iniciando, es la primera fila de la tabla
EARLIER([TotalSubcategorySales]) se evalúa en 156.167,88 dólares, la fila actual del bucle exterior.
La función FILTER devuelve ahora una tabla en la que todas las filas tienen un valor de TotalSubcategorySales superior a 156.167,88 dólares (que es el valor actual de EARLIER).
La función COUNTROWS cuenta las filas de la tabla filtrada y asigna ese valor a la nueva columna calculada en la fila actual más 1. La suma de 1 es necesaria para evitar que el valor de rango superior se convierta en un valor en blanco.
La fórmula de la columna calculada se desplaza a la siguiente fila y repite los pasos 1 a 4. Estos pasos se repiten hasta que se llega al final de la tabla.
La función EARLIER siempre obtendrá el valor de la columna antes que la operación de tabla actual. Si necesita obtener un valor del bucle anterior, establezca el segundo argumento en 2.