Iai, tudo bom?
Interessante os pontos que levantou, acredito que na minha visão seria mesclar tudo que vc indagou até o momento e fazer caching.
Explicando melhor meu pensamento, se eu entendi bem, o problema gira em torno das classificações dos gastos, então você poderia fazer um endpoint no backend que retorna esses dados e adicionar um query para filtrar como vc deseja e a depender da variação desses dados fazer um caching do lado do servidor, outra possibilidade seria construir o mesmo endpoint e fazer o caching do lado do cliente, caso não queria utilizar muito recursos do usuário você faz caching dos dados que são de fato relevante pro cliente, talvez gastos de uma semana ou um mês.
Enfim, otimos pontos para discussão, queria escrever mais coisa, mas a pausa do trabalho ta acabando hehe.