nallwhy

nallwhy

`join_filter` in aggregates doesn’t seem to work as expected

I’m trying to sum only the copies_sold of :studio albums using an aggregate, but I’m not sure how to apply a filter to the joined records.

Here’s a simplified version of my resource:

def AshPg.Music.Artist do
  ...

  aggregates do
    sum :studio_copies_sold, [:albums], :copies_sold do
      # Invalid reference albums.type
      # filter expr(albums.type == :studio)

      # Not working
      join_filter [:albums], expr(type == :studio)
    end
  end
end

And here’s a test that creates an artist with multiple albums, where only one is of type :studio. The aggregate should return 1_000_000, but currently it’s returning the total sum of all album types.

defmodule AshPg.Music.ArtistTest do
  ...

  test "solo_copies_sold" do
    artist =
      Music.create_artist!(%{
        name: "250",
        albums: [
          %{title: "Rear Window", type: :single, copies_sold: 1000},
          %{title: "Bang Bus", type: :single, copies_sold: 2000},
          %{title: "뽕", type: :studio, copies_sold: 1_000_000}
        ]
      })

    %{studio_copies_sold: studio_copies_sold} = artist |> Ash.load!([:studio_copies_sold])

    # The sum of copies sold for studio albums should be 1_000_000
    assert studio_copies_sold == 1_000_000
  end
end

join_filter doesn’t seem to have any effect.

https://github.com/nallwhy/ash_pg/commit/4a84d244554620cb4ff602e9dcaa12bcaccf591d

Is there a correct way to apply a filter to aggregates based on joined relationships? Any help would be appreciated.

Marked As Solved

zachdaniel

zachdaniel

Creator of Ash

join_filter is for “intermediate” relationships, not the destination relationship.

    sum :studio_copies_sold, [:albums], :copies_sold do
      # Invalid reference albums.type
      # filter expr(albums.type == :studio)

      # Not working
      filter expr(type == :studio)
    end

Where Next?

Popular in Questions Top

aadeshere1
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible. total = 10 while total != 0 ...
New
Kurisu
For example for a current url like http://localhost:4000/cosmetic/products?_utf8=✓&query=perfume&page=2, I would like to get: ...
New
gshaw
What is the idiomatic way of matching for not nil in Elixir? E.g., First way: defp halt_if_not_signed_in(conn, signed_in_account) when...
New
nobody
How to bind a phoenix app to a specific ip address? could not find anything about that, nowhere, unfortunately, but for me this is quite...
New
earth10
Hi, I’m just starting to build a side-project with Elixir and Phoenix and doing some basic test with Elixir alone. What strikes me is th...
New
jerry
Good day to you all. I have been struggling to get a query involving like and ilike to work. Can anyone assist me on this, please? pro...
New
LegitStack
I’m trying to make a websocket server in Phoenix or raw Elixir. I heard about gun, I think I could use cowboy, but since I’m not that sma...
New
vonH
When I run the Plug and I recompile I wind up having to use Ctrl C to quit iex and start again. Witht the help of rlwrap I can use the cu...
New
freewebwithme
Using vs code and installed ElixirLS: support and debugger. And I got an error popped up on start up says Failed to run ‘elixir’ comma...
New
joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 records...
New

Other popular topics Top

mcarvalho
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
lessless
I believe there are people here who are dealing with CSV files import on the daily basis, and since Excel is a really popular tool there ...
New
johnnyicon
Hi all, I’ve just started learning Elixir and Phoenix Framework, so please pardon my n00bness at this stage. I’m trying to use Postgres...
New
JakeBecker
TL;DR: I’ve just released an implementation of Microsoft’s IDE-independent Language Server Protocol for Elixir. It adds language support ...
1144 53690 245
New
josevalim
Hi everyone, One of the features added to Elixir early on to help integration with Erlang code was the idea of overridable function defi...
New
aalberti333
As the title describes, I’m trying to run Enum.map() over a list of key/value pairs, where the value is a map. My data looks like this: ...
New
klo
Got a question about when to concat vs. prepending items to list then reversing to achieve appending. So i know lists boil down to [1 | ...
New
axelson
This post is a wiki (feel free to hit the edit button near the bottom right of this post to add your own changes!) This post collects co...
239 47930 226
New
openscript
Hello! Sorry for this astonishing simple question, but I’m really stuck. I try to set up the intellij-elixir plugin, but I don’t know ho...
New
vonH
In asking this question I am more interested about the expressiveness of the language itself and less concerned about the availability of...
New

We're in Beta

About us Mission Statement