olap-view 0.0.21 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/helpers/olap_view_helper.rb +10 -4
- data/app/views/olap-view/_barchart.js.erb +51 -0
- data/app/views/olap-view/_combochart.js.erb +1 -1
- data/app/views/olap-view/_piechart.js.erb +10 -2
- data/app/views/olap-view/_table.js.erb +1 -1
- data/lib/olap/view/parse.rb +28 -5
- data/lib/olap/view/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ab079a9aa47a78b5e3c495888dc5a75b9cc80440
|
4
|
+
data.tar.gz: 793d42771b30c7e89742a806196672b09a12d661
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0ad013868584ad147fd947aa1924bcbed79cc3bed68ac4ee8af65197eabc45f701d775ad5e6219d4bb61e266d8209a0a7a46febd51e40d8a75aa97cc640d5e5f
|
7
|
+
data.tar.gz: e3232799296db86062532c3d51e93392ec8d0aaecca651720da7080fe003775bf91cd5cd273f129eb9949a242654ed4a058ae8e96d0919d5ef04bef85032f4f0
|
@@ -40,15 +40,21 @@
|
|
40
40
|
}.join(',').html_safe
|
41
41
|
end
|
42
42
|
|
43
|
-
def olap_view_filling_table data, dimension = nil, measures = []
|
43
|
+
def olap_view_filling_table data, dimension = nil, measures = [], merge_dimension = false
|
44
44
|
html = ''
|
45
|
-
|
46
|
-
|
45
|
+
|
46
|
+
if merge_dimension
|
47
|
+
d_caption = data.dimensions_caption(dimension).collect{|d| d[:caption]}.join(', ')
|
48
|
+
html += "data.addColumn({type: 'string', label: '#{escape_javascript d_caption}', id: 'merge_dimension', p:{'type': 'dimension'}});\n"
|
49
|
+
else
|
50
|
+
data.dimensions_caption(dimension).each do |d|
|
51
|
+
html += "data.addColumn({type: 'string', label: '#{escape_javascript d[:caption]}', id: '#{escape_javascript d[:name]}', p:{'type': 'dimension'}});\n"
|
52
|
+
end
|
47
53
|
end
|
48
54
|
data.measures_caption(measures).each do |m|
|
49
55
|
html += "data.addColumn({type: 'number', label: '#{escape_javascript m[:caption]}', id: '#{escape_javascript m[:name]}', p:{'type': 'measure'}});\n"
|
50
56
|
end
|
51
|
-
data.table(dimension, measures).each do |row|
|
57
|
+
data.table(dimension, measures, merge_dimension).each do |row|
|
52
58
|
html += "data.addRow([#{olap_view_render_row row}]);\n"
|
53
59
|
end
|
54
60
|
html.html_safe
|
@@ -0,0 +1,51 @@
|
|
1
|
+
(function(){
|
2
|
+
function draw<%= id %>() {
|
3
|
+
var name = 'barchart';
|
4
|
+
var data = new google.visualization.DataTable();
|
5
|
+
|
6
|
+
<%= olap_view_filling_table data, properties[:dimension], (properties[:measures] || []), properties[:merge_dimensions] %>
|
7
|
+
|
8
|
+
var measures_sum = [];
|
9
|
+
for (var i = 0; i < data.getNumberOfColumns(); i++) {
|
10
|
+
if (data.getColumnProperties(i).type == "measure") {
|
11
|
+
var sum = 0;
|
12
|
+
for (var j = 0; j < data.getNumberOfRows(); j++) {
|
13
|
+
sum += data.getValue(j, i);
|
14
|
+
}
|
15
|
+
measures_sum[measures_sum.length] = sum;
|
16
|
+
}
|
17
|
+
}
|
18
|
+
|
19
|
+
if (measures_sum[0] > 0) {
|
20
|
+
var chart = new google.visualization.BarChart(document.getElementById('<%= id %>'));
|
21
|
+
|
22
|
+
var title_indexes = [];
|
23
|
+
for (var i = 0; i < data.getNumberOfColumns(); i++) {
|
24
|
+
if (data.getColumnProperties(i).type == "measure") {
|
25
|
+
title_indexes.push(i);
|
26
|
+
}
|
27
|
+
}
|
28
|
+
|
29
|
+
var default_options = {
|
30
|
+
allowHtml: true,
|
31
|
+
height: 370,
|
32
|
+
animation: {duration: 200, startup: true },
|
33
|
+
orientation: 'horizontal',
|
34
|
+
title: data.getColumnLabel(title_indexes[0])
|
35
|
+
};
|
36
|
+
|
37
|
+
<%= properties[:function] && properties[:function].html_safe %>
|
38
|
+
|
39
|
+
chart.draw(data, $.extend(true, default_options, <%= properties[:options] ? "JSON.parse('#{properties[:options].to_json}')".html_safe : '{}' %>));
|
40
|
+
} else {
|
41
|
+
$("div#<%= id %>").html('');
|
42
|
+
}
|
43
|
+
}
|
44
|
+
|
45
|
+
google.load("visualization", "1", {
|
46
|
+
"packages": ["corechart"],
|
47
|
+
'language': 'ru',
|
48
|
+
"callback" : function(){
|
49
|
+
draw<%= id %>();
|
50
|
+
}});
|
51
|
+
}());
|
@@ -3,7 +3,7 @@
|
|
3
3
|
var name = 'combochart';
|
4
4
|
var data = new google.visualization.DataTable();
|
5
5
|
|
6
|
-
<%= olap_view_filling_table data, properties[:dimension], (properties[:measures] || []) %>
|
6
|
+
<%= olap_view_filling_table data, properties[:dimension], (properties[:measures] || []), properties[:merge_dimensions] %>
|
7
7
|
|
8
8
|
var measures_sum = [];
|
9
9
|
for (var i = 0; i < data.getNumberOfColumns(); i++) {
|
@@ -3,7 +3,7 @@
|
|
3
3
|
var name = 'piechart';
|
4
4
|
var data = new google.visualization.DataTable();
|
5
5
|
|
6
|
-
<%= olap_view_filling_table data, properties[:dimension], (properties[:measures] || []) %>
|
6
|
+
<%= olap_view_filling_table data, properties[:dimension], (properties[:measures] || []), properties[:merge_dimensions] %>
|
7
7
|
|
8
8
|
var measures_sum = [];
|
9
9
|
for (var i = 0; i < data.getNumberOfColumns(); i++) {
|
@@ -19,10 +19,18 @@
|
|
19
19
|
if (measures_sum[0] > 0) {
|
20
20
|
var chart = new google.visualization.PieChart(document.getElementById('<%= id %>'));
|
21
21
|
|
22
|
+
var title_indexes = [];
|
23
|
+
for (var i = 0; i < data.getNumberOfColumns(); i++) {
|
24
|
+
if (data.getColumnProperties(i).type == "measure") {
|
25
|
+
title_indexes.push(i);
|
26
|
+
}
|
27
|
+
}
|
28
|
+
|
22
29
|
var default_options = {
|
23
30
|
allowHtml: true,
|
24
31
|
is3D: true,
|
25
|
-
chartArea: {left:0,top:20,width:'100%', height:'70%'}
|
32
|
+
chartArea: {left:0,top:20,width:'100%', height:'70%'},
|
33
|
+
title: data.getColumnLabel(title_indexes[0])
|
26
34
|
};
|
27
35
|
|
28
36
|
<%= properties[:function] && properties[:function].html_safe %>
|
@@ -3,7 +3,7 @@
|
|
3
3
|
var name = 'table';
|
4
4
|
var data = new google.visualization.DataTable();
|
5
5
|
|
6
|
-
<%= olap_view_filling_table data, properties[:dimension], (properties[:measures] || []) %>
|
6
|
+
<%= olap_view_filling_table data, properties[:dimension], (properties[:measures] || []), properties[:merge_dimensions] %>
|
7
7
|
|
8
8
|
var chart = new google.visualization.Table(document.getElementById('<%= id %>'));
|
9
9
|
|
data/lib/olap/view/parse.rb
CHANGED
@@ -13,7 +13,7 @@ class Olap::View::Parse
|
|
13
13
|
response.rows.each{|row|
|
14
14
|
label = row[:labels].detect{|label| label[:name] == dimension}
|
15
15
|
values = row[:values].collect{|v|
|
16
|
-
next
|
16
|
+
next if !measures.empty? && !measures.include?(v[:measure])
|
17
17
|
v.delete :fmt_value
|
18
18
|
v
|
19
19
|
}.compact
|
@@ -33,6 +33,7 @@ class Olap::View::Parse
|
|
33
33
|
}
|
34
34
|
result
|
35
35
|
end
|
36
|
+
|
36
37
|
# Return collection of dimensions or selected dimension by name
|
37
38
|
#
|
38
39
|
# * +:name+ the name of dimension
|
@@ -59,14 +60,36 @@ class Olap::View::Parse
|
|
59
60
|
}.compact
|
60
61
|
end
|
61
62
|
|
63
|
+
def dimensions_row row, merge_dimensions = false
|
64
|
+
if merge_dimensions
|
65
|
+
label_value = row.collect{|label|
|
66
|
+
next if label[:value].to_s.empty?
|
67
|
+
label[:value].to_s
|
68
|
+
}.compact.join(', ')
|
69
|
+
label_fmt_value = row.collect{|label|
|
70
|
+
next if label[:fmt_value].to_s.empty?
|
71
|
+
label[:fmt_value]
|
72
|
+
}.compact.join(', ')
|
73
|
+
[{type: 'dimension', value: label_value.to_s, fmt_value: label_fmt_value.to_s}]
|
74
|
+
else
|
75
|
+
row.collect{|label| {type: 'dimension', value: label[:value].to_s, fmt_value: label[:fmt_value]}}
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def measures_row row, measures = []
|
80
|
+
row.collect{|value|
|
81
|
+
next if !measures.empty? && !measures.include?(value[:measure])
|
82
|
+
{type: 'measure', value: value[:value].to_f, fmt_value: value[:fmt_value]}
|
83
|
+
}.compact
|
84
|
+
end
|
85
|
+
|
62
86
|
# Collection of result rows and aggregate collection by dimension and measures
|
63
87
|
# type - dimension or measure
|
64
88
|
# value - metric value
|
65
89
|
# fmt_value - formatted metric value
|
66
|
-
def table dimension = nil, measures = []
|
67
|
-
(dimension ? aggregate(dimension, measures) : response.rows).collect{|row|
|
68
|
-
row[:labels]
|
69
|
-
row[:values].collect{|value| {type: 'measure', value: value[:value].to_f, fmt_value: value[:fmt_value]}}
|
90
|
+
def table dimension = nil, measures = [], merge_dimensions = false
|
91
|
+
(dimension && !measures.empty? ? aggregate(dimension, measures) : response.rows).collect{|row|
|
92
|
+
dimensions_row(row[:labels], merge_dimensions) + measures_row(row[:values], measures)
|
70
93
|
}
|
71
94
|
end
|
72
95
|
|
data/lib/olap/view/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: olap-view
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- stepanovit
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -68,6 +68,7 @@ files:
|
|
68
68
|
- Rakefile
|
69
69
|
- app/assets/stylesheets/olap-view/olap-view.scss
|
70
70
|
- app/helpers/olap_view_helper.rb
|
71
|
+
- app/views/olap-view/_barchart.js.erb
|
71
72
|
- app/views/olap-view/_combochart.js.erb
|
72
73
|
- app/views/olap-view/_piechart.js.erb
|
73
74
|
- app/views/olap-view/_table.js.erb
|