3

是否有一种“内置”方法可以仅使用可见行从仪表板表创建数据视图?在编写一个不必要的冗长替代方案之前,我想知道!

编辑:

我在参考文档中错过了这一点,但它并没有完全解决问题,因为您仍然需要做一些棘手的事情来获取仪表板上的活动过滤器的状态并将它们传递给 getFilteredRows() 方法。

您可以使用 getFilteredRows() 方法,该方法“返回与所有给定过滤器匹配的行的行索引。索引按升序返回。此方法的输出可用作 DataView.setRows() 的输入”

https://developers.google.com/chart/interactive/docs/reference#DataView

4

2 回答 2

2

使用仪表板时需要包装表格的 ChartWrapper 对象具有“视图”参数,可用于定义要用于该图表的 DataView:

var table = new google.visualization.ChartWrapper({
    chartType: 'Table',
    containerId: 'myTableDiv',
    options: {
        // table options
    },
    view: {
        columns: [/* columns used for the view */]
    }
});
于 2013-08-19T13:50:22.237 回答
1

为了任何可能觉得这很有用的人的利益,这是我解决问题的方法:

首先,从仪表板创建一组控制状态

control_states = [ctrl1.getState(),ctrl2.getState(),ctrl3.getState()];

接下来,为每个控件创建所有选择的数组

var filteredrows = [ ];
var cnt = 0;
for (var i = 0; i < control_states.length; i++) {
  var picker_state = control_states[i]
  for (var j = 0; j < picker_state.selectedValues.length; j++) {
    filteredrows[cnt] = [ ];
    filteredrows[cnt]["column"] = i;
    filteredrows[cnt]["value"] = picker_state.selectedValues[j];
    cnt += 1;
  };
};

创建新的数据视图并将过滤的行数组传递给 setRows 方法:

var filterdata = new google.visualization.DataView(data)
filterdata.setRows(
  filterdata.getFilteredRows(filteredrows)
);
于 2013-08-20T05:24:28.640 回答