syncfusion / JavaScript-Widgets

Syncfusion Essential JavaScript is a comprehensive collection of over 80+ enterprise-grade HTML5 JavaScript components for building modern web applications.
http://www.syncfusion.com/products/javascript
35 stars 36 forks source link

Summary Types with multiples values bug #16

Open romanalfaro opened 7 years ago

romanalfaro commented 7 years ago

I have found a bug. When we have more than one field on Value. The summary types "count" and "average" don´t work well.

If found the source of that problem on this function Syncfusion.PivotAnalysis._isMemberExist

Original:

          case "calc":
            for (s = !1, this._tableKeysCalcValues.length == 0 && this._tableKeysCalcValues.push(t), e = 0; e < this._tableKeysCalcValues.length; e++)
              if (t.uniqueName == this._tableKeysCalcValues[e].uniqueName) {
                s = !0;
                f = e;
                break
              }
            if (s)
              for (u = 0; u < i.keys.length; u++)
                if (this._tableKeysCalcValues[f].value == null) {
                  for (this._tableKeysCalcValues[f].value = i, this._tableKeysCalcValues[f].value.count = 1, o = 0; o < i.keys.length; o++) this._summaryTypes[o] == ej.PivotAnalysis.SummaryType.Count && (this._tableKeysCalcValues[f].value.keys[o] = this._tableKeysCalcValues[f].value.count);
                  break
                } else this._tableKeysCalcValues[f].value.count++, r.values[u].isCalculatedField != !0 && (this._tableKeysCalcValues[f].value.keys[u] = this._getSummaryValue(this._tableKeysCalcValues[f].value.keys[u], i.keys[u], this._tableKeysCalcValues[f].value.count, this._summaryTypes[u], r.values[u].format, r.values[u].formatString));
            else
              for (this._tableKeysCalcValues.push(t), this._tableKeysCalcValues[this._tableKeysCalcValues.length - 1].value = i, o = 0; o < i.keys.length; o++) this._summaryTypes[o] == ej.PivotAnalysis.SummaryType.Count && (this._tableKeysCalcValues[this._tableKeysCalcValues.length - 1].value.keys[o] = 1), this._tableKeysCalcValues[this._tableKeysCalcValues.length - 1].value.count = 1

Fixed:

    case "calc":
          for (s = !1, this._tableKeysCalcValues.length == 0 && this._tableKeysCalcValues.push(t), e = 0; e < this._tableKeysCalcValues.length; e++)
            if (t.uniqueName == this._tableKeysCalcValues[e].uniqueName) {
              s = !0;
              f = e;
              break
            }
          if (s)
            for (u = 0; u < i.keys.length; u++)
              if (this._tableKeysCalcValues[f].value == null) {
                for (this._tableKeysCalcValues[f].value = i, this._tableKeysCalcValues[f].value.count = 1, o = 0; o < i.keys.length; o++) this._summaryTypes[o] == ej.PivotAnalysis.SummaryType.Count && (this._tableKeysCalcValues[f].value.keys[o] = this._tableKeysCalcValues[f].value.count);
                break
              }
               else {
                 if(u==0)
                 this._tableKeysCalcValues[f].value.count++;
                 r.values[u].isCalculatedField != !0 && (this._tableKeysCalcValues[f].value.keys[u] = this._getSummaryValue(this._tableKeysCalcValues[f].value.keys[u], i.keys[u], this._tableKeysCalcValues[f].value.count, this._summaryTypes[u], r.values[u].format, r.values[u].formatString));
               }
          else
            for (this._tableKeysCalcValues.push(t), this._tableKeysCalcValues[this._tableKeysCalcValues.length - 1].value = i, o = 0; o < i.keys.length; o++) this._summaryTypes[o] == ej.PivotAnalysis.SummaryType.Count && (this._tableKeysCalcValues[this._tableKeysCalcValues.length - 1].value.keys[o] = 1), this._tableKeysCalcValues[this._tableKeysCalcValues.length - 1].value.count = 1

As can be appreciated I have added

 if(u==0)
                 this._tableKeysCalcValues[f].value.count++;
TamilarasuM commented 6 years ago

Version 15.4.0.17 solves this issue.