Narrative Report


Dashboards don’t allow creators to easily add context to data. As a result, it is very difficult for data consumers to make sense of the numbers and charts they see.


We’re considering implementing a document-style report format called :memo: Narrative Report.

Narrative Report provides a writing and reading experience just like you are in Google Docs, MS Word, or Notion. You can add Markdown-supported text, charts (using Holistics Data Exploration UI), and filters for charts.

How-to video

Use cases

  • Data analysts who want to tell a story with data
  • Business stakeholders who need context to make sense of numbers

We’d love to have more feedback and sharing from you

  • :thinking: How do think this solution will be relevant to you?
  • :thinking: What are your use cases for Narrative Report?

I love this, but please could ad-hoc reports (not only official models) be included in the data sets that can be included. Oftentimes narrative is most needed on deep-dive bespoke analysis.


I like this idea and could see how it would be useful. This reminds a lot of notebook-style analysis (JupyterLab, DeepNote, Hex, etc). I agree with @Alex_H that it would be nice if the charts could be built off of ad hoc queries.

Additionally, as a report developer, I would want the ability to optionally “freeze” the data in the report, so that it doesn’t automatically refresh the data when a user opens the report. These kinds of narrative reports can be useful when describing outliers or other anomalous situations that might not regularly be in the data.


Thanks @Alex_H and @SterlingParamoreMSE for the comments!

I have noted your requests for ad-hoc queries, and will definitely let my team know. Provided that you can create charts out of ad-hoc queries, how will you fit Narrative Report into your workflow on Holistics?

Also noted the option to “freeze” data in the report. Thanks Sterling for that! When do you want to “freeze” the data? When do you need the data to be dynamic and up-to-date?

1 Like

Example of when I would want to freeze data. Suppose sales were really low in June and I wanted to have a report that explored more details about why they were low. Maybe it was because we weren’t including some new product line and that will be fixed later. I wouldn’t want that to keep updating that report with the new fixed data, but would still want to keep the data around to explain data that might have already been sent out.


Great idea; I see a lot of value.

One build, if not already something you were looking at, is to be able to insert dynamic values from the visualisation/dataset into the text. eg

This month, we shipped {sum(orders.order_qty) where month = this.month} orders to customers


Hey Sterling, thanks for such a detailed example. It seems like your use case is geared towards one-time, ad-hoc analysis. Will definitely take note of this!

1 Like

Thanks David for the suggestion! What is your use case for this? Why do you want to insert dynamic values from visualization/dataset instead of observe and manually write down the values?

1 Like

Ooo, I just thought of another thing that would be nice to have here: the ability to insert dynamic text in the market. So you could write something like:

In {{ last month }}, we sold {{ n_widgets }} widgets, which is a change of {{ delta_widgets }} since the prior month.

and it would render like:

In June, 2022, we sold 873 widgets, which is a change of -23 since the prior month.

If you send something like an exec summary each week, you often want to reference the same set of values / KPIs. This just lets you template those exec summaries with dynamic text, same as what @SterlingParamoreMSE is referencing


Sterling, since you are interested in using Narrative Report for ad-hoc analysis, I wonder how you and your team are conducting ad-hoc analysis right now? You did mention a few cloud-based notebooks. Are they part of your workflow?

Hey David, that is a really cool example. I wonder how you and your team are currently preparing those weekly exec summary (or any other type of recurring report), and how Narrative Report may change that?

@Quan_Phan - Yes, we’re using a lot of JupyterLab and a little bit of Hex.

Looks to me like you’ve already implemented it ;).

So are there now three things in this thread - all of which I would love to see -

  • Narrative report layout editor
  • Freezing report snapshots
  • Saving ad-hoc reports (this would be my personal top priority out of the 3).

IMHO each would be useful on its own and more powerful together. Freezing sounds hardest to build, though it can be worked around by exporting to PDF. But where it would become super powerful would be if you could turn the frozen snapshot into a baseline for later comparison. So that’s feature idea #4 :).


Looks like a great idea and something that is definitely needed in the analysis area. We are currently using Deepnote at ZOE and use this to do very similar things as you are doing with the Narrative Report.

I echo what others have said here, the ability to do ad-hoc queries and display these as any type of visualisation would be very useful here. If you do implement ad-hoc query creation, having auto-complete of table and schema names would be amazing here as remembering the names across a large data warehouse can be difficult at the best of times.