Beast Mode Help - Special Rounding Case (round at up at .25)

Here is a video that gives an overview of what I am trying to do with a beast mode.

Best Answers

  • Valiant
    Valiant 🔵
    Accepted Answer

    Here you go:

    `Current` - (FLOOR(`Needed`) + CASE WHEN MOD(`Needed`, 1) >= .25 THEN 1 ELSE 0 END )

    FLOOR returns the whole number part of `Needed`

    MOD(`Needed`,1) returns the decimal part


    We then do a CASE WHEN to see if the decimal is >= .25, if so then return 1 and add it to the whole number of needed. 


    Let me know if you have any questions,



    **Please mark "Accept as Solution" if this post solves your problem
    **Say "Thanks" by clicking the "heart" in the post that helped you.

  • swagner
    swagner 🟢
    Accepted Answer

    It's working!  I was able to work it out by doing a bunch of the row calc in the Magic ETL instead of doing that in the Beastmode.  More detail in this video:


    Here is my simplified Beastmode after the changes I made:

    `Current Head Count` - (FLOOR(`Required Resources`)
    + CASE WHEN MOD(`Required Resources`, 1) >= .25 THEN 1 ELSE 0 END)


  • First, the special rounding solution you provided is working great!  I am getting a strange summary number/column total I wanted to run by you.  When I export the table data from Domo to Excel and sum the column I get a value of 13, the summary number and the total on the column in the Domo table card is showing as 24. 


    Attached is sample data, and here is a video help explain:


    Here is my beastmode:

    SUM(`Current Head Count`) - (FLOOR(
    SUM(`Total RR`)
    +SUM(`Support - Current`)
    +SUM(CASE when `Total RR`>6 then `RR SUP Raw` else 0 END)
    +SUM(CASE when `Total RR`>4 then 1 else 0 END)
    +SUM(CASE when `Mayer Branch`='200 - Birmingham' then 1 else 0 END))

    SUM(`Total RR`)
    +SUM(`Support - Current`)
    +SUM(CASE when `Total RR`>6 then `RR SUP Raw` else 0 END)
    +SUM(CASE when `Total RR`>4 then 1 else 0 END)
    +SUM(CASE when `Mayer Branch`='200 - Birmingham' then 1 else 0 END), 1) >= .25 THEN 1 ELSE 0 END )

  • Definitely pretty tricky, took me a minute to figure out what was going on.


    So the data at the row level is exactly the same. The problem is that the Total and Sum fields, don't calculate our special rounding at the row level, it does it on the whole dataset. 



    If you had 3 rows where the decimal was .25, .28 and .30 at the row level then you would end up saying the required amount was +3 the whole number actually required. But at the summation level, it says the decimal for those 3 is .83 so it's only +1.


    That difference is what's causing the offset in your numbers.


    The only way around it I believe would be at the ETL level and then just display a clean card to summarize.


    Hope this helps,


  • How would I approach this rounding issue in the Magic ETL?  The calculation step only contains very simple math operators.

  • Basically I would use a SQL Transform to rebuild the base dataset

    SELECT *, 'Insert Variance BeastMode Here' AS 'Variance'
    FROM Dataset

    And you can SUM any of the fields you're summing ahead of time. 


    But that should produce a dataset that is exactly what you would export from the finished card.