Group By

Anyone knows of a way to GROUP BY in Beast Mode Editor?

we can do PARTITIONING but somehow, we can't do GROUP BY?

For example:

case when 'location'='ATL' then sum((amount)*10) else sum(amount) over (partition by 'Location') end

the above works perfect

BUT below doesn't. what am I doing wrong here?

case when 'location'='ATL' then sum((amount)*10) else sum(amount) group by 'Location' end

Best Answers

  • MichelleH
    MichelleH Coach
    Answer ✓

    @carthur You don't actually need a GROUP BY clause in beast mode the same way that you would in SQL because your beast mode should group by whatever dimension is used in your card. If I'm interpreting your examples correctly, you are trying to sum the amount column for all locations and multiply the amount for ATL by 10. In that case your beast mode should looks like this:

    sum(case when `location` = 'ATL' then `amount` * 10 else `amount` end)
    

    In general, it's better to put case statements inside aggregate functions instead of the other way around since that often results in granularity issues.

  • GrantSmith
    GrantSmith Coach
    Answer ✓

    To add some additional context the first one works because it will return a singular value from your window function so any aggregation on your card will work on that field but can cause some issues depending on your sorting and grouping and other aggregation that's being performed on the card when it's displayed.

    The second is trying to evaluate the single row's value but also then attempting to aggregate your value. As @MichelleH mentioned it's best to put your case statement inside the aggregation so that it will evaluate all of the rows first and then do your aggregation.

    **Was this post helpful? Click Agree or Like below**
    **Did this solve your problem? Accept it as a solution!**

Answers

  • MichelleH
    MichelleH Coach
    Answer ✓

    @carthur You don't actually need a GROUP BY clause in beast mode the same way that you would in SQL because your beast mode should group by whatever dimension is used in your card. If I'm interpreting your examples correctly, you are trying to sum the amount column for all locations and multiply the amount for ATL by 10. In that case your beast mode should looks like this:

    sum(case when `location` = 'ATL' then `amount` * 10 else `amount` end)
    

    In general, it's better to put case statements inside aggregate functions instead of the other way around since that often results in granularity issues.

  • GrantSmith
    GrantSmith Coach
    Answer ✓

    To add some additional context the first one works because it will return a singular value from your window function so any aggregation on your card will work on that field but can cause some issues depending on your sorting and grouping and other aggregation that's being performed on the card when it's displayed.

    The second is trying to evaluate the single row's value but also then attempting to aggregate your value. As @MichelleH mentioned it's best to put your case statement inside the aggregation so that it will evaluate all of the rows first and then do your aggregation.

    **Was this post helpful? Click Agree or Like below**
    **Did this solve your problem? Accept it as a solution!**