nallwhy
I’m a bit stuck on how to correctly use aggregates on a resource.
Let’s say I have the following resource:
defmodule MyApp.Invoice do
use Ash.Resource
attributes do
uuid_v7_primary_key :id
attribute :amount, :decimal, allow_nil?: false
attribute :settled, :boolean, default: false, allow_nil?: false
end
end
I want to get the sum of all amounts where `settled is false, so I defined this aggregate:
aggregates do
sum :total_amount, [], :amount do
filter expr(not settled)
end
end
But:
- I’m not sure what the proper way to fetch this aggregate is.
- When I tried using
Ash.aggregate(MyApp.Invoice, {:total_amount, :sum}), it didn’t seem to apply the filter.
I’m not sure if this is a bug or if I’m misunderstanding how it’s supposed to work.
I only shared the relevant code here, but if it helps, I can create a minimal repo to reproduce it.
Thanks in advance!
Trending in Questions
Hello!
Suppose you are building workflow (order / task / payment) processing system with the following requirements:
Each workflow con...
New
I’m aware of 2 such projects, are there others?
git: GitHub - team-alembic/realworld: A fullstack Phoenix LiveView application with back...
New
Hi all,
I’m working on a Phoenix project where I need to make external HTTP requests and I’m trying to choose between Req and HTTPoison....
New
Hi everyone.
My team and I have been working on a fairly modest app based around video streaming and chat, but we’ve landed a customer t...
New
Hi,
we run different LLM models across a cluster, with each node loading a configurable subset. Model-specific queues let nodes consume ...
New
Hi all, I’m new here and would like to hear peoples views on my Elixir/Phoenix based game-engine! :smiley:
Mutonex gamedesign was finish...
New
Hello
I’ve been coding in Elixir for almost two years now because of my current job where we implemented Elixir in our application. But ...
New
Other Trending Topics
Hey there,
I haven’t seen a list of useful Elixir specific skills for the popular AI tools yet so I’m starting one here with my first.
...
New
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
With AI doing more of the implementation work, I’ve been wondering how much coding I should deliberately keep doing myself.
My main conc...
New
(I just needed to vent somewhere and LinkedIn is full of hope, or hype, I’m not sure which exactly)
AI dream has many faces, but general...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #ai
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #blog-post
- #ecto-query
- #elixirconf-us
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #elixirconf-eu
- #api
- #forms
- #security
- #hex










Showing Posts 1 to 5- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
FlyingNoodle
Aggregates are “per instance of this resource”.
I think something like this:
but I don’t know if thats the best way to do it? I mean you can also put this function in your domain or wherever you like.
nallwhy
MyApp.Invoice |> Ash.Query.filter(expr(not settled)) |> Ash.sum(:amount)works for me.FlyingNoodle
Generally you want to move these things to read actions though and not just freestyle it everywhere.
ken-kost
I think what you want is to put the aggregate into the parent resource and then you can just load the aggregate from the parent resource. Something has those invoices right?
zachdaniel
Ash.aggregate(Resource, {:total_amount, :sum})should be requiring that you specify a field to be summing, i.eAsh.aggregate(Resource, {:total_amount, :sum, field: :amount}).Ash.aggregateis for aggregating information about a query/resource as a whole. i.ewill get you back something like this:
{:ok, %{total_amount: #Decimal<10.0>}}, and is the “sum of of all amounts that are not settled”.The aggregates declared in a resource are different, they are more like a calculation. They are for summary information about related data.
This allows you to say:
which return something like
That
total_invoices_amountis “for the given customer(s), the sum of all related invoices, which are not settled”Hopefully that helps!