2013-12-16 4 views
0

나는 this fiddle으로 흥분하고 그 피들을 참조하여 같은 종류를 만들려고했습니다. 내 수정 된 샘플 here 주어진 및보기를 만들려면 다음과 같은 노력하고있어.프로그래밍 방식으로 Google 시각화 데이터 테이블 피킹

var distinctValues = data.getDistinctValues(2); 

    var viewColumns = [1]; 
    var groupColumns = []; 
    // build column arrays for the view and grouping 
    for (var i = 0; i < distinctValues.length; i++) { 
     viewColumns.push({ 
      type: 'number', 
      label: distinctValues[i], 
      aggregation: google.visualization.data.count 
     }); 
     groupColumns.push({ 
      column: i+1, 
      type: 'number', 
      //label: distinctValues[i], 
      aggregation: google.visualization.data.sum 
     }); 
    } 

그러나 제 목표는 다음과 같은 피벗 테이블을 만드는 것입니다.

['Column1', 'Column2', 100, 200, 300, 400], 
['A', 'bar', 0, 1, 1, 0], 
['A', 'baz', 0, 0, 1, 0], 
['A', 'foo', 3, 1, 0, 0], 
['B', 'baz', 0, 1, 0, 0], 
['B', 'cad', 1, 0, 1, 1], 
['B', 'qud', 1, 1, 1, 2] 

어떻게 진행할 수 있습니까?

답변

2

코드에서 몇 가지 사항을 변경해야합니다. 먼저, Column1과 Column2가 모두 출력되도록하려면 viewColumns가 시작하려면 0과 1 열을 모두 포함해야합니다. 그런 다음 viewColumns에 추가하는 열을 조정해야합니다. 각 열에는 열의 값을 계산하는 calc 매개 변수가 필요합니다. 이 경우 열 값을 distinctValues ​​[i]와 비교하여 일치 할 때 1을 반환하고 일치하지 않을 때는 0을 반환합니다. groupColumns 대한 집합 함수, 카운트 대신에 합을 사용

var distinctValues = data.getDistinctValues(2); 

var viewColumns = [0, 1]; 
var groupColumns = []; 
// build column arrays for the view and grouping 
for (var i = 0; i < distinctValues.length; i++) { 
    viewColumns.push({ 
     type: 'number', 
     label: distinctValues[i], 
     calc: (function (x) { 
      return function (dt, row) { 
       return (dt.getValue(row, 2) == x) ? 1 : 0; 
      } 
     })(distinctValues[i]) 
    }); 
    groupColumns.push({ 
     column: i+2, 
     type: 'number', 
     //label: distinctValues[i], 
     aggregation: google.visualization.data.sum 
    }); 
} 

그리고, 그룹화 기능에서, 제 어레이의 열 0 및 1을 건네

VAR pivotedData = google.visualization.data. group (view, [0, 1], groupColumns);

여기서 일하는 이러한 변경 사항을 참조하십시오 : http://jsfiddle.net/asgallant/DUn6B/1/

+0

나는'pivotData' 배열 사이에 하나 더 열을 설정할 수 있습니까? 즉, '['Column1 ','Column2 ', 100500200300400], ['A ','bar ', 0, 1, 0, 1, 0], ['A ' 'baz', 0, 1, 0, 0, 0, 1, 0], [ 'A', 'foo', 3, 1, 0, 0] 1, 1, 0, 0, 1], [ 'B', 'qud', 1, 1, 0, 1, 2] 이런] (http://jsfiddle.net/DUn6B/2/). 그러나 더 좋은 방법이 있습니까? – user3102065

+0

나는 [이와 비슷한 것] (http://jsfiddle.net/DUn6B/3/)도 만들었습니다. 있다면 더 나은 방법을 제안하십시오. – user3102065

+0

해당 값이있는 데이터가없는 경우에도 피벗 된 데이터에 헤더 500 및 600이있는 열을 포함 하시겠습니까? 가장 쉬운 방법은 다음과 같이 수동으로 'distinctValues' 배열을 생성하는 것입니다. http://jsfiddle.net/asgallant/DUn6B/4/ – asgallant

관련 문제