# Patterns

**URL:** https://community.omni.co/c/patterns/9.md

[Latest](https://community.omni.co/latest.md) · [Categories](https://community.omni.co/categories.md) · [Tags](https://community.omni.co/tags.md)

---

## [About the Patterns category](https://community.omni.co/t/about-the-patterns-category/29)

<div class="topic-metadata">

**Author:** [@conner](https://community.omni.co/u/conner)\
**Replies:** 0

</div>

How-to guides for implementing common analytical patterns.

---

## [Sessionizing your events data](https://community.omni.co/t/sessionizing-your-events-data/48)

<div class="topic-metadata">

**Author:** [@conner](https://community.omni.co/u/conner)\
**Replies:** 1\
**Last updated:** [December 8, 2025, 11:31am UTC](https://community.omni.co/t/sessionizing-your-events-data/48 "2025-12-08T11:31:11Z")

</div>

When trying to understand a user’s journey through your product, you’ll likely turn to your company’s events data, which records users’ actions like clicks, form fills, and purchases. But without the context of when thes…

---

## [Shifting dates to account for most recent data not being current](https://community.omni.co/t/shifting-dates-to-account-for-most-recent-data-not-being-current/429)

<div class="topic-metadata">

**Author:** [@adrienb](https://community.omni.co/u/adrienb)\
**Replies:** 0\
**Last updated:** [December 6, 2025, 1:18am UTC](https://community.omni.co/t/shifting-dates-to-account-for-most-recent-data-not-being-current/429 "2025-12-06T01:18:51Z")

</div>

A common data challenge involves accounting for data which may not be current, often due to a lag in upstream data pipelines. For example, you’d like to look at the past X weeks of data, but due to this lag the past X we…

---

## [Subtotals and XLOOKUP](https://community.omni.co/t/subtotals-and-xlookup/415)

<div class="topic-metadata">

**Author:** [@James](https://community.omni.co/u/James)\
**Replies:** 0\
**Last updated:** [November 5, 2025, 9:35pm UTC](https://community.omni.co/t/subtotals-and-xlookup/415 "2025-11-05T21:35:19Z")

</div>

When you add subtotals to a query that uses XLOOKUP calcs, sometimes the subtotal may appear blank on the XLOOKUP field. To ensure the subtotal gets calculated correctly, you’ll need to ensure all keys are included i…

---

## [Dynamically Change Date Granularity Based on Filter Timeframe](https://community.omni.co/t/dynamically-change-date-granularity-based-on-filter-timeframe/367)

<div class="topic-metadata">

**Author:** [@adrienb](https://community.omni.co/u/adrienb)\
**Replies:** 1\
**Last updated:** [October 27, 2025, 4:48pm UTC](https://community.omni.co/t/dynamically-change-date-granularity-based-on-filter-timeframe/367 "2025-10-27T16:48:34Z")

</div>

When working with time series data, you may be commonly switching between hourly/daily/weekly or even other time granularities. Omni provides a built-in way to flip between these options using the Time Frame Switcher con…

---

## [Building a clean pivot table by hiding repeated values](https://community.omni.co/t/building-a-clean-pivot-table-by-hiding-repeated-values/404)

<div class="topic-metadata">

**Author:** [@adrienb](https://community.omni.co/u/adrienb)\
**Replies:** 2\
**Last updated:** [October 21, 2025, 11:59pm UTC](https://community.omni.co/t/building-a-clean-pivot-table-by-hiding-repeated-values/404 "2025-10-21T23:59:13Z")

</div>

Sometimes table visualizations are more useful when dimensions are expanded by default, rather than grouped together, but repeated values can quickly fill up real estate. Here is how to make a clean table using excel cal…

---

## [Configuring model level localization](https://community.omni.co/t/configuring-model-level-localization/345)

<div class="topic-metadata">

**Author:** [@jack](https://community.omni.co/u/jack)\
**Replies:** 2\
**Last updated:** [September 17, 2025, 7:36pm UTC](https://community.omni.co/t/configuring-model-level-localization/345 "2025-09-17T19:36:19Z")

</div>

Model Level Localization There are many components to localization in Omni, but a core component is localizing the field labels, descriptions, and other parameters that exist in your database to be more UI friendly for t…

---

## [Using Level of Detail functions for Cohorting Analysis](https://community.omni.co/t/using-level-of-detail-functions-for-cohorting-analysis/368)

<div class="topic-metadata">

**Author:** [@kylee](https://community.omni.co/u/kylee)\
**Replies:** 2\
**Last updated:** [September 2, 2025, 11:36pm UTC](https://community.omni.co/t/using-level-of-detail-functions-for-cohorting-analysis/368 "2025-09-02T23:36:56Z")

</div>

Cohorting Analysis is a common analytical pattern we see our customers using at Omni. In our documentation page, we have an example of this pattern in practice. In this example, we create a cohort analysis based at cohor…

---

## [Rank sub category using Calcs to get things like Top 10 subcategories](https://community.omni.co/t/rank-sub-category-using-calcs-to-get-things-like-top-10-subcategories/316)

<div class="topic-metadata">

**Author:** [@Jiro](https://community.omni.co/u/Jiro)\
**Replies:** 0\
**Last updated:** [April 28, 2025, 7:32pm UTC](https://community.omni.co/t/rank-sub-category-using-calcs-to-get-things-like-top-10-subcategories/316 "2025-04-28T19:32:21Z")

</div>

This pattern is designed to give you a quick ranking so you can isolate the top X of a subcategory in your workbook but also shows how you can promote this logic to be reusable and more scalable in the model layer. Setu…

---

## [Improving AI Answer Quality: A Practical Guide](https://community.omni.co/t/improving-ai-answer-quality-a-practical-guide/356)

<div class="topic-metadata">

**Author:** [@arielle](https://community.omni.co/u/arielle)\
**Replies:** 0\
**Last updated:** [July 10, 2025, 5:24pm UTC](https://community.omni.co/t/improving-ai-answer-quality-a-practical-guide/356 "2025-07-10T17:24:58Z")

</div>

Improving AI Answer Quality: A Practical Guide Making your datasets AI-ready doesn’t need to be complicated. In fact, most of the steps are things you’re probably already doing to make data understandable to humans - now…

---

## [Embedding Custom Fields (EAV / Key-value / json custom fields per customer)](https://community.omni.co/t/embedding-custom-fields-eav-key-value-json-custom-fields-per-customer/339)

<div class="topic-metadata">

**Author:** [@russ](https://community.omni.co/u/russ)\
**Replies:** 0\
**Last updated:** [June 18, 2025, 1:58am UTC](https://community.omni.co/t/embedding-custom-fields-eav-key-value-json-custom-fields-per-customer/339 "2025-06-18T01:58:39Z")

</div>

I’m very happy to show how Omni is able to easily handle one of the most challenging scenarios in analytics: embedding custom fields. In this guide we’ll cover the problem statement, a brief overview of the conceptual so…

---

## [Working with Stored Procedures](https://community.omni.co/t/working-with-stored-procedures/329)

<div class="topic-metadata">

**Author:** [@adrienb](https://community.omni.co/u/adrienb)\
**Replies:** 0\
**Last updated:** [May 16, 2025, 8:52pm UTC](https://community.omni.co/t/working-with-stored-procedures/329 "2025-05-16T20:52:21Z")

</div>

Stored procedures are a common way to make SQL logic reusable at the database level by predefining a set of instructions. They may provide performance, security, and traceability benefits as well as enabling code consoli…

---

## [Working with dynamic schemas](https://community.omni.co/t/working-with-dynamic-schemas/99)

<div class="topic-metadata">

**Author:** [@conor](https://community.omni.co/u/conor)\
**Replies:** 0\
**Last updated:** [June 7, 2024, 8:09am UTC](https://community.omni.co/t/working-with-dynamic-schemas/99 "2024-06-07T08:09:09Z")

</div>

Dynamic schemas Dynamic schemas are a useful concept to implement when your data is partitioned into separate, but identical schemas. In industry, this is referred to as a single tenant database architecture. Suppose we…

---

## [Dashboard Tabs Preserving Filter Selection](https://community.omni.co/t/dashboard-tabs-preserving-filter-selection/221)

<div class="topic-metadata">

**Author:** [@russ](https://community.omni.co/u/russ)\
**Replies:** 0\
**Last updated:** [January 28, 2025, 4:59pm UTC](https://community.omni.co/t/dashboard-tabs-preserving-filter-selection/221 "2025-01-28T16:59:09Z")

</div>

If you’re migrating to Omni from a product that has tabbed dashboards, you may have wished you could make a filter selection on one tab and apply those same filters across other tabs. You can! Using our markdown visualiz…

---

## [Comparing metrics over arbitrary periods](https://community.omni.co/t/comparing-metrics-over-arbitrary-periods/280)

<div class="topic-metadata">

**Author:** [@kylee](https://community.omni.co/u/kylee)\
**Replies:** 0\
**Last updated:** [March 22, 2025, 1:49am UTC](https://community.omni.co/t/comparing-metrics-over-arbitrary-periods/280 "2025-03-22T01:49:05Z")

</div>

Omni’s native Period-over-Period comparison is a powerful way to analyze trends between related time frames, such as comparing performance across weeks, months, or years. But what if you need to compare two periods that …

---

## [Automating Complex Assignments in Omni with CSV Uploads and Saved Query Views: A Step-by-Step Guide](https://community.omni.co/t/automating-complex-assignments-in-omni-with-csv-uploads-and-saved-query-views-a-step-by-step-guide/267)

<div class="topic-metadata">

**Author:** [@jade](https://community.omni.co/u/jade)\
**Replies:** 0\
**Last updated:** [March 14, 2025, 5:01pm UTC](https://community.omni.co/t/automating-complex-assignments-in-omni-with-csv-uploads-and-saved-query-views-a-step-by-step-guide/267 "2025-03-14T17:01:09Z")

</div>

In this tutorial, we’ll explore how to leverage input tables to combine a results set and a lookup table with complex criteria, all within Omni. Specifically, we’ll demonstrate how to dynamically assign campaign managers…

---

## [XmR Charts in Omni](https://community.omni.co/t/xmr-charts-in-omni/258)

<div class="topic-metadata">

**Author:** [@sarah](https://community.omni.co/u/sarah)\
**Replies:** 0\
**Last updated:** [March 11, 2025, 6:44pm UTC](https://community.omni.co/t/xmr-charts-in-omni/258 "2025-03-11T18:44:17Z")

</div>

We’ve had a few folks interested in using XmR charts in Omni, and while we don’t have an XmR-specific chart type, we can use calculations to recreate them in a fairly straightforward way with our line charts. I recently …

---

## [Can you provide some example dashboard themes?](https://community.omni.co/t/can-you-provide-some-example-dashboard-themes/180)

<div class="topic-metadata">

**Author:** [@sarah](https://community.omni.co/u/sarah)\
**Replies:** 5\
**Last updated:** [February 13, 2025, 10:07pm UTC](https://community.omni.co/t/can-you-provide-some-example-dashboard-themes/180 "2025-02-13T22:07:35Z")

</div>

Recently Omni demoed some fun seasonal themes to show off the additional dashboard theming capabilities. I thought it’d be fun to share additional variations to demonstrate how the exact same content can get a totally di…

---

## [Link to sections on an Omni Dashboard](https://community.omni.co/t/link-to-sections-on-an-omni-dashboard/230)

<div class="topic-metadata">

**Author:** [@russ](https://community.omni.co/u/russ)\
**Replies:** 0\
**Last updated:** [February 10, 2025, 1:33pm UTC](https://community.omni.co/t/link-to-sections-on-an-omni-dashboard/230 "2025-02-10T13:33:57Z")

</div>

You might have wondered if you can link to sections on an Omni dashboard, half way or 2/3s of the way down the page or anywhere within. Yes you can! This article will show how you can use markdown and text tiles, and a…

---

## [Tricks for filtering dimensions that you're pivoting on](https://community.omni.co/t/tricks-for-filtering-dimensions-that-youre-pivoting-on/100)

<div class="topic-metadata">

**Author:** [@conor](https://community.omni.co/u/conor)\
**Replies:** 1\
**Last updated:** [February 1, 2025, 9:06pm UTC](https://community.omni.co/t/tricks-for-filtering-dimensions-that-youre-pivoting-on/100 "2025-02-01T21:06:07Z")

</div>

Here’s a neat workflow to get the limit your pivot to the top 20 values. In this example I’ll work with eCommerce product data and use Omni’s filter by query feature. First off, we’ll make a tab called Top 20 Products …

---

## [Rolling Fact Table With Dynamic Look-back Window](https://community.omni.co/t/rolling-fact-table-with-dynamic-look-back-window/201)

<div class="topic-metadata">

**Author:** [@colin](https://community.omni.co/u/colin)\
**Replies:** 0\
**Last updated:** [December 12, 2024, 5:21pm UTC](https://community.omni.co/t/rolling-fact-table-with-dynamic-look-back-window/201 "2024-12-12T17:21:38Z")

</div>

Here’s a quick pattern for building a dynamic fact table with some parameterization. The use case would be trying to understand spend over a 7, 14, 28 day look-back window, and potentially even cohort against those user…

---

## [Creating a tabbed experience in an embedded dashboard](https://community.omni.co/t/creating-a-tabbed-experience-in-an-embedded-dashboard/132)

<div class="topic-metadata">

**Author:** [@jack](https://community.omni.co/u/jack)\
**Replies:** 2\
**Last updated:** [December 11, 2024, 10:54pm UTC](https://community.omni.co/t/creating-a-tabbed-experience-in-an-embedded-dashboard/132 "2024-12-11T22:54:56Z")

</div>

While tabbed dashboards are on the way, there are currently a few creative solutions to provide users a tabbed experience or navigation across dashboards within the iframe. The two main mechanisms for this are linking a…

---

## [How to Create a Measure That is Blank for Certain Levels of Aggregation](https://community.omni.co/t/how-to-create-a-measure-that-is-blank-for-certain-levels-of-aggregation/194)

<div class="topic-metadata">

**Author:** [@conor](https://community.omni.co/u/conor)\
**Replies:** 0\
**Last updated:** [December 3, 2024, 10:59am UTC](https://community.omni.co/t/how-to-create-a-measure-that-is-blank-for-certain-levels-of-aggregation/194 "2024-12-03T10:59:08Z")

</div>

With great power comes great responsibility Creating dynamic dashboards that adapt to different needs can provide tremendous flexibility. By incorporating features like a timeframe selector, field control, or templated f…

---

## [How do I filter on a long list of emails or IDs](https://community.omni.co/t/how-do-i-filter-on-a-long-list-of-emails-or-ids/187)

<div class="topic-metadata">

**Author:** [@jack](https://community.omni.co/u/jack)\
**Replies:** 0\
**Last updated:** [November 12, 2024, 6:45pm UTC](https://community.omni.co/t/how-do-i-filter-on-a-long-list-of-emails-or-ids/187 "2024-11-12T18:45:20Z")

</div>

The three main options here will be to (1) define a field where it creates a true/false flag that filters on those 1200, (2) use the filter by query functionality or (3) to drop them into the SQL statement directly. For…

---

## [Binning & Regrouping Aggregates / Creating a "histogram"](https://community.omni.co/t/binning-regrouping-aggregates-creating-a-histogram/152)

<div class="topic-metadata">

**Author:** [@conner](https://community.omni.co/u/conner)\
**Replies:** 0\
**Last updated:** [September 16, 2024, 7:42pm UTC](https://community.omni.co/t/binning-regrouping-aggregates-creating-a-histogram/152 "2024-09-16T19:42:56Z")

</div>

A common workflow is taking a table, aggregating it, and then analyzing patterns in the aggregation. For example: take an orders table, aggregate it to count of orders per user, and then understand % of users per count o…

---

## [Merging Queries](https://community.omni.co/t/merging-queries/151)

<div class="topic-metadata">

**Author:** [@conner](https://community.omni.co/u/conner)\
**Replies:** 0\
**Last updated:** [September 16, 2024, 7:20pm UTC](https://community.omni.co/t/merging-queries/151 "2024-09-16T19:20:40Z")

</div>

TL;DR: How to combine queries across tables on a foreign key Sometimes the join between two tables is easy, like joining orders to products on product\_id. But sometimes it’s more complex. For example, let’s say you wan…

---

## [How can I share logic across multiple models? (Hub and spoke)](https://community.omni.co/t/how-can-i-share-logic-across-multiple-models-hub-and-spoke/150)

<div class="topic-metadata">

**Author:** [@liam](https://community.omni.co/u/liam)\
**Replies:** 0\
**Last updated:** [September 13, 2024, 1:03pm UTC](https://community.omni.co/t/how-can-i-share-logic-across-multiple-models-hub-and-spoke/150 "2024-09-13T13:03:57Z")

</div>

UPDATE: We now support “extension models”. These are often a cleaner way to share logic across departments. Docs coming soon Omni allows you to create templated models, which can be shared across different models in you…

---

## [How do I stop "Comparison Period" changes from breaking my KPI tile comparisons?](https://community.omni.co/t/how-do-i-stop-comparison-period-changes-from-breaking-my-kpi-tile-comparisons/143)

<div class="topic-metadata">

**Author:** [@liam](https://community.omni.co/u/liam)\
**Replies:** 0\
**Last updated:** [August 22, 2024, 1:37pm UTC](https://community.omni.co/t/how-do-i-stop-comparison-period-changes-from-breaking-my-kpi-tile-comparisons/143 "2024-08-22T13:37:56Z")

</div>

Out-of-the-box Period over Period and KPI tiles are very popular features in Omni. But sometimes they can break when used together. That’s because the KPI tile comparison is pointing to a particular column name (eg. Prev…

---

## [Creating an override style filter](https://community.omni.co/t/creating-an-override-style-filter/137)

<div class="topic-metadata">

**Author:** [@jack](https://community.omni.co/u/jack)\
**Replies:** 0\
**Last updated:** [August 9, 2024, 6:18pm UTC](https://community.omni.co/t/creating-an-override-style-filter/137 "2024-08-09T18:18:40Z")

</div>

Occasionally, you may want a query view to have a default filter set from the base table, and then be able to override that filter. We can use mustache templating within the definition of the query view to achieve this. …

---

## [How can I dynamically show YTD/QTD/MTD metrics in the KPI tiles on my dashboard?](https://community.omni.co/t/how-can-i-dynamically-show-ytd-qtd-mtd-metrics-in-the-kpi-tiles-on-my-dashboard/124)

<div class="topic-metadata">

**Author:** [@jack](https://community.omni.co/u/jack)\
**Replies:** 0\
**Last updated:** [July 18, 2024, 6:08pm UTC](https://community.omni.co/t/how-can-i-dynamically-show-ytd-qtd-mtd-metrics-in-the-kpi-tiles-on-my-dashboard/124 "2024-07-18T18:08:29Z")

</div>

We can do this in Omni by leveraging the Parent Control functionality on the dashboard. Adding a time frame control To begin, we will create a control for our timeframe that we wish to swap between, such as a Created\_A…

[Next page](https://community.omni.co/c/patterns/9.md?page=1)
