Making dashboards load faster

I have a dashboard with ~150 cards and it takes upwards of 2 minutes to fully load...

Are there any suggestions for making this speed up?

I tried building views of all the datasets with restricted data for each card (significantly reducing the rows and columns) which doesn't appear to have had any impact... :-(

Answers

  • GrantSmith
    GrantSmith Indiana 🥷

    @NathanDorsch

    That's quite a lot of cards on a single dashboard which typically makes it hard to tell a data story with that many. I'd recommend breaking them out into separate dashboards. Other things you can look into would be

    1. The number of beast modes stored on the dataset used or not as they're all processed when the card is loaded
    2. The number of dataset views being pulled in as each view is generated dynamically when the card is loaded
    3. The amount of data you're pulling into each card, the less data the faster it'll load.


    **Was this post helpful? Click Agree or Like below**

    **Did this solve your problem? Accept it as a solution!**
  • I removed quite a lot of data. In fact, I'd estimate I am now pulling in maybe 10% of the data with the views I was pulling in prior with the datasets.... yet no impact whatsoever.

  • From my experience, there are several things that can have an impact with load speeds.

    1. Number of datasets being used on the page.
    2. Number of PDP policies applied to those datasets.
    3. Number of beastmode calculations being used in the visuals.

    I would agree with @GrantSmith though. What is the use case for having so many cards on a single dashboard? I find it obnoxious to scroll through a dashboard with more than ~15 cards to find what I'm looking for. I can't imagine trying to sift through 100+ on a single dashboard.

    IMO - you want to limit the data being presented in a dashboard to answering a single business question. Ultimately, I think breaking this dashboard up will be your best bet in terms of improving load time.


    ______________________________________________________________________________________________
    “There is a superhero in all of us, we just need the courage to put on the cape.” -Superman
    ______________________________________________________________________________________________
  • jaeW_at_Onyx
    jaeW_at_Onyx Budapest / Portland, OR 🟤

    @Nathan + 1 to @ST_-Superman-_ and @Grant their advice is sound.

    I know it's not the answer you want to hear, but next step is definitely to not have 150 cards on a page. you'll get the biggest gains here.

    • while domo can render multiple cards simultaneously, you ARE issuing queries to a database, so subsetting your page into sub pages will allow Domo to focus on what's important to your user in that moment.
    • furthermore, a user cannot view 150 cards simultaneously, so it is bad design to do so. If a user looks at your page and immediately starts scrolling to find the content they are interested in ... that's bad design!
    • If you don't know how users want to subset their content, invest less time trying to throw more technical horsepower (dataset and beast mode optimization) and instead focus on delivering a better end user experience by tailoring their experience.


    GAINS IN ORDER OF IMPROVEMENT (caveat mileage may vary ;)

    • subset your cards onto subpages -- 90% of gains
    • subset your data into VIEWS (consider materializing if necessary -- commit to disk via ETL or 'materialize the view' ask your support rep)
      • you've done this... marginal gains unless you're going down from 100 column datasets with high cardinality and100M row + datasets)
    • optimize your Beast Modes -- https://domopalooza2022.brandlive.com/home/en/session/6592a5c0-a4cd-11ec-8936-35c8abcc3bbe
      • (avoid COUNT DISTINCT, avoid row level transforms, minimize use of window functions)
    • reduce the number of broken cards / beast modes attached to the datasets feeding your dashboard.
      • Domo has to validate each card and beast mode as it renders your page, so the fewer to validate the better the performance.


    Jae Wilson
    Check out my 🎥 Domo Training YouTube Channel 👨‍💻

    **Say "Thanks" by clicking the ❤️ in the post that helped you.
    **Please mark the post that solves your problem by clicking on "Accept as Solution"
  • For clarification, I have 37 bar charts which provide high level metrics, which my boss wanted to see - similar to how another business unit is displaying theirs in Power BI. Because Domo isn't good with allowing me to incorporate YOY and MOM trends, I broke them out as separate cards along with summary performance cards. So... basically 37 chart clusters of 4 cards each.

    It's also frustrating I can't get the cards packed in closely together (similarly to how power BI can), so it requires scrolling down to see more than just a fraction of the cards - which is frustrating.

  • GrantSmith
    GrantSmith Indiana 🥷

    @NathanDorsch

    I'd recommend reading an article I wrote up on how you can combine your data to do YoY or MoM more easily and have each of those included in the same graph using separate beast modes.




    **Was this post helpful? Click Agree or Like below**

    **Did this solve your problem? Accept it as a solution!**
  • As far as card loading, this (or any of the suggestions about reducing the size of datasets or beastmodes) wouldn't seem to have any impact. I actually created a skeleton data table with 8 rows by 5 columns and included MOM and YOY values I calculated - so I could just put them into Single Value cards. This had zero impact to the loading time (compared to pulling in data from datasets with over 100M rows and 100 columns - and with beastmodes and YOY/MOM cards)....

    As far as placing the YOY and MOM values within the cards, this is something I messed around with, but simply could not get the YOY and MOM values on the same line - I think because I had separate CSS values for each one. As a result, I had YOY over MOM and it just made card look bad and take up too much space.

    Do you know how to do this?