En este escenario partimos de una lista de localizaciones ("Geography") en la que se incluye el nombre de la ciudad y el país al que pertenece (entre otros datos):
...y una tabla de ventas ("Movements") en la que se incluye la fecha de venta, la ciudad a la que está asociada y el importe de venta:
Ambas tablas están relacionadas por el campo Geography Id:
El objetivo es añadir una columna calculada a la tabla de localizaciones en la que se muestren las ventas totales del país al que corresponde el registro.
Al crear la columna calculada se va a recorrer la tabla de localizaciones creándose el contexto de fila correspondiente. Podemos acceder al valor del campo Country usando la función EARLIER, de forma que podríamos seleccionar -para cada fila recorrida- el subconjunto de la tabla de localizaciones que incluye ciudades del país en cuestión. Es decir:
FILTER(
Geography;
Geography[Country] = EARLIER(Geography[Country])
)
...devolvería este subconjunto. A su vez, este subconjunto de ciudades nos permitiría filtrar la tabla de ventas mediante la función CALCULATETABLE, agregando como filtro el subconjunto anterior:
CALCULATETABLE(
Movements;
FILTER(
Geography;
Geography[Country] = EARLIER(Geography[Country])
)
);
Por último, no quedaría más que recorrer esta tabla (subconjunto de la tabla de ventas) sumando el campo Sales:
Ventas del país =
SUMX(
CALCULATETABLE(
Movements;
FILTER(
Geography;
Geography[Country] = EARLIER(Geography[Country])
)
);
Movements[Sales]
)
El resultado sería el siguiente:
Podemos confirmar que las cifras son las correctas llevando a una visualización tipo tabla la lista de países y el campo Sales de la tabla de ventas: