2017-01-03 2 views
0

Я работаю на диаграмме слияния, используя Angularjs. Записи становятся беспорядочными, и в моей диаграмме слияния не отображаются несколько записей. Я не могу узнать, какую ошибку я совершил.Записи, смешавшиеся в диаграмме слияния с использованием Angularjs

Вот мои html и script

<div> 
    <div fusioncharts width="700" height="450" type="msstackedcolumn2d" dataSource="{{dataSource}}" categories="{{categories}}" chart="{{attrs}}" dataFormat= 'json' dataset="{{dataset}}" events="events"> 
    </div> 
    </div> 

script.js

var app = angular.module('HelloApp', ["ng-fusioncharts"]) 
app.controller('MyController', function($scope) { 
    $scope.chartoptions = { 
    "dataEmptyMessage": "No data to display <br> Do these steps..." 
    }; 
    data =[ 
    { 
    "product": "SBHL", 
    "bucket": ">90", 
    "allocatedAccount": 3005, 
    "collectedAccount": 0, 
    "pendingCollectionOfAccounts": 3005 
    }, 
    { 
    "product": "SBHL", 
    "bucket": "0-30", 
    "allocatedAccount": 4810, 
    "collectedAccount": 0, 
    "pendingCollectionOfAccounts": 4810 
    }, 
    { 
    "product": "SBHL", 
    "bucket": "31-60", 
    "allocatedAccount": 1610, 
    "collectedAccount": 0, 
    "pendingCollectionOfAccounts": 1610 
    }, 
    { 
    "product": "SBHL", 
    "bucket": "61-90", 
    "allocatedAccount": 793, 
    "collectedAccount": 0, 
    "pendingCollectionOfAccounts": 793 
    }, 
    { 
    "product": "SBML", 
    "bucket": ">90", 
    "allocatedAccount": 1084, 
    "collectedAccount": 0, 
    "pendingCollectionOfAccounts": 1084 
    }, 
    { 
    "product": "SBML", 
    "bucket": "0-30", 
    "allocatedAccount": 1583, 
    "collectedAccount": 0, 
    "pendingCollectionOfAccounts": 1583 
    }, 
    { 
    "product": "SBML", 
    "bucket": "31-60", 
    "allocatedAccount": 473, 
    "collectedAccount": 0, 
    "pendingCollectionOfAccounts": 473 
    }, 
    { 
    "product": "SBML", 
    "bucket": "61-90", 
    "allocatedAccount": 273, 
    "collectedAccount": 0, 
    "pendingCollectionOfAccounts": 273 
    } 
] 
$scope.attrs = { 
       "palette":"3", 
       "numdivlines":'3', 
       "numberprefix": "", 
       "useRoundEdges":"1", 
       "bgcolor": "FFFFFF,FFFFFF", 
       "showalternatehgridcolor": "1", 
       "showvalues": "0", 
       "yaxismaxvalue": "1000", 
       "showLegend":"1", 
       "showborder": "0", 
       "labelDisplay": "wrap", 
       "yAxisName": "Number Of Accounts", 
       "maxLabelHeight":"150" 
      }; 
console.log($scope.records); 
var products = []; 
    var buckets = []; 
    var catObject = []; 
    var catCollection = []; 
    var item = {}; 
    var seriesItem = {}; 
    var catHolder = {}; 
    var valHolder = {}; 
    var valCollection = []; 
    var allocatedCollection = []; 
    var collectedCollection = []; 
    var allocatedDataSet = []; 
    var collectedDataSet = []; 
    var dataSet = []; 
    var tempDataSet = {}; 
    var maxYaxisVal =0; 


     $scope.dataset2 = data 
      for (var i = 0, l = data.length; i < l; i++) { 

       if(data[i].allocatedAccount > maxYaxisVal) 
       { 
         maxYaxisVal = data[i].allocatedAccount; 
       } 
       if(data[i].collectedAccount > maxYaxisVal) 
       { 
         maxYaxisVal = data[i].collectedAccount; 
       } 

       if (products.indexOf(data[i].product)== -1) 
       { 
        item = {}; 
        item["label"] = "Allocated\tCollected " + data[i].product; 
        item["font"] = "Arial"; 
        item["fontsize"] = "15"; 

        catObject.push(item); 
        products.push(data[i].product); 
        console.log(products) 
       } 

       console.log(data[i].collectedAccount); 
        //console.log(data[i].bucket); 
        if ((i == (data.length - 1))) { 
        valHolder = {}; 
        valHolder["value"] = data[i].allocatedAccount; 
        allocatedCollection.push(valHolder); 
        valHolder = {}; 
        valHolder["value"] = data[i].collectedAccount; 
        collectedCollection.push(valHolder); 
        } 

       if ((buckets.indexOf(data[i].bucket)) || (i == (data.length-1))) 
       { 


        //console.log(data[i].product); 
        if((buckets.length > 0)) 
         { 
          seriesItem = {}; 
          seriesItem["seriesname"] = data[i-1].bucket + " allocated"; 
          seriesItem["data"] = allocatedCollection; 
          allocatedDataSet.push(seriesItem); 

          seriesItem = {}; 
          seriesItem["seriesname"] = data[i-1].bucket + " collected"; 

          seriesItem["data"] = collectedCollection; 
          collectedDataSet.push(seriesItem); 
          collectedCollection = []; 
          allocatedCollection = []; 

         } 
        buckets.push(data[i].bucket); 
       } 
       valHolder = {}; 
       valHolder["value"] = data[i].allocatedAccount; 
       allocatedCollection.push(valHolder); 
       valHolder = {}; 
       valHolder["value"] = data[i].collectedAccount; 
       collectedCollection.push(valHolder); 

        // valCollection.push(valHolder); 
       //console.log(collectedCollection); 

      } 
      catHolder["category"] = catObject ; 
      catCollection.push(catHolder); 


      tempDataSet["dataset"] = allocatedDataSet; 


      dataSet.push(tempDataSet); 
      tempDataSet = {}; 
      tempDataSet["dataset"] = collectedDataSet; 
      dataSet.push(tempDataSet); 

      $scope.categories = JSON.stringify(catCollection); 
      $scope.dataset = JSON.stringify(dataSet); 
     console.log(JSON.stringify(dataSet)); 
     $scope.attrs.yaxismaxvalue = maxYaxisVal; 
     }); 

