2016-05-11 12 views
2

私は、DataTable、DateRangeFilter、および集約オブジェクトを持っています。 DateRangeFilterを使用してDataTableのデータをフィルタリングし、集計をFILTERED DataTableに限定することができたらと思いました。しかし、それは起こっていない。 私は間違ったことをしていますか(リフレッシュ/描画を忘れたかもしれません)、そうでないようなことはありません。Googleグラフ、フィルタリングされたDataTableを集約/グループ化する

私のコードはここにある:あなたが唯一のダッシュボード/フィルタに一つのデータテーブルをバインドすることができ https://jsfiddle.net/v0w5ehsc/

var dashboard = new google.visualization.Dashboard(document.getElementById('daterange_div')); 
dashboard.bind(slider, tableChart); 
dashboard.draw(dataAll); 

var grouped_data = google.visualization.data.group(
    dataAll, 
    [0, 2], 
    [ 
     {'column': 3, 'aggregation': google.visualization.data.sum, 'type': 'number'} 
    ] 
); 

答えて

3

。 ChartWrapper

  • にフィルタリングされたデータテーブルを集計するために

    ...

    1. 'ready'イベント待ちがChartWrapper

    からフィルタリングされたデータテーブルを集計、次の例の建物を見ます前の質問をオフにしてください...

    google.charts.load('current', { 
     
        callback: drawVisualization, 
     
        packages:['corechart', 'table', 'controls'] 
     
    }); 
     
    
     
    function drawVisualization() { 
     
        var data = new google.visualization.DataTable({ 
     
        cols: [ 
     
         {id: 'dat_ym', label: 'Start Date', type: 'date'}, 
     
         {id: 'user-id', label: 'User-Id', type: 'string'}, 
     
         {id: 'customer-id', label: 'Customer-Id', type: 'string'}, 
     
         {id: 's_minutes', label: 'minutes', type: 'number'} 
     
        ], 
     
        rows: [ 
     
         {c:[{v: new Date('2016, 01, 01')}, {v: '44836'}, {v: '67205'}, {v: 1122} ]}, 
     
         {c:[{v: new Date('2016, 01, 01')}, {v: '86495'}, {v: '67205'}, {v: 332} ]}, 
     
         {c:[{v: new Date('2016, 01, 01')}, {v: '44836'}, {v: '228626'}, {v: 0} ]}, 
     
         {c:[{v: new Date('2016, 01, 01')}, {v: '86495'}, {v: '228626'}, {v: 334} ]}, 
     
         {c:[{v: new Date('2016, 02, 01')}, {v: '44836'}, {v: '67205'}, {v: 554} ]}, 
     
         {c:[{v: new Date('2016, 02, 01')}, {v: '86495'}, {v: '67205'}, {v: 0} ]}, 
     
         {c:[{v: new Date('2016, 02, 01')}, {v: '44836'}, {v: '228626'}, {v: 0} ]}, 
     
         {c:[{v: new Date('2016, 02, 01')}, {v: '86495'}, {v: '228626'}, {v: 544} ]}, 
     
        ] 
     
        }); 
     
    
     
        var options = { 
     
        hAxis: {title: '', textStyle: { fontSize: '13' }, textPosition: 'in'}, 
     
        vAxis: {title: '', textStyle: { fontSize: '10' }}, 
     
        seriesType: 'bars', 
     
        legend: {position: 'top', textStyle: {color: 'black', fontSize: 14}}, 
     
        isStacked: true 
     
        }; 
     
    
     
        // build dashboard 
     
        var dashboard = new google.visualization.Dashboard(document.getElementById('dashboard-div')); 
     
        var table = new google.visualization.ChartWrapper({ 
     
        chartType: 'Table', 
     
        containerId: 'table-div', 
     
        options: { 
     
         allowHtml: true 
     
        } 
     
        }); 
     
        var dateSlider = new google.visualization.ControlWrapper({ 
     
        controlType: 'DateRangeFilter', 
     
        containerId: 'slider-div', 
     
        options: { 
     
         filterColumnIndex: 0 
     
        } 
     
        }); 
     
    
     
        // Table 'ready' event 
     
        google.visualization.events.addListener(table, 'ready', function() { 
     
        // group data by date, customer 
     
        var grouped_data = google.visualization.data.group(
     
         // get data table from ChartWrapper 
     
         table.getDataTable(), 
     
         [0, 2], 
     
         [ 
     
         {'column': 3, 'aggregation': google.visualization.data.sum, 'type': 'number'} 
     
         ] 
     
        ); 
     
    
     
        // sort grouped data 
     
        grouped_data.sort([{column: 0},{column: 1}]); 
     
    
     
        // get unique customers 
     
        var custGroup = google.visualization.data.group(
     
         data, 
     
         [2] 
     
        ); 
     
    
     
        // build customer data table 
     
        var custData = new google.visualization.DataTable({ 
     
         cols: [ 
     
         {id: 'dat_ym', label: 'Start Date', type: 'date'}, 
     
         ] 
     
        }); 
     
    
     
        // add column for each customer 
     
        for (var i = 0; i < custGroup.getNumberOfRows(); i++) { 
     
         custData.addColumn(
     
         {label: custGroup.getValue(i, 0), type: 'number'} 
     
        ); 
     
        } 
     
    
     
        // add row for each date/customer 
     
        var rowDate; 
     
        var rowIndex; 
     
        for (var i = 0; i < grouped_data.getNumberOfRows(); i++) { 
     
         if (rowDate !== grouped_data.getValue(i, 0).getTime()) { 
     
         rowDate = grouped_data.getValue(i, 0).getTime(); 
     
         rowIndex = custData.addRow(); 
     
         custData.setValue(rowIndex, 0, new Date(rowDate)); 
     
         } 
     
         for (var x = 1; x < custData.getNumberOfColumns(); x++) { 
     
         if (custData.getColumnLabel(x) === grouped_data.getValue(i, 1)) { 
     
          custData.setValue(rowIndex, x, grouped_data.getValue(i, 2)); 
     
         } 
     
         } 
     
        } 
     
    
     
        // draw agg table 
     
        new google.visualization.ChartWrapper({ 
     
         chartType: 'Table', 
     
         containerId: 'agg-div', 
     
         dataTable: custData, 
     
         options: { 
     
         allowHtml: true 
     
         } 
     
        }).draw(); 
     
        }); 
     
    
     
        // draw dashboard 
     
        dashboard.bind(dateSlider, table); 
     
        dashboard.draw(data); 
     
    }
    <script src="https://www.gstatic.com/charts/loader.js"></script> 
     
    <div id="dashboard-div"> 
     
        <div id="slider-div"></div> 
     
        <div id="table-div"></div> 
     
        <br/> 
     
        <div id="agg-div"></div> 
     
    </div>

  • +0

    WhiteHat - slamdunk、again!どうもありがとう。 私は新しい小さな質問があります... on: rowIndex = custData.addRow(); custData.setValue(rowIndex、0、new Date(rowDate)); ...ラベルを値セットに設定する方法はありますか?ロジックを使用してユーザーによって顧客を表示しているので、今はユーザーIDが行に表示されており、ユーザー名が表示されます。私は結合やビューを使用することができますが、それはデータの別のレイヤーを追加するだけです。私はそれをDataTable自体で修正したいと思います。 Thanx! – Mara

    +0

    私はすでにこれを試みましたが、エラーが発生します: "custData.setLabelは関数ではありません";( – Mara

    +0

    申し訳ありません、 'setColumnLabel' - [here's](https://developers.google.com/chart/interactive/docs/reference#DataTable_setColumnLabel)参照... – WhiteHat

    関連する問題