diff --git a/lib/torque/provider/filterableJson.js b/lib/torque/provider/filterableJson.js index 374a9f6..e849b1f 100644 --- a/lib/torque/provider/filterableJson.js +++ b/lib/torque/provider/filterableJson.js @@ -618,7 +618,9 @@ var Profiler = require('../profiler'); return f.nrows < 50000 && f.cost < 30000; }) table = table.length ? table[0].table_name: this.options.overview_tables[this.options.overview_tables.length - 1] - this._getHistogramForTiles(varName, start, end, bins, tiles, table, own_filter, callback) + // get multiplicator factor from table name + var factor = (+_.last(table.split('_'))); + this._getHistogramForTiles(varName, start, end, bins, tiles, table, own_filter, factor, callback) }.bind(this)); }, @@ -634,7 +636,7 @@ var Profiler = require('../profiler'); }); }, - _getHistogramForTiles: function(varName, start, end, bins, tiles, table, own_filter, callback){ + _getHistogramForTiles: function(varName, start, end, bins, tiles, table, own_filter, factor, callback){ var sql = [ 'with source as (', @@ -709,6 +711,11 @@ var Profiler = require('../profiler'); this.sql(query, function (data) { if (data) { var rows = JSON.parse(data.responseText).rows; + // multiply by factor + rows.forEach(function(r) { + r.freq = r.freq * factor; + }) + callback(rows); } else { callback(null); @@ -724,11 +731,23 @@ var Profiler = require('../profiler'); return f.nrows < 50000 && f.cost < 30000; }) table = table.length ? table[0].table_name: this.options.overview_tables[this.options.overview_tables.length - 1] - this._getCategoriesForTiles(varName, tiles, table, callback) + var factor = (+_.last(table.split('_'))); + this._getCategoriesForTiles(varName, tiles, table, factor, callback) }.bind(this)); }, - _getCategoriesForTiles: function(varName, tiles, table, callback){ + _getCategoriesForTiles: function(varName, tiles, table, factor, callback){ + + /*var sql = [ + 'SELECT CAST(category AS text), value, false as agg, nulls_count, min_val, max_val, count, categories_count', + ' FROM categories, summary, categories_summary', + ' WHERE rank < {{=it._limit}}', + 'UNION ALL', + 'SELECT \'Other\' category, sum(value), true as agg, nulls_count, min_val, max_val, count, categories_count', + ' FROM categories, summary, categories_summary', + ' WHERE rank >= {{=it._limit}}', + 'GROUP BY nulls_count, min_val, max_val, count, categories_count' + ]*/ var sql = [ 'select {varName} category, count(1) as "value" from {table} {tiles} where {bounds} {filters} group by 1 order by 2 desc limit {num_cats}', @@ -765,6 +784,9 @@ var Profiler = require('../profiler'); this.sql(query, function (data) { if (data) { var rows = JSON.parse(data.responseText).rows; + rows.forEach(function(r) { + r.value = factor * r.value; + }); callback(rows); } else { callback(null);