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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 42cf2ed179c16cadadb5ffc35422f581ffa2969a
4
- data.tar.gz: 6e23d51d68b9eb6cd785d8d94c9f3ca4fda8f0ae
3
+ metadata.gz: ab079a9aa47a78b5e3c495888dc5a75b9cc80440
4
+ data.tar.gz: 793d42771b30c7e89742a806196672b09a12d661
5
5
  SHA512:
6
- metadata.gz: bdc3a45a8120f7df90bf285491dc7f73f6f0ed81958dfe53a9f729d694bee246d47f4999905139a2b31d3bce452af8e3417a65b3d772a2dc7d2edd945b9c9d9c
7
- data.tar.gz: e863c64321a5b76e94cbb1f9160a3249b026c56fb970d35d879000238004473adc1753f67ea15ad27cf4727365f56cfb48680a63493e1fa0e202247a39bf039e
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
- data.dimensions_caption(dimension).each do |d|
46
- html += "data.addColumn({type: 'string', label: '#{escape_javascript d[:caption]}', id: '#{escape_javascript d[:name]}', p:{'type': 'dimension'}});\n"
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
 
@@ -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 unless measures.include? v[:measure]
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].collect{|label| {type: 'dimension', value: label[:value].to_s, fmt_value: label[:fmt_value]}} +
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
 
@@ -1,5 +1,5 @@
1
1
  module Olap
2
2
  module View
3
- VERSION = "0.0.21"
3
+ VERSION = "0.1.0"
4
4
  end
5
5
  end
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.21
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-17 00:00:00.000000000 Z
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