Skip to main content

What's New

Keep track of the latest features, improvements, and fixes in Holistics.
Follow every release on LinkedIn ยท X ยท .

August 6, 2025

๐Ÿš€ Better syntax validation for Canvas Dashboard

๐Ÿ”ฅ Why this feature?โ€‹

Some of our customers were struggling with cryptic field reference errors that only showed up when trying to publish dashboards. No clear error messages, no way to navigate to problems, and broken references went undetected when fields were renamed. This was creating a poor developer experience and blocking teams from scaling their analytics.

๐Ÿ’ก How it worksโ€‹

  • Real-time validation: Field reference errors now show up immediately with red underlines as you type
  • Click-to-navigate: Click on errors to jump directly to the problematic code
  • New r() syntax: Use r(users.id) instead of ref('users', 'id')

Before vs Afterโ€‹

โŒ Before (Old Syntax)

// Old syntax - prone to typos, no IDE support
VizBlock {
label: 'Revenue by Category'
viz: PieChart {
dataset: 'ecommerce'
legend: ref('products', 'category') // No validation
series {
field {
ref: ref('orders', 'revenue') // String-based, error-prone
aggregation: 'sum'
}
}
}
}

// ๐Ÿ˜ฐ Common issues:
// - Typo: ref('product', 'category') โ†’ No error until runtime
// - Renamed field: orders.revenue โ†’ orders.total_revenue โ†’ Broken reference
// - No autocomplete or navigation support

โœ… After (New Syntax)

// New syntax - validated, IDE-friendly
VizBlock {
label: 'Revenue by Category'
viz: PieChart {
dataset: 'ecommerce'
legend: r(products.category) // Real-time validation
series {
field {
ref: r(orders.revenue) // Click to navigate to definition
aggregation: 'sum'
}
}
}
}

// ๐ŸŽ‰ Benefits:
// - Typo: r(product.category) โ†’ Immediate red underline
// - Renamed field: Automatic detection of broken references
// - Full IDE support: autocomplete, go-to-definition, find usages
Note

This applies everywhere we use field references - not just dashboards but also Pre-aggregates.

๐Ÿ‘€ Migration to new syntaxโ€‹

We don't support mass conversion yet, but the transition is seamless:

  • New dashboards automatically use the new r(model_name.field_name) syntax
  • Existing dashboards convert to new syntax whenever you edit and save a widget
  • Old syntax still works - no breaking changes.
August 4, 2025

โœจ Holistics AI: Deprecate Explore data (basic), more unified experience

Weโ€™ve deprecated Explore Data (basic mode) to unify the experience - now in just a single Explore Data interface.

Alongside this, Explore Data now can Explain Chart - a new capability that helps you easily understand visualizations with clear, concise explanations of trends and patterns. It makes charts easier to interpret, so users can act on insights with more confidence.

๐ŸŒŸ More powerful, easier to use - now all in one place.


๐Ÿ“ฅ Interested in Holistics AI? Join the waitlist and start exploring a new way to work with data.

July 25, 2025

๐Ÿš€ Pull Request (PR) Workflow in Holistics

Open Beta

PR Workflow is in open beta and currently supports GitHub only

We're introducing a new Pull Request (PR) workflow to help organizations maintain quality and control over their dashboard changes. This feature empowers administrators to implement a robust review process before changes go live.

Why We Built Thisโ€‹

Have you ever discovered unexpected changes in your production dashboards? While you can track down who made the changes, by then the damage is already done.

The root cause? A lack of mandatory review process for dashboard changes. Without proper oversight, unrestricted publishing can compromise your project's reliability and integrity.

Key Featuresโ€‹

The new PR Workflow includes:

  • Company-wide Control: Administrators can enable/disable the PR Workflow for their entire organization
  • Review Management: Administrators and Dashboard Owners can review all changes before they go live
  • Streamlined Process for Analysts:
    • Easy submission of changes for review
    • Automatic publishing after PR approval and merge
    • Instant notifications if any errors occur during publishing

