PREVIOUS_VALUE

La función PREVIOUS_VALUE devuelve el resultado de evaluar una expresión de forma recursiva para las filas anteriores a la siendo considerada.

Sintaxis

PREVIOUS_VALUE(
    <expresión>
)

Parámetros
  • expresión: valor inicial a aplicar al cálculo.
Valor devuelto

La función PREVIOUS_VALUE devuelve un escalar.

Información adicional

Esta función puede resultar un tanto confusa, pues el resultado de implicarla en el cálculo de una expresión no afecta únicamente al argumento que se indique, sino a toda la expresión. El parámetro de la función, de hecho, no hace más que determinar el valor inicial (para la primera fila) del cálculo recursivo asociado. Para la segunda fila se considerará el resultado completo devuelto por la expresión en la fila anterior (valor que será devuelto por la función PREVIOUS_VALUE) y se completará el cálculo con el resto de operaciones definidas en la expresión. Dicho con otras palabras, la función PREVIOUS_VALUE va a devolver el resultado del argumento solo para la primera fila. Para las demás devolverá el resultado completo para la fila anterior de la expresión en la que se incluya la propia función.

Véanse ejemplos a continuación.

Ejemplos

Podríamos pensar -por el nombre de la función- que ésta devuelve el valor de la expresión indicada para la fila anterior. Por ejemplo, si partimos de una tabla que muestre los países y las ventas asociadas:

Función PREVIOUS_VALUE

...al agregar el siguiente campo calculado, podríamos esperar que para cada fila se mostrase el valor de ventas del país anterior:

Previous row =

PREVIOUS_VALUE(SUM([Amount]))

Función PREVIOUS_VALUE

Sin embargo vemos que se devuelve, simplemente, el valor inicial calculado para la expresión incluida como parámetro, 811.435€. Efectivamente, en la primera fila se va calcular el argumento de la función (SUM([Amount])) y como, en nuestro caso, el campo calculado no incluye ningún otro cálculo, sencillamente se devuelve dicho valor: la suma de ventas para Francia.

En la segunda fila solo tenemos -nuevamente- la función PREVIOUS_VALUE. En este caso, sin embargo, debemos obviar el parámetro que incluye y pensar que la función va a devolver el resultado de toda nuestra expresión (el campo calculado) para la fila anterior. En el ejemplo que estamos viendo la expresión está formada solamente por la función PREVIOUS_VALUE, por lo que se devuelve el valor anterior: 811.435€. Y así para el resto de filas, repitiéndose el mismo resultado en todas ellas.

Pero ¿qué ocurre si la expresión que define el campo calculado es más compleja? Por ejemplo:

Previous row =

PREVIOUS_VALUE(SUM([Amount])) + 1

El resultado ahora es el siguiente:

Función PREVIOUS_VALUE

Veamos cómo se realiza el cálculo fila por fila:

En la primera fila se considera el argumento de la función PREVIOUS_VALUE y se calcula, devolviendo el valor ya conocido de 811.435€. Y el campo calculado le añade 1, resultando un total de 811.436€.

En la segunda fila la función PREVIOUS_VALUE ignora el argumentro y devuelve, simplemente, el valor del campo calculado para la fila anterior (811.436€). A este resultado se le suma 1, resultando un total de 811.437€.

Y así sucesivamente: en la tercera fila, de nuevo, se ignora el valor del argumento y la función devuelve el valor del campo calculado para la fila anterior (811.437€), cifra a la que se suma 1, resultando 811.438€.

Como, salvo para la primera fila, el resultado de la función PREVIOUS_VALUE es el correspondiente a todo el campo calculado para la fila anterior- que incluye también el valor de la misma función para la fila anterior-, de ahí la recursividad.

Veamos un segundo ejemplo. Ahora el campo calculado es

Previous row =

PREVIOUS_VALUE(0) + SUM([Amount])

El resultado es el mostrado en la siguiente imagen:

Función PREVIOUS_VALUE

Repitamos el cálculo fila por fila:

En la primera fila -única en la que se considera el argumento de la función -como ya hemos visto- la función PREVIOUS_VALUE devuelve el resultado de calcular el argumento que recibe: 0. Y le suma el resultado de la expresión SUM([Amount]) que, para esta primera fila, coincide con las ventas de Francia, devolviéndose ésta cifra: 811.435€.

En la segunda fila la función PREVIOUS_VALUE ignora su argumento y devuelve el resultado de toda la expresión (todo el campo calculado) para la fila anterior (811.435€), a lo que suma el resultado de SUM([Amount]) para la fila siendo considerada, la de Italia. El resultado es la cifra de Francia más la de Italia: 1.487.470€.

Y así sucesivamente: para cada fila que no sea la primera, la función ignora el argumento y devuelve el resultado de todo el campo calculado para la fila anterior -resultado que se completa con el resto de operaciones definidas en el campo calculado-, lo que nos permite crear acumulados, por ejemplo.

Categoría
Cálculo de tablas
Enviado por admin el Mié, 16/10/2019 - 13:06