summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2016-06-07 16:30:45 +0200
committerCaolán McNamara <caolanm@redhat.com>2016-06-09 11:10:53 +0000
commit7a3be3a229d10665d724ffc215c9dca4ab8dd0bc (patch)
tree4c6ebb74b51bac73f695204d25e615671afe2f86 /sc
parent0525de4392491aa267c719dda09e3a068cdb413d (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/26028 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'sc')
-rw-r--r--sc/source/core/data/dpresfilter.cxx18
1 files changed, 18 insertions, 0 deletions
diff --git a/sc/source/core/data/dpresfilter.cxx b/sc/source/core/data/dpresfilter.cxx
index a416bc3a527e..cffc05af74f4 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;
}