For detailed information, check out our PR Workflow documentation.

July 22, 2025

๐Ÿ’พย Reusable Component Library

You donโ€™t need a national survey to know that most data teams rebuild the same charts again and again across different dashboards. Weโ€™ve all been there, staring at a new dashboard request and thinking "I know we've built something like this before..."?

Your best dashboard components deserve to live multiple lives, not buried in some report from last quarter, waiting to be rebuilt from scratch.

With Reusable Component Library, every visualization you create can become a building block for future dashboards. Think of it as your team's collective intelligence, transformed into drag-and-drop components. When you need it again, simply grab it from your library, tweak it, and you're done.

For more information, please visit our documentation.

July 7, 2025

โœ… Content Endorsement

We're excited to announce Content Endorsement has been officially launched, a feature that provides your organization a powerful way to mark trusted and reliable content.

The Problem We've Solvedโ€‹โ€‹

As analytics content grows across your organization, users often struggle to identify which reports and dashboards are reliable and current. Without clear indicators of content quality and status, teams waste time on outdated materials and lack confidence in their data-driven decisions.

The Solutionโ€‹โ€‹

By offering Content Endorsement features, we help data teams mark trusted content. Users can easily identify reliable, recommended content.

Documentationโ€‹

For more details, please refer to our public docs: Content Endorsement

June 30, 2025

๐Ÿงจ Dynamic Data Sources

Introductionโ€‹

In some scenario, you want to point the dashboards to different data source (database or data warehouse) dynamically, based on who's viewing the report or whether it's in production or dev mode.

Dynamically pointing Holistics to different data sources

Thanks to its programmable nature, Holistics can support this capability natively. This will enable popular use cases such as:

  • Clients Dashboarding: Build the same set of models/datasets/dashboards for clients but different data source for each client underneath.
  • Dev/Prod environment: Dynamically switch the underlying data sources (from dev โ†’ prod and vice versa) based on the environment that analysts are working on
  • Dynamic data sources for embedded analytics: Embedded analytics but different customers use different databases.
info

For those of you who separate dev and prod environments based on schema instead of the data source, please refer to our release note about dynamic schemas.

Demoโ€‹

For more information, please refer to our doc about Dynamic Data Sources

June 30, 2025

๐Ÿงจ Dynamic Schemas

To follow up on the Dynamic Data Sources feature, this is another cool feature that might be useful, dynamic schemas

๐Ÿ“Š โ€‹Dynamic Schema for Dev/Prod Environmentsโ€‹โ€‹

For those of you who separate dev and prod environments based on schema (or datasets in BigQuery) instead of the actual data source, weโ€™ve got you covered with our Dynamic Schema option.

This feature lets you switch schemas easily using basic string interpolation in your model's table_name property.

Hereโ€™s a quick example to show how it works:

// This is for dynamic schema use case by branch

const current_branch = H.git.current_branch

const dynamic_schema =
if (current_branch == 'master') { 'prod' }
else if (current_branch == 'staging') { 'stg' }
else { 'dev' }

// in Table Model
model users {
type: 'table'
data_source_name: 'your_db'

// dynamic schema in table name
table_name: '${dynamic_schema}.users'
}

// in Query Model
model derived_users {
type: 'query'
data_source_name: 'your_db'

// dynamic schema in a query
query: @sql select * from ${dynamic_schema}.users ;;

}

June 30, 2025

๐Ÿท๏ธย Tagging System

We're excited to announce that our Tagging System is now available on Production.

The Problem We've Solvedโ€‹โ€‹

As organizations create more reports and dashboards in Holistics, their analytics environment becomes cluttered and disorganized. Without proper labeling and categorization tools, users struggle to find trustworthy content among hundreds of similar-looking items.

The Solutionโ€‹

Tags help you efficiently categorize the analytics content, allowing users to quickly discover related items through meaningful categories and labels.

Benefitsโ€‹

  • Better organization: Create consistent categorization across your entire analytics environmentโ€‹
  • Improved content discovery: Quickly find relevant reports and dashboards using tags and filters

Documentationโ€‹

For more information, please refer to our public docs: Tags

June 20, 2025

๐Ÿงฎ Calculation Builder: Create Powerful Metrics Without Code

AQL lets analysts build complex metrics much more easily, but learning it takes time. And we know not everyone has that luxury. Thatโ€™s why weโ€™re building Calculation Builder to let you tap into the full flexibility of AQL, through a point-and-click experience anyone can use.

Why youโ€™ll love itโ€‹

Zero coding required: Create, customize, compose metrics with just a few clicks.

Calculation Builder - No code required

Popular calculations: Build count, sum, average, running totals, and conditional metrics effortlessly.

Calculation Builder - Popular calculations

Progressive learning: View the generated AQL behind your GUI calculations to gradually learn the language.

Calculation Builder - Learn AQL

Advanced customization: Convert any GUI metric to AQL for further customization when needed.

Calculation Builder - Advanced customization

Calculation Builder currently supports all basic aggregations (count, sum, average), conditional aggregations (count if, sum if), running totals, and more - all through a simple point-and-click interface.

Share your feedbackโ€‹

Calculation Builder is currently in beta. Weโ€™re still polishing things up, so some behaviors or options may evolve. Your feedback is incredibly valuable - let us know what works, what doesnโ€™t, or what youโ€™d love to see next!

โญ More calculations are coming up soon.

June 19, 2025

๐Ÿš€ New AQL Functions For Better Data Manipulation

Weโ€™re excited to introduce some fresh functions to enhance your data manipulation. Check them out!

Aggregation Functionsโ€‹

  • corr: corr(table, field1, field2) โ€” Pearson correlation coefficient.
  • string_agg: string_agg(expression, sep: separator) โ€” Concatenate expression values.
  • percentile_cont: percentile_cont(expression, percentile) โ€” Value at a given percentile (interpolated).
  • percentile_disc: percentile_disc(expression, percentile) โ€” Value at a specific percentile (discrete).
  • min_by: min_by(table, value, by) โ€” Fetch value from the row with minimum in another field.
  • max_by: max_by(table, value, by) โ€” Grab value from the row with maximum in another field.

Time Intelligence Functionsโ€‹

  • date_format: date_format(datetime, format) โ€” Format dates easily.
  • from_unixtime: from_unixtime(number) โ€” Convert Unix timestamp to datetime.
  • last_day: last_day(datetime, date_part) โ€” Get the last day of a period.

Text Functionsโ€‹

  • find: find(text, substring) โ€” Locate a substring.
  • left/right/mid: left(text, length), right(text, length), mid(text, start, length) โ€” Extract from left, right, or mid.
  • len/lpad/rpad: len(text), lpad(text, length, pad_string), rpad(text, length, pad_string) โ€” Length, left/right padding.
  • lower/upper: lower(text), upper(text) โ€” Change case of text.
  • trim/ltrim/rtrim: trim(text), ltrim(text), rtrim(text) โ€” Remove whitespace from sides.
  • regexp_extract/match/replace: regexp_extract(text, regex, ...), regexp_like(text, regex), regexp_replace(text, regex, substitute) โ€” Regex operations on text.
  • replace: replace(text, old_substring, new_substring) โ€” Replace all occurrences of a substring.
  • split_part: split_part(text, delimiter, part_number) โ€” Split text and return a specific part.

Window Functionsโ€‹

  • first_value: first_value(expression) โ€” Value from the first row.
  • last_value: last_value(expression) โ€” Value from the last row.
  • nth_value: nth_value(expression, N) โ€” Value from the nth row.
  • ntile: ntile(n) โ€” Divides rows into ranked groups.
  • percent_rank: percent_rank() โ€” Calculates the relative percentile rank of a value.

โญ Learn more: You can see all AQL functions in our cheatsheet.

Got questions or feedback? Weโ€™d love to hear from you! Your input helps us make Holistics better every day. ๐Ÿ˜Š