# Compare table windowing and SAQL time series

*CRM Analytics and Einstein Discovery Consultant Study Guide · Analytics Dashboard Implementation · Last updated November 3, 2026 · https://www.certifyforce.com/study-guide/crm-analytics-and-einstein-discovery-consultant/analytics-dashboard-implementation/compare-table-windowing-and-saql-time-series*

The compare table's window functions and the SAQL they generate: row ranges, reset groups and ordering rules, rank versus dense rank, period-over-period grouping, and forecasting with fill and timeseries, including its licence requirement.

- Certification: Salesforce CRM Analytics and Einstein Discovery Consultant
- Exam section: Analytics Dashboard Implementation
- Study guide: https://www.certifyforce.com/study-guide/crm-analytics-and-einstein-discovery-consultant

**Official exam objective:**

> Given business requirements, use advanced functionality such as windowing and time series analysis within compare tables.

## What the exam expects

- Pick the compare table function (Sliding Window, Percentage of Group, Rank Within Group, Period Over Period, Change from Previous, Running Total) from a business requirement, with the right reset group.
- Read and write SAQL windowing: row ranges, `partition by`, `order by`, and the rules that make an expression invalid.
- Predict ranking results with ties for `rank()`, `dense_rank()`, `cume_dist()` and `row_number()`.
- Forecast with `timeseries`, preparing gaps with `fill`, handling a partial last period, and knowing what an org without the right licence gets back.

Key terms: **compare table** (a lens table whose columns hold formulas and window functions on measures); **window function** (an aggregate over a range of adjacent groups that doesn't change the row count); **row range** (the window, such as `[-2 .. 0]`); **reset group** (`partition by` columns that restart the calculation); **timeseries** (the SAQL statement that predicts future data points).

## Key facts

| Fact | Detail | Source |
|---|---|---|
| Windowing and row count | Doesn't change the number of rows returned | [Windowing](https://developer.salesforce.com/docs/analytics/bi-dev-guide-saql/guide/bi-saql-functions-windowing.html) |
| `[..]` with sum, avg, min or max | `order by` not allowed | [Windowing](https://developer.salesforce.com/docs/analytics/bi-dev-guide-saql/guide/bi-saql-functions-windowing.html) |
| Ungrouped query | Windowing not available | [Windowing](https://developer.salesforce.com/docs/analytics/bi-dev-guide-saql/guide/bi-saql-functions-windowing.html) |
| `partition by all` | No reset boundaries | [Windowing](https://developer.salesforce.com/docs/analytics/bi-dev-guide-saql/guide/bi-saql-functions-windowing.html) |
| Period Over Period | Group by year first; compound dates allowed | [Compare Table Functions](https://help.salesforce.com/s/articleView?id=analytics.bi_explorer_compare_functions.htm&type=5&language=en_US) |
| Formula columns | Can't be filtered | [Custom Formulas](https://help.salesforce.com/s/articleView?id=analytics.bi_explorer_compare_table.htm&type=5&language=en_US) |
| `timeseries` licence | Growth or Plus for full results; otherwise 1 forecast period | [timeseries](https://developer.salesforce.com/docs/analytics/bi-dev-guide-saql/guide/bi-saql-statement-timeseries.html) |
| `timeseries` position | After a projection statement | [timeseries](https://developer.salesforce.com/docs/analytics/bi-dev-guide-saql/guide/bi-saql-statement-timeseries.html) |
| `ignoreLast` default | `false` | [timeseries](https://developer.salesforce.com/docs/analytics/bi-dev-guide-saql/guide/bi-saql-statement-timeseries.html) |
| `predictionInterval` | 80 or 95 | [timeseries](https://developer.salesforce.com/docs/analytics/bi-dev-guide-saql/guide/bi-saql-statement-timeseries.html) |
| Seasonal monthly model | At least 24 data points | [timeseries](https://developer.salesforce.com/docs/analytics/bi-dev-guide-saql/guide/bi-saql-statement-timeseries.html) |
| Pivot table | Last grouping sets the columns; cells show the first measure | [Table Widget](https://help.salesforce.com/s/articleView?id=analytics.bi_dashboard_widgets_table_add_flex.htm&type=5&language=en_US) |
| `fill` gaps | Adds missing periods with null values | [fill](https://developer.salesforce.com/docs/analytics/bi-dev-guide-saql/guide/bi-saql-statement-fill.html) |

## Check yourself

- Why doesn't adding a window column change a table's row count?
- When must a compare table formula use raw field names instead of A, B, C?
- What does `timeseries` return when it receives no data?
- When does `fill` ignore its `startDate` and `endDate`?

## Sources

- [Window Functions Available in the Compare Table](https://help.salesforce.com/s/articleView?id=analytics.bi_explorer_compare_functions.htm&type=5&language=en_US)
- [Windowing Functions (SAQL)](https://developer.salesforce.com/docs/analytics/bi-dev-guide-saql/guide/bi-saql-functions-windowing.html)
- [timeseries (SAQL)](https://developer.salesforce.com/docs/analytics/bi-dev-guide-saql/guide/bi-saql-statement-timeseries.html)
- [fill (SAQL)](https://developer.salesforce.com/docs/analytics/bi-dev-guide-saql/guide/bi-saql-statement-fill.html)
- [Add Custom Formulas to Columns](https://help.salesforce.com/s/articleView?id=analytics.bi_explorer_compare_table.htm&type=5&language=en_US)
- [SAQL Developer Guide: Overview](https://developer.salesforce.com/docs/analytics/bi-dev-guide-saql/guide/bi-saql-intro.html)
- [Add a Table Widget to Show Record Details and Create Calculated Columns](https://help.salesforce.com/s/articleView?id=analytics.bi_dashboard_widgets_table_add_flex.htm&type=5&language=en_US)
- [CRM Analytics and Einstein Discovery Consultant Exam Guide](https://help.salesforce.com/s/articleView?id=005298935&language=en_US&type=1)

## About the full unit

The "Core concepts", "Exam traps" and "Worked scenario" sections of this unit, its 8 linked practice questions, and unlimited timed mock exams are included with the CRM Analytics and Einstein Discovery Consultant pack (USD $19): https://www.certifyforce.com/practice-exams
