Skip to content

Commit 9666f24

Browse files
committed
fix: Single value non-additive pre-aggregation match in views
1 parent da119d0 commit 9666f24

File tree

2 files changed

+49
-2
lines changed

2 files changed

+49
-2
lines changed

packages/cubejs-schema-compiler/src/adapter/PreAggregations.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -672,7 +672,7 @@ export class PreAggregations {
672672
return flattenDimensionMembers
673673
.map(member => (
674674
{ [member.dimension]: PreAggregations.firstNonAliasMember(query, [member])[0] }
675-
));
675+
)).reduce((a, b) => ({ ...a, ...b }), {});
676676
}
677677

678678
static flattenDimensionMembers(query) {

packages/cubejs-schema-compiler/test/integration/postgres/pre-aggregations.test.ts

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,13 @@ describe('PreAggregations', () => {
173173
timeDimensionReference: createdAt,
174174
granularity: 'day'
175175
},
176+
uniqueSourceCountRollup: {
177+
type: 'rollup',
178+
measures: [uniqueSourceCount],
179+
dimensions: [source],
180+
timeDimension: createdAt,
181+
granularity: 'day'
182+
},
176183
forJoin: {
177184
type: 'rollup',
178185
dimensionReferences: [id, source]
@@ -458,7 +465,7 @@ describe('PreAggregations', () => {
458465
view('visitors_view', {
459466
cubes: [{
460467
join_path: visitors,
461-
includes: ['uniqueSourceCount', 'ratio', 'createdAt', 'signedUpAt']
468+
includes: ['uniqueSourceCount', 'ratio', 'createdAt', 'signedUpAt', 'source']
462469
}]
463470
});
464471
`);
@@ -645,6 +652,46 @@ describe('PreAggregations', () => {
645652
});
646653
}));
647654

655+
it('non-additive single value view filter', () => compiler.compile().then(() => {
656+
const query = new PostgresQuery({ joinGraph, cubeEvaluator, compiler }, {
657+
measures: [
658+
'visitors_view.uniqueSourceCount'
659+
],
660+
timeDimensions: [{
661+
dimension: 'visitors_view.signedUpAt',
662+
granularity: 'day',
663+
dateRange: ['2017-01-01', '2017-01-30']
664+
}],
665+
filters: [{
666+
dimension: 'visitors_view.source',
667+
operator: 'equals',
668+
values: ['google']
669+
}],
670+
timezone: 'America/Los_Angeles',
671+
order: [{
672+
id: 'visitors_view.createdAt'
673+
}],
674+
preAggregationsSchema: ''
675+
});
676+
677+
const queryAndParams = query.buildSqlAndParams();
678+
console.log(queryAndParams);
679+
const preAggregationsDescription = query.preAggregations?.preAggregationsDescription();
680+
console.log(preAggregationsDescription);
681+
expect((<any>preAggregationsDescription)[0].loadSql[0]).toMatch(/visitors_unique_source_count/);
682+
683+
return dbRunner.evaluateQueryWithPreAggregations(query).then(res => {
684+
expect(res).toEqual(
685+
[
686+
{
687+
visitors_view__signed_up_at_day: '2017-01-05T00:00:00.000Z',
688+
visitors_view__unique_source_count: '1'
689+
}
690+
]
691+
);
692+
});
693+
}));
694+
648695
it('inherited original sql', () => compiler.compile().then(() => {
649696
const query = new PostgresQuery({ joinGraph, cubeEvaluator, compiler }, {
650697
measures: [

0 commit comments

Comments
 (0)