Cálculo de las ventas entre dos fechas

En este escenario partimos de una tabla Sales conteniendo un campo Amount con las cifras de ventas, y un campo Order Date conteniendo la fecha de venta. El objetivo es crear una función de consulta que sume las ventas entre dos fechas que se pasen como argumentos.

El primer paso será filtrar la tabla Sales de forma que solo se consideren aquellos registros en los que el campo Order Date se encuentre entre las dos fechas que pasemos a la función. Para esto podemos usar la función Table.SelectRows que nos permite imponer una condición y filtrar la tabla de forma que solo se devuelvan aquellos registros que la cumplan. Su sintaxis es la siguiente:

Table.SelectRows(
    table as table,
    condition as function
) as table

La condición debe ser una función que devuelva un booleano. En nuestro caso, la condición a satisfacer es (si suponemos que los parámetros de la función que reciben las fechas de comienzo y finalización son startDate y endDate respectivamente):

[Order Date] >= startDate and [Order Date] <= endDate

por lo que podríamos escribir ya una primera versión de nuestra consulta (todavía sin devolver la suma de ventas):

let
    startDate = #date(2016, 6, 1),
    endDate = #date(2016, 6, 30),
    FilteredRows = Table.SelectRows(Sales, each [Order Date] >= startDate and [Order Date] <= endDate)
in
    FilteredRows
Cálculo de las ventas entre dos fechas

Se han fijado como fechas el 1 y el 30 de junio de 2016 solo para probar el código.

Vemos que los 18 registros devueltos contienen en la columna Order Date una fecha correspondiente a junio de 2016.

Una vez filtrada la tabla, deberemos seleccionar la columna Amount, lo que podemos conseguir extrayendo la columna en cuestión con la función Table.Column, que devuelve la columna que se indique con formato de lista:

let
    startDate = #date(2016, 6, 1),
    endDate = #date(2016, 6, 30),
    FilteredRows = Table.SelectRows(Sales, each [Order Date] >= startDate and [Order Date] <= endDate),
    Amount = Table.Column(FilteredRows, "Amount")
in
    Amount
Función Table.Column

Por último, para sumar los valores de la lista la función adecuada es List.Sum:

let
    startDate = #date(2016, 6, 1),
    endDate = #date(2016, 6, 30),
    FilteredRows = Table.SelectRows(Sales, each [Order Date] >= startDate and [Order Date] <= endDate),
    Amount = Table.Column(FilteredRows, "Amount"),
    TotalSales = List.Sum(Amount)
in
    TotalSales
Función List.Sum

Si queremos convertir esta consulta en una función de consulta, añadimos la cabecera adecuada y eliminamos las dos primeras fórmulas de paso que inicializan las fechas:

(startDate as date, endDate as date) as number =>
let
    FilteredRows = Table.SelectRows(Sales, each [Order Date] >= startDate and [Order Date] <= endDate),
    Amount = Table.Column(FilteredRows, "Amount"),
    TotalSales = List.Sum(Amount)
in
    TotalSales
Cálculo de las ventas entre dos fechas

Damos a la consulta un nombre adecuado (SalesInPeriod, por ejemplo) y la invocamos para probarla:

Cálculo de las ventas entre dos fechas
Submitted by admin on Wed, 02/01/2023 - 09:58