diff options
author | Eike Rathke <erack@redhat.com> | 2016-06-07 16:30:45 +0200 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2016-06-07 15:54:55 +0000 |
commit | f6b76c9d7fa989ac9475ff6d2ab45c257f96ad3e (patch) | |
tree | 14bef5530aa71a198c86a97545e3b43697e8b440 | |
parent | c34baeeca744498d39b116d7bc7739905195daca (diff) |
Resolves: tdf#89186 descend into dimension children to obtain leaf result
(cherry picked from commit 81f2bbc2fc42688d5f884d3dde58abe4c265694a)
Backported.
Change-Id: Iea6c292c6d7347c4abb221672e583118196e6c1f
Reviewed-on: https://gerrit.libreoffice.org/26026
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Eike Rathke <erack@redhat.com>
-rw-r--r-- | sc/source/core/data/dpresfilter.cxx | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/sc/source/core/data/dpresfilter.cxx b/sc/source/core/data/dpresfilter.cxx index f66e7f116766..bed460df4630 100644 --- a/sc/source/core/data/dpresfilter.cxx +++ b/sc/source/core/data/dpresfilter.cxx @@ -219,6 +219,24 @@ const ScDPResultTree::ValuesType* ScDPResultTree::getResults( pMember = itMem->second; } + if (pMember->maValues.empty()) + { + // Descend into dimension member children while there is no result and + // exactly one dimension field with exactly one member item, for which + // no further constraint (filter) has to match. + const MemberNode* pFieldMember = pMember; + while (pFieldMember->maChildDimensions.size() == 1) + { + DimensionsType::const_iterator itDim( pFieldMember->maChildDimensions.begin()); + const DimensionNode* pDim = itDim->second; + if (pDim->maChildMembers.size() != 1) + break; // while + pFieldMember = pDim->maChildMembers.begin()->second; + if (!pFieldMember->maValues.empty()) + return &pFieldMember->maValues; + } + } + return &pMember->maValues; } |