@@ -97,6 +97,7 @@ DataController.prototype.setData = function (data) {
9797
9898 this . _dataStack [ this . _dataStack . length - 1 ] . data = data ;
9999 //this.data = data;
100+ this . setLeftHeaderColumnsNumber ( data ) ; // required in resetDimensionProps()
100101 this . resetDimensionProps ( ) ;
101102 this . resetConditionalFormatting ( ) ;
102103 this . resetRawData ( ) ;
@@ -130,13 +131,16 @@ DataController.prototype.setDrillThroughHandler = function (handler) {
130131 */
131132DataController . prototype . resetDimensionProps = function ( ) {
132133
133- var data , columnProps = [ ] ;
134+ var data , columnProps ;
134135
135136 if ( ! ( data = this . _dataStack [ this . _dataStack . length - 1 ] . data ) ) {
136137 console . error ( "Unable to get dimension props for given data set." ) ;
137138 return ;
138139 }
139140
141+ columnProps = new Array ( data . info . leftHeaderColumnsNumber || 0 ) ; // fill left headers as empty
142+ for ( var i = 0 ; i < columnProps . length ; i ++ ) { columnProps [ i ] = { } ; }
143+
140144 var cloneObj = function ( obj ) {
141145 var i , newObj = { } ;
142146 for ( i in obj ) newObj [ i ] = obj [ i ] ;
@@ -153,12 +157,14 @@ DataController.prototype.resetDimensionProps = function () {
153157 if ( tObj [ "style" ] ) clonedProps [ "style" ] =
154158 ( clonedProps [ "style" ] || "" ) + tObj [ "style" ] ;
155159 if ( tObj [ "summary" ] ) clonedProps [ "summary" ] = tObj [ "summary" ] ;
160+ // somehow "summary" were changed to "total" - reapplying
161+ if ( tObj [ "total" ] ) clonedProps [ "summary" ]
162+ = ( tObj [ "total" ] || "" ) . toLowerCase ( ) . replace ( / : .* / , "" ) ; // what is "max:Days"?
156163 if ( tObj [ "type" ] ) clonedProps [ "type" ] = tObj [ "type" ] ;
157164 parse ( tObj , clonedProps ) ;
158165 }
159166 } else {
160- clonedProps = cloneObj ( props ) ;
161- columnProps . push ( clonedProps ) ;
167+ columnProps . push ( cloneObj ( props ) ) ;
162168 }
163169 } ;
164170
@@ -270,11 +276,16 @@ DataController.prototype.resetConditionalFormatting = function () {
270276 * @see getTotalFunction
271277 */
272278DataController . prototype . TOTAL_FUNCTIONS = {
279+
280+ isNumber : function ( a ) {
281+ if ( a == "" ) return false ;
282+ return isFinite ( a ) ;
283+ } ,
273284
274285 totalSUM : function ( array , iStart , iEnd , column ) {
275286 var sum = 0 ;
276287 for ( var i = iStart ; i < iEnd ; i ++ ) {
277- if ( isFinite ( array [ i ] [ column ] [ "value" ] ) ) {
288+ if ( this . isNumber ( array [ i ] [ column ] [ "value" ] ) ) {
278289 sum += parseFloat ( array [ i ] [ column ] [ "value" ] ) || 0 ;
279290 }
280291 }
@@ -284,7 +295,7 @@ DataController.prototype.TOTAL_FUNCTIONS = {
284295 totalAVG : function ( array , iStart , iEnd , column ) {
285296 var sum = 0 ;
286297 for ( var i = iStart ; i < iEnd ; i ++ ) {
287- if ( ! isFinite ( array [ i ] [ column ] [ "value" ] ) ) {
298+ if ( ! this . isNumber ( array [ i ] [ column ] [ "value" ] ) ) {
288299 sum = 0 ;
289300 break ;
290301 }
@@ -300,7 +311,7 @@ DataController.prototype.TOTAL_FUNCTIONS = {
300311 totalMIN : function ( array , iStart , iEnd , column ) {
301312 var min = Infinity ;
302313 for ( var i = iStart ; i < iEnd ; i ++ ) {
303- if ( isFinite ( array [ i ] [ column ] [ "value" ] ) && array [ i ] [ column ] [ "value" ] < min ) {
314+ if ( this . isNumber ( array [ i ] [ column ] [ "value" ] ) && array [ i ] [ column ] [ "value" ] < min ) {
304315 min = array [ i ] [ column ] [ "value" ] ;
305316 }
306317 }
@@ -310,7 +321,7 @@ DataController.prototype.TOTAL_FUNCTIONS = {
310321 totalMAX : function ( array , iStart , iEnd , column ) {
311322 var max = - Infinity ;
312323 for ( var i = iStart ; i < iEnd ; i ++ ) {
313- if ( isFinite ( array [ i ] [ column ] [ "value" ] ) && array [ i ] [ column ] [ "value" ] > max ) {
324+ if ( this . isNumber ( array [ i ] [ column ] [ "value" ] ) && array [ i ] [ column ] [ "value" ] > max ) {
314325 max = array [ i ] [ column ] [ "value" ] ;
315326 }
316327 }
@@ -332,6 +343,21 @@ DataController.prototype.TOTAL_FUNCTIONS = {
332343
333344} ;
334345
346+ DataController . prototype . setLeftHeaderColumnsNumber = function ( data ) {
347+
348+ function getLev ( o , lev ) {
349+ if ( ! ( o . children instanceof Array ) ) return lev ;
350+ var nextLev = lev + 1 ;
351+ for ( var i = 0 ; i < o . children . length ; i ++ ) {
352+ lev = Math . max ( getLev ( o . children [ i ] , nextLev ) , lev ) ;
353+ }
354+ return lev ;
355+ }
356+
357+ data . info . leftHeaderColumnsNumber = getLev ( { children : data . dimensions [ 1 ] || [ ] } , 0 ) ;
358+
359+ } ;
360+
335361/**
336362 * Renders table data (pseudo-table object) from data retrieved from MDX2JSON source.
337363 *
@@ -540,7 +566,7 @@ DataController.prototype.resetRawData = function () {
540566 var pivotDefault = _ . controller . getPivotProperty ( [ "rowTotalAgg" ] ) ;
541567 if ( ! data [ "columnProps" ] [ columnIndex ] && ! pivotDefault )
542568 return _ . TOTAL_FUNCTIONS . totalSUM ;
543- switch ( data [ "columnProps" ] [ columnIndex ] . summary || pivotDefault ) {
569+ switch ( ( data [ "columnProps" ] [ columnIndex ] || { } ) . summary || pivotDefault ) {
544570 case "count" : return _ . TOTAL_FUNCTIONS . totalCOUNT ;
545571 case "avg" : return _ . TOTAL_FUNCTIONS . totalAVG ;
546572 case "min" : return _ . TOTAL_FUNCTIONS . totalMIN ;
@@ -570,7 +596,7 @@ DataController.prototype.resetRawData = function () {
570596 applyHeaderStyle ( summary [ i ] , false ) ;
571597 } else {
572598 summary [ i ] = {
573- value : getTotalFunction ( parseInt ( i ) - data . info . leftHeaderColumnsNumber ) . call (
599+ value : getTotalFunction ( parseInt ( i ) ) . call (
574600 this . TOTAL_FUNCTIONS ,
575601 rawData , xh , rawData . length , i , data . info . leftHeaderColumnsNumber
576602 ) ,
0 commit comments