From e6599daed2ed7dcaef05a8375f7a8eeaa92677d3 Mon Sep 17 00:00:00 2001 From: David Megginson Date: Wed, 24 Feb 2016 14:25:11 -0500 Subject: [PATCH] Improve charting to roll up count when the filter value is missing. --- hxl_proxy/controllers.py | 2 +- hxl_proxy/static/hxl-proxy/hxl-proxy.js | 20 +++++++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/hxl_proxy/controllers.py b/hxl_proxy/controllers.py index eb1e2bef..e018b943 100644 --- a/hxl_proxy/controllers.py +++ b/hxl_proxy/controllers.py @@ -220,7 +220,7 @@ def find_column(source, pattern): count_col = None if count_tag: count_tag = hxl.TagPattern.parse(count_tag) - count_col = find_column(count_tag) + count_col = find_column(source, count_tag) type = args.get('type', 'bar') diff --git a/hxl_proxy/static/hxl-proxy/hxl-proxy.js b/hxl_proxy/static/hxl-proxy/hxl-proxy.js index 44120ca6..0c9b2ca4 100644 --- a/hxl_proxy/static/hxl-proxy/hxl-proxy.js +++ b/hxl_proxy/static/hxl-proxy/hxl-proxy.js @@ -264,8 +264,23 @@ hxl_proxy.setupChart = function(params) { $.get(params.data_url, function(csvString) { var rawData = $.csv.toArrays(csvString, {onParseValue: $.csv.hooks.castToScalar}); var hxlData = hxl.wrap(rawData); - if (params.filter_pattern && params.filter_value) { - hxlData = hxlData.withRows(params.filter_pattern + '=' + params.filter_value); + + if (params.filter_pattern) { + // If we have a filter pattern, apply it first + if (params.filter_value) { + // If there's a value, use it to filter + hxlData = hxlData.withRows(params.filter_pattern + '=' + params.filter_value); + } else if (!params.count_pattern) { + // If there's no value and we're not counting rows, sum up the results + hxlData = hxlData.count(params.label_pattern, get_value_pattern(hxlData)); + for (var i in hxlData.columns) { + column = hxlData.columns[i] + if (column.attributes.indexOf('sum') != -1) { + params.value_pattern = column.displayTag; + break; + } + } + } } if (params.count_pattern) { hxlData = hxlData.count(params.count_pattern); @@ -289,7 +304,6 @@ hxl_proxy.setupChart = function(params) { chartData.push([label, 0 + value]); } } - console.log(chartData); var data = google.visualization.arrayToDataTable(chartData);