Skip to main content

Release Notes

Follow us on X to stay up-to-date with new releases!

๐Ÿ“Šย  UX improvement for the Field Format configuration

We're excited to announce that theย Data Typeย andย Display Formatย configuration can now be set in the field settings and the table context menu.

โœจย Key Highlightsโ€‹

  • Format fields directly where you work โ€” data type and display format settings are now directly accessible from the field menu or table context menu, keeping you focused on the field you are editing.
  • Quickly search within the field settings menu to find the right format, aggregation, or other actions you need.

๐ŸŽฏ Benefitsโ€‹

By bringing format settings into the field menu and table context menu, we reduce context switching โ€” which in turn helps avoid mistakes and enables you to update formats more quickly.

๐Ÿ“ Notesโ€‹

  • This feature is available for both Holistics 3.0 and 4.0

๐ŸŽ›๏ธ Controls & filters panel

Controls & filters panelโ€‹

We're excited to announce the new Controls & filters panel has been released ๐ŸŽ‰ - your centralized hub for managing all dashboard controls and filters.

Controls & filters panel

What you can do:

  • Centralized management ๐Ÿ“Š - View and manage all controls and filters across all tabs in one place.
  • Tab visibility ๐Ÿ” - Easily identify which tab each control belongs to (current vs. other tabs).
  • Quick location ๐Ÿ“ - Jump directly to any control's position on the dashboard.
  • Identify unmapped controls : Identify controls that aren't connected to any visualization.

Availability: All Canvas Dashboards in Holistics 4.0

Say goodbye to hunting through tabs to find and manage your dashboard controls! ๐Ÿš€

โœจ Explore Dashboards with AI

You can instantly get insights and dig deeper into any chart with Holistics AI.

Hover over a chart youโ€™re curious about, click โ€œAsk AI,โ€ then choose a suggested prompt or type your own.

The feature is currently in Closed Beta. Request access to be among the first to try it: Request Form

๐Ÿ“ค PDF Export to Slack

Share complete dashboards to Slack as a single PDF fileโ€”no more flooding channels with multiple images.

A dashboard being exported as a PDF to a Slack channel

The Problemโ€‹

Previously, we only supported PNG export to Slack. When sharing dashboards with multiple charts, each visualization had to be sent as a separate image. This often resulted in 5-10 individual files cluttering your Slack channels, making it hard to view reports as a cohesive whole.

The Solutionโ€‹

You can now choose PDF format when exporting dashboards to Slack. This automatically combines all selected visualizations into one professional document that's easy to share, review, and archive.

Documentationโ€‹

For more details on how it works, see: Export to Slack

๐Ÿงฎ [Beta - Updates] Calculation Builder: new claculations, more utilities

Building fields just got easier with new updates from Calculation Builder. Let's take a look!

New calculationsโ€‹

Concat, Date difference, Date add, Case when, and Rank โ€“ enabling you to work with text, dates, rankings, and classifications intuitively.

Calculation Builder - New calculations

Support for custom dimensionsโ€‹

Build custom dimensions with Calculation Builder using the new functions above.

Calculation Builder - Custom dimension

Calculation Builder anywhereโ€‹

Access Calculation Builder across your Reporting tab - in the dataset fields panel, visualization settings, and tables, to define logic where you work.

Calculation Builder - Anywhere in Reporting

Composable metric with flexible controlsโ€‹

  • Build new calculations based on existing ones.
  • Apply filters and customize grouping for advanced aggregations directly inside calculations.
Calculation Builder - Composable metric with flexible controls

See it in actionโ€‹

These updates help you create and refine calculations faster and more flexibly.

๐Ÿš€ Thereโ€™s even more coming up. ๐Ÿš€

๐Ÿ“ฆ Content Archiving

We're excited to launch Content Archiving, a powerful new feature that allows you to hide outdated analytics content, keeping your workspace clean while preserving full access to your historical data.

The Problemโ€‹

A growing analytics workspace often becomes cluttered with outdated reports and dashboards, making it difficult to find current, relevant information.

The Solutionโ€‹

Content Archiving provides a clear way to streamline your workspace and ensure data accuracy:

  • Organized workspace and fresh content: Hide outdated content from views, searches, and reports, ensuring a clean workspace and that users only see current, relevant data.
  • Preserve history: Maintain full access to all archived data for reference.

Documentationโ€‹

For details, visit our public documentation: Content Archiving

Timelineโ€‹

  • Released: Archive models, datasets, and dashboards
  • Released: Access all archived items via the Archive page or search
  • Upcoming: Get archive suggestions for inactive items (30/60/90 days)

๐Ÿ” Search Improvements

We're excited to announce our new Search Improvements For Tagged Objects, which allow you to use tags to find the exact item you need โ€” faster!

โœจKey Improvementsโ€‹

  • Prioritizing endorsed items: Endorsed dashboards and datasets are now featured at the top of your search results so that you can start your analysis with confidence. Learn how to mark an object as endorsed to help your team find reliable, high-quality content.
  • Searching by Tags:
    • Before: You have to search using keywords, then narrow down the results with the tag filter.
    • After: Skip the keywords! You can use the tag filter to get all objects associated with that tag. Learn how to organize your content with tags.

๐Ÿค– Auto-Generated Titles and Messages in Pull Request Workflow

Why this feature?โ€‹

Writing clear, descriptive PR titles and messages takes time and mental energy. Analysts often face writer's block when creating pull requests, leading to rushed or incomplete descriptions. This results in poorly documented changes that make code reviews harder.

How it worksโ€‹

  • Smart Generation: AI analyzes your code changes and automatically creates a clear title and detailed description
  • One-Click Usage: Accept the suggestions instantly or customize them to your needs
  • Context-Aware: Captures important details you might forget to mention

Before vs Afterโ€‹

Before (Manual Process)

  • Manually craft a descriptive title and message.
  • Spend time recalling and documenting all changes.
  • Risk inconsistent or incomplete descriptions.

After (AI-Powered)

  • AI instantly generates a clear title and detailed message.
  • One-click to accept the suggestions or customize them.
  • Ensure every PR has consistent, high-quality documentation.

Key Benefitsโ€‹

  • Faster PRs - No more writer's block when creating pull requests
  • Better Documentation - AI catches details you might forget to mention
  • Consistent Quality - Every PR gets a well-structured title and description
  • Time Savings - Spend less time on admin work, more time on analysis

Getting Startedโ€‹

To use this feature, you need to:

  1. Join the Alpha Program - Sign up for Holistics AI access
  2. Connect to GitHub - Integrate with your GitHub repository
  3. Enable PR Workflow - Activate the PR Workflow for your organization

Once enabled, the AI will automatically generate titles and descriptions for all new pull requests in your workflow.

๐ŸŽฏ 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

๐Ÿš€ 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.