[FIX] pivot: carry forward running totals for missing date buckets#7714
Closed
[FIX] pivot: carry forward running totals for missing date buckets#7714
Conversation
Collaborator
hokolomopo
reviewed
Jan 15, 2026
4e455ef to
15e98b2
Compare
hokolomopo
reviewed
Jan 19, 2026
Contributor
hokolomopo
left a comment
There was a problem hiding this comment.
It looks way simpler now ! A small comment still 🙂
15e98b2 to
a5fdfa4
Compare
Collaborator
LucasLefevre
left a comment
There was a problem hiding this comment.
LGTM, thanks! 👌
Could you slightly increase the test coverage ? It's not straight forward, so the better it's tested, the better it is :)
c472dd4 to
9c5a5e7
Compare
9c5a5e7 to
8011e63
Compare
When a measure is displayed as "running total" and the pivot is grouped by a date/datetime granularity, PIVOT.VALUE could return an empty value when the requested bucket is not materialized in the pivot. This happened because the running-total cache only stores values for existing pivot buckets, so missing date keys had no direct lookup. For date/datetime dimensions, when a running-total lookup misses, traverse the row/col tree to find the nearest previous bucket within the same running-total group (respecting dimension order) and return its cumulative value. If the bucket is before the first one, return empty. Task: 5420999
8011e63 to
2d6211d
Compare
robodoo
pushed a commit
that referenced
this pull request
Feb 6, 2026
When a measure is displayed as "running total" and the pivot is grouped by a date/datetime granularity, PIVOT.VALUE could return an empty value when the requested bucket is not materialized in the pivot. This happened because the running-total cache only stores values for existing pivot buckets, so missing date keys had no direct lookup. For date/datetime dimensions, when a running-total lookup misses, traverse the row/col tree to find the nearest previous bucket within the same running-total group (respecting dimension order) and return its cumulative value. If the bucket is before the first one, return empty. closes #7714 Task: 5420999 Signed-off-by: Lucas Lefèvre (lul) <lul@odoo.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Description:
When a measure is displayed as "running total" and the pivot is grouped by a date granularity (month/day/etc), PIVOT.VALUE returned an empty value for a requested bucket that does not exist in the pivot. This happened because the running-total cache only stores values for materialized pivot buckets, so a missing date key had no direct lookup.
With this commit, for date/datetime dimensions, we build an ordered index of existing buckets per secondary domain and running-total group, and use a binary search to find the nearest previous bucket. If found, we return its cumulative value (carry-forward); if the requested bucket is before the first one, we return empty.
Task: 5420999
review checklist