Как вы, возможно, заметили, есть 2 вида продукта в формате JSON 1. SBHL и 2. SBML, и каждый продукт в качестве разного ведра в json. 1. ведро: «> 90» 2.bucket: «0-30» 3.bucket: «31-60» и 4. ковш: «61-90». Но, во время работы слитого графика я получаю SBML запись также в SBHL, а также несколько ведер пропали без вести (ведра «:» 61-90"). Можете ли вы найти решение для этого

Моей рабочей скрипка: http://jsfiddle.net/u7ju71oo/10/

ответ

2

Логик не был правильно реализован для нескольких рядов сложенной Гистограммы Результирующего JSON структуры коды не соответствует поддерживаемому формату для указанной диаграммы, следовательно, данные получал неправильно визуализированный. обе категории.

Пожалуйста, посетите ссылку на скрипку http://jsfiddle.net/Soumya_dutta/u7ju71oo/29/

Пожалуйста, проверьте Измененный скрипт

-

var app = angular.module('HelloApp', ["ng-fusioncharts"]) app.controller('MyController', function($scope) { 
    $scope.chartoptions = { 
    "dataEmptyMessage": "No data to display <br> Do these steps..." 
    }; 
    data = [{ 
    "product": "SBHL", 
    "bucket": ">90", 
    "allocatedAccount": 3005, 
    "collectedAccount": 0, 
    "pendingCollectionOfAccounts": 3005 
    }, { 
    "product": "SBHL", 
    "bucket": "0-30", 
    "allocatedAccount": 4810, 
    "collectedAccount": 0, 
    "pendingCollectionOfAccounts": 4810 
    }, { 
    "product": "SBHL", 
    "bucket": "31-60", 
    "allocatedAccount": 1610, 
    "collectedAccount": 0, 
    "pendingCollectionOfAccounts": 1610 
    }, { 
    "product": "SBHL", 
    "bucket": "61-90", 
    "allocatedAccount": 793, 
    "collectedAccount": 0, 
    "pendingCollectionOfAccounts": 793 
    }, { 
    "product": "SBML", 
    "bucket": ">90", 
    "allocatedAccount": 1084, 
    "collectedAccount": 0, 
    "pendingCollectionOfAccounts": 1084 
    }, { 
    "product": "SBML", 
    "bucket": "0-30", 
    "allocatedAccount": 1583, 
    "collectedAccount": 0, 
    "pendingCollectionOfAccounts": 1583 
    }, { 
    "product": "SBML", 
    "bucket": "31-60", 
    "allocatedAccount": 473, 
    "collectedAccount": 0, 
    "pendingCollectionOfAccounts": 473 
    }, { 
    "product": "SBML", 
    "bucket": "61-90", 
    "allocatedAccount": 273, 
    "collectedAccount": 0, 
    "pendingCollectionOfAccounts": 273 
    }] $scope.attrs = { 
    "palette": "3", 
    "numdivlines": '3', 
    "numberprefix": "", 
    "useRoundEdges": "1", 
    "bgcolor": "FFFFFF,FFFFFF", 
    "showalternatehgridcolor": "1", 
    "showvalues": "0", 
    "yaxismaxvalue": "1000", 
    "showLegend": "1", 
    "showborder": "0", 
    "labelDisplay": "wrap", 
    "yAxisName": "Number Of Accounts", 
    "maxLabelHeight": "150" 
    }; 
    var products = []; 
    var catObject = []; 
    var catCollection = []; 
    var item = {}; 
    var catHolder = {}; 
    var buckets = []; 
    var dataSet = []; 
    var seriesItem = {}; 
    var productWiseAllocationarr = []; 
    var productWiseCollectionarr = []; 
    var allocatedDataSet = []; 
    var collectedDataSet = []; 
    var tempDataSet = {}; 
    var allseries = {}; 
    var collseries = {}; 
    var allocatedData = []; 
    var collectedData = []; 
    for (var i = 0, l = data.length; i < l; i++) { 
    if (products.indexOf(data[i].product) == -1) { 
     item = {}; 
     item["label"] = "Allocated\tCollected " + data[i].product; 
     item["font"] = "Arial"; 
     item["fontsize"] = "15"; 
     catObject.push(item); 
     products.push(data[i].product); 
     catHolder["category"] = catObject; 
    } 
    if (buckets.indexOf(data[i].bucket) == -1) { 
     buckets.push(data[i].bucket); 
    } 
    } 
    for (var j = 0; j < products.length; j++) { 
    for (var p = 0; p < data.length; p++) { 
     if (data[p].product == products[j]) { 
     var productWiseAllocation = {}; 
     productWiseAllocation.name = data[p].product; 
     productWiseAllocation.series = data[p].bucket; 
     productWiseAllocation.amount = data[p].allocatedAccount; 
     productWiseAllocationarr.push(productWiseAllocation); 
     var productWiseCollection = {}; 
     productWiseCollection.name = data[p].product; 
     productWiseCollection.series = data[p].bucket; 
     productWiseCollection.amount = data[p].collectedAccount; 
     productWiseCollectionarr.push(productWiseCollection); 
     } 
    } 
    } 
    for (var b = 0; b < buckets.length; b++) { 
    allseries = {}; 
    allseries.name = buckets[b] + "allocated"; 
    allseries.data = []; 
    collseries = {}; 
    collseries.name = buckets[b] + "collected"; 
    collseries.data = []; 
    for (var pr = 0; pr < productWiseAllocationarr.length; pr++) { 
     if (productWiseAllocationarr[pr].series == buckets[b]) { 
     allseries.data.push(productWiseAllocationarr[pr].amount); 
     } 
     if (productWiseCollectionarr[pr].series == buckets[b]) { 
     collseries.data.push(productWiseCollectionarr[pr].amount); 
     } 
    } 
    allocatedData.push(allseries); 
    collectedData.push(collseries); 
    } 
    for (var w = 0; w < allocatedData.length; w++) { 
    seriesItem = {}; 
    seriesItem["seriesname"] = allocatedData[w].name; 
    seriesItem["data"] = []; 
    for (var g = 0; g < allocatedData[w].data.length; g++) { 
     var datavalue = {}; 
     datavalue.value = allocatedData[w].data[g]; 
     seriesItem["data"].push(datavalue); 
    } 
    allocatedData[w].data; 
    allocatedDataSet.push(seriesItem); 
    } 
    for (var w = 0; w < collectedData.length; w++) { 
    seriesItem = {}; 
    seriesItem["seriesname"] = collectedData[w].name; 
    seriesItem["data"] = []; 
    for (var g = 0; g < collectedData[w].data.length; g++) { 
     var datavalue = {}; 
     datavalue.value = collectedData[w].data[g]; 
     seriesItem["data"].push(datavalue); 
    } 
    collectedDataSet.push(seriesItem); 
    } 
    tempDataSet["dataset"] = allocatedDataSet; 
    dataSet.push(tempDataSet); 
    tempDataSet = {}; 
    tempDataSet["dataset"] = collectedDataSet; 
    dataSet.push(tempDataSet); 
    catCollection.push(catHolder); 
    $scope.categories = JSON.stringify(catCollection); 
    $scope.dataset = JSON.stringify(dataSet); 
    console.log(JSON.stringify(dataSet)); 
});