Thanks for offering to take a look. I've tried putting this in a JSFiddle but can't get it to work. I hope you don't mind if I paste the code below.
I really appreciate your help.
<html>
<head>
<script type="text/javascript">
google.load('visualization', '1', {packages: ['controls']});
google.setOnLoadCallback(drawChart);
function drawChart () {
query.send(handleQueryResponse);
function handleQueryResponse(response) {
if (response.isError()) {
alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage());
return;
}
var data = response.getDataTable();
var columnsTable = new google.visualization.DataTable();
var initState={selectedValues: []};
var members = data.getNumberOfRows();
console.log(members);
var numberofmetrics = (data.getNumberOfColumns()-3)/2;
console.log(numberofmetrics);
var metrics = new Array(numberofmetrics);
for (var i = 0;i<numberofmetrics;i++) {
metrics[i] = data.getValue(i,data.getNumberOfColumns()-1);
console.log(metrics[i]);
}
var label1 = data.getColumnLabel(4);
var label2 = data.getColumnLabel(4 + numberofmetrics);
var label3 = data.getColumnLabel(data.getNumberOfColumns()-2);
var label4 = data.getColumnLabel(1);
columnsTable.addColumn('string', 'member');
columnsTable.addColumn('number', label1);
columnsTable.addColumn('number', label2);
columnsTable.addColumn('string', label3);
columnsTable.addColumn('number', label4);
columnsTable.addColumn({type: 'string',role: 'style'});
console.log(metrics);
for (var i=0; i<members; i++) {
columnsTable.addRow([ data.getValue(i,0), data.getValue(i,4), data.getValue(i,4 + numberofmetrics), data.getValue(i,data.getNumberOfColumns()-2),data.getValue(i,1),'']);
}
console.log(columnsTable.getNumberOfRows());
initState.selectedValues.push(metrics[0]);
var Filter1 = new google.visualization.ControlWrapper({
controlType: 'CategoryFilter',
containerId: 'Filter1_div',
dataTable: data,
options: {
filterColumnLabel: 'metrics',
ui: {
label: 'Metric',
allowTyping: false,
allowMultiple: false,
allowNone: false,
selectedValuesLayout: 'aside',
'caption': 'Choose metric',
cssClass: 'columnFilter_class'
}
},
state: initState
});
var chart = new google.visualization.ChartWrapper({
chartType: 'BubbleChart',
containerId: 'chart_div',
dataTable: columnsTable,
options: {
title: 'Dashboard test',
width: 800,
height: 500,
backgroundColor: 'transparent',
interpolateNulls: true,
animation:{
duration: 500,
easing: 'out'
},
vAxis: {format: '###,###.#', textStyle: {fontSize: 12},title: label2},
hAxis: {title: label1},
bubble: {textStyle: {color: "none"}},
sizeAxis: {minSize: 3},
series: {
"Bill": {color: 'blue'},
"Ann": {color: 'red'},
"Kevin": {color: 'green'},
"Sally": {color: 'orange'}
},
cssClass: 'BubbleChart_class',
}
});
function selectHandler() {
var state1 = Filter1.getState();
console.log(state1.selectedValues[0]);
var metricindex = metrics.indexOf(state1.selectedValues[0]);
console.log(metricindex);
label1 = data.getColumnLabel(metricindex+1);
label2 = data.getColumnLabel(metricindex+1 + numberofmetrics);
for (var i=0; i<members; i++) {
columnsTable.setValue(i,1,data.getValue(i,metricindex+1));
columnsTable.setValue(i,2,data.getValue(i,metricindex+1 + numberofmetrics));
columnsTable.setColumnLabel(1,label1);
columnsTable.setColumnLabel(2,label2);
}
chart.draw();
var formatter = new google.visualization.NumberFormat({
pattern: '\u00A3###,### ',
fractionDigits: 1
});
var formatter2 = new google.visualization.NumberFormat({
pattern: '##.# percent',
});
for (var i=0;i<numberofmetrics;i++) {
if (i<numberofmetrics-2) {
formatter.format(data, i, i+numberofmetrics);
} else {
formatter2.format(data, i);
}
}
}
google.visualization.events.addListener(Filter1, 'statechange', selectHandler);
Filter1.draw();
selectHandler();
// Need to find a way to make this update when control changes
var state1 = Filter1.getState();
document.getElementById("title").innerHTML = state1.selectedValues;
$(document).ready(function(){
$("Filter1_div").change(function(){
document.getElementById("title").innerHTML = state1.selectedValues;
});
});
}
}
</script>
</head>
<body>
<div id="dashboard">
<div id="Filter1_div"></div>
<h4 id="title"></h4>
<div id="chart_div"></div>
</div>
</body>
</html>