@@ -74,9 +74,18 @@ var attrs = exports.attributes = {
7474                'the first (last) linked value.' 
7575            ] . join ( ' ' ) 
7676        } , 
77+         enabled : { 
78+             valType : 'boolean' , 
79+             dflt : true , 
80+             description : [ 
81+                 'Determines whether this aggregation function is enabled or disabled.' 
82+             ] . join ( ' ' ) 
83+         } 
7784    } 
7885} ; 
7986
87+ var  aggAttrs  =  attrs . aggregations ; 
88+ 
8089/** 
8190 * Supply transform attributes defaults 
8291 * 
@@ -129,20 +138,22 @@ exports.supplyDefaults = function(transformIn, traceOut) {
129138    } 
130139
131140    var  aggregationsIn  =  transformIn . aggregations ; 
132-     var  aggregationsOut  =  transformOut . aggregations  =  [ ] ; 
141+     var  aggregationsOut  =  transformOut . aggregations  =  new   Array ( aggregationsIn . length ) ; 
133142
134143    if ( aggregationsIn )  { 
135144        for ( i  =  0 ;  i  <  aggregationsIn . length ;  i ++ )  { 
136145            var  aggregationOut  =  { } ; 
137-             var  target  =  Lib . coerce ( aggregationsIn [ i ] ,  aggregationOut ,  attrs . aggregations ,  'target' ) ; 
138-             var  func  =  Lib . coerce ( aggregationsIn [ i ] ,  aggregationOut ,  attrs . aggregations ,  'func' ) ; 
146+             var  target  =  Lib . coerce ( aggregationsIn [ i ] ,  aggregationOut ,  aggAttrs ,  'target' ) ; 
147+             var  func  =  Lib . coerce ( aggregationsIn [ i ] ,  aggregationOut ,  aggAttrs ,  'func' ) ; 
148+             var  enabledi  =  Lib . coerce ( aggregationsIn [ i ] ,  aggregationOut ,  aggAttrs ,  'enabled' ) ; 
139149
140150            // add this aggregation to the output only if it's the first instance 
141151            // of a valid target attribute - or an unused target attribute with "count" 
142-             if ( target  &&  ( arrayAttrs [ target ]  ||  ( func  ===  'count'  &&  arrayAttrs [ target ]  ===  undefined ) ) )  { 
152+             if ( enabledi   &&   target  &&  ( arrayAttrs [ target ]  ||  ( func  ===  'count'  &&  arrayAttrs [ target ]  ===  undefined ) ) )  { 
143153                arrayAttrs [ target ]  =  0 ; 
144-                 aggregationsOut . push ( aggregationOut ) ; 
154+                 aggregationsOut [ i ]   =   aggregationOut ; 
145155            } 
156+             else  aggregationsOut [ i ]  =  { enabled : false } ; 
146157        } 
147158    } 
148159
@@ -151,7 +162,8 @@ exports.supplyDefaults = function(transformIn, traceOut) {
151162        if ( arrayAttrs [ arrayAttrArray [ i ] ] )  { 
152163            aggregationsOut . push ( { 
153164                target : arrayAttrArray [ i ] , 
154-                 func : attrs . aggregations . func . dflt 
165+                 func : aggAttrs . func . dflt , 
166+                 enabled : true 
155167            } ) ; 
156168        } 
157169    } 
@@ -189,11 +201,17 @@ exports.calcTransform = function(gd, trace, opts) {
189201    } 
190202
191203    if ( typeof  groups  ===  'string' )  { 
192-         aggregateOneArray ( gd ,  trace ,  groupings ,  { target : groups ,  func : 'first' } ) ; 
204+         aggregateOneArray ( gd ,  trace ,  groupings ,  { 
205+             target : groups , 
206+             func : 'first' , 
207+             enabled : true 
208+         } ) ; 
193209    } 
194210} ; 
195211
196212function  aggregateOneArray ( gd ,  trace ,  groupings ,  aggregation )  { 
213+     if ( ! aggregation . enabled )  return ; 
214+ 
197215    var  attr  =  aggregation . target ; 
198216    var  targetNP  =  Lib . nestedProperty ( trace ,  attr ) ; 
199217    var  arrayIn  =  targetNP . get ( ) ; 
0 commit comments