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 7, 2025

🎯 Viz-aware AQL: Metrics that automatically adapt to your charts

🔥 Why this feature?

Ever created the same metric 5 times just because users wanted to view data by month, quarter, AND year? Yeah, we fixed that.

💡 How it works

  • Context-aware functions: New AQL functions that automatically adapt to visualization settings
  • Dynamic references: Use 'x_axis', 'rows', 'columns' instead of hardcoding dimensions
  • Automatic adaptation: Metrics recalculate correctly when users change chart configurations

Before vs After

❌ Before (Static AQL)

// Static period comparison - only works for monthly data
metric revenue_vs_prev_month {
definition: @aql
sum(orders.revenue) -
sum(orders.revenue) | relative_period(orders.created_at | month(), interval(-1))
;;
}

// Separate metric needed for yearly comparison
metric revenue_vs_prev_year {
definition: @aql
sum(orders.revenue) -
sum(orders.revenue) | relative_period(orders.created_at | year(), interval(-1 year))
;;
}

// Running total hardcoded to specific dimension
metric running_total_by_month {
definition: @aql
window_sum(sum(orders.revenue), order: orders.created_at | month())
;;
}

// Percent of total hardcoded to specific dimension
metric pct_of_product_total {
definition: @aql (sum(orders.revenue) | of_all(products.category)) / sum(orders.revenue) ;;
}

// 😰 Common issues:
// - Need duplicate metrics for each time grain
// - Calculations break when users change visualization settings
// - Running totals don't work when pivoting by different dimensions

✅ After (Viz-aware AQL)

// One metric that adapts to any time grain
metric revenue_vs_previous_period {
definition: @aql
sum(orders.revenue) | relative_period(orders.created_at, -1)
;;
}

// Running total that follows visualization
metric revenue_running_total {
definition: @aql
window_sum(sum(orders.revenue), order: 'x_axis')
;;
}

// Percentage calculations that adapt to pivot structure
metric pct_of_row_total {
definition: @aql
percent_of_total(sum(orders.revenue), 'row_total')
;;
}

// 🎉 Benefits:
// - Single metric works for monthly, quarterly, yearly views
// - Automatically adapts when users change chart settings
// - Drill-downs and pivots work seamlessly
Note

Your existing static AQL definitions continue to work as before - no breaking changes! If you want to make your metrics visualization-aware, you can modify them to use the new context-aware functions.

Functions that support viz-aware features

Percentage Calculations

  • percent_of_total - Calculate percentages with 'row_total', 'column_total', or 'grand_total'

Time-based Functions

  • relative_period - Compare metrics across time periods that adapt to visualization granularity

Window Functions

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.