@@ -88,6 +88,10 @@ describe('PreAggregations', () => {
8888 type: 'string',
8989 sql: 'source'
9090 },
91+ sourceAndId: {
92+ type: 'string',
93+ sql: \`\${source} || '_' || \${id}\`,
94+ },
9195 createdAt: {
9296 type: 'time',
9397 sql: 'created_at'
@@ -220,6 +224,12 @@ describe('PreAggregations', () => {
220224 granularity: 'hour',
221225 partitionGranularity: 'month'
222226 },
227+ sourceAndIdRollup: {
228+ measures: [count],
229+ dimensions: [sourceAndId, source],
230+ timeDimension: createdAt,
231+ granularity: 'hour',
232+ }
223233 }
224234 })
225235
@@ -749,6 +759,103 @@ describe('PreAggregations', () => {
749759 } ) ;
750760 } ) ) ;
751761
762+ it ( 'non-leaf additive measure' , ( ) => compiler . compile ( ) . then ( ( ) => {
763+ const query = new PostgresQuery ( { joinGraph, cubeEvaluator, compiler } , {
764+ measures : [
765+ 'visitors_view.count'
766+ ] ,
767+ dimensions : [ 'visitors_view.sourceAndId' ] ,
768+ timezone : 'America/Los_Angeles' ,
769+ order : [ {
770+ id : 'visitors_view.sourceAndId'
771+ } ] ,
772+ preAggregationsSchema : ''
773+ } ) ;
774+
775+ const queryAndParams = query . buildSqlAndParams ( ) ;
776+ console . log ( queryAndParams ) ;
777+ const preAggregationsDescription = query . preAggregations ?. preAggregationsDescription ( ) ;
778+ console . log ( preAggregationsDescription ) ;
779+ expect ( ( < any > preAggregationsDescription ) [ 0 ] . loadSql [ 0 ] ) . toMatch ( / v i s i t o r s _ s o u r c e _ a n d _ i d _ r o l l u p / ) ;
780+
781+ return dbRunner . evaluateQueryWithPreAggregations ( query ) . then ( res => {
782+ expect ( res ) . toEqual (
783+ [
784+ {
785+ visitors_view__count : '1' ,
786+ visitors_view__source_and_id : 'google_3'
787+ } ,
788+ {
789+ visitors_view__count : '1' ,
790+ visitors_view__source_and_id : 'some_1'
791+ } ,
792+ {
793+ visitors_view__count : '1' ,
794+ visitors_view__source_and_id : 'some_2'
795+ } ,
796+ {
797+ visitors_view__count : '3' ,
798+ visitors_view__source_and_id : null
799+ }
800+ ]
801+ ) ;
802+ } ) ;
803+ } ) ) ;
804+
805+ it ( 'non-leaf additive measure with time dimension' , ( ) => compiler . compile ( ) . then ( ( ) => {
806+ const query = new PostgresQuery ( { joinGraph, cubeEvaluator, compiler } , {
807+ measures : [
808+ 'visitors_view.count'
809+ ] ,
810+ dimensions : [ 'visitors_view.sourceAndId' ] ,
811+ timezone : 'America/Los_Angeles' ,
812+ timeDimensions : [ {
813+ dimension : 'visitors_view.signedUpAt' ,
814+ granularity : 'day' ,
815+ dateRange : [ '2017-01-01' , '2017-01-30' ]
816+ } ] ,
817+ order : [ {
818+ id : 'visitors_view.createdAt' ,
819+ } , {
820+ id : 'visitors_view.sourceAndId'
821+ } ] ,
822+ preAggregationsSchema : ''
823+ } ) ;
824+
825+ const queryAndParams = query . buildSqlAndParams ( ) ;
826+ console . log ( queryAndParams ) ;
827+ const preAggregationsDescription = query . preAggregations ?. preAggregationsDescription ( ) ;
828+ console . log ( preAggregationsDescription ) ;
829+ expect ( ( < any > preAggregationsDescription ) [ 0 ] . loadSql [ 0 ] ) . toMatch ( / v i s i t o r s _ s o u r c e _ a n d _ i d _ r o l l u p / ) ;
830+
831+ return dbRunner . evaluateQueryWithPreAggregations ( query ) . then ( res => {
832+ expect ( res ) . toEqual (
833+ [
834+ {
835+ visitors_view__count : '1' ,
836+ visitors_view__signed_up_at_day : '2017-01-05T00:00:00.000Z' ,
837+ visitors_view__source_and_id : 'google_3'
838+ } ,
839+ {
840+ visitors_view__count : '1' ,
841+ visitors_view__signed_up_at_day : '2017-01-02T00:00:00.000Z' ,
842+ visitors_view__source_and_id : 'some_1'
843+ } ,
844+ {
845+ visitors_view__count : '1' ,
846+ visitors_view__signed_up_at_day : '2017-01-04T00:00:00.000Z' ,
847+ visitors_view__source_and_id : 'some_2'
848+ } ,
849+ {
850+ visitors_view__count : '2' ,
851+ visitors_view__signed_up_at_day : '2017-01-06T00:00:00.000Z' ,
852+ visitors_view__source_and_id : null
853+ }
854+ ]
855+ ) ;
856+ } ) ;
857+ } ) ) ;
858+
752859 it ( 'inherited original sql' , ( ) => compiler . compile ( ) . then ( ( ) => {
753860 const query = new PostgresQuery ( { joinGraph, cubeEvaluator, compiler } , {
754861 measures : [
0 commit comments