activewarehouse 0.1.0 → 0.2.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.
Files changed (44) hide show
  1. data/README +62 -17
  2. data/Rakefile +17 -0
  3. data/generators/bridge/USAGE +1 -0
  4. data/generators/bridge/bridge_generator.rb +46 -0
  5. data/generators/bridge/templates/fixture.yml +5 -0
  6. data/generators/bridge/templates/migration.rb +20 -0
  7. data/generators/bridge/templates/model.rb +3 -0
  8. data/generators/dimension/templates/unit_test.rb +0 -2
  9. data/generators/dimension_view/USAGE +1 -0
  10. data/generators/dimension_view/dimension_view_generator.rb +62 -0
  11. data/generators/dimension_view/templates/migration.rb +11 -0
  12. data/generators/dimension_view/templates/model.rb +3 -0
  13. data/generators/dimension_view/templates/unit_test.rb +10 -0
  14. data/init.rb +1 -0
  15. data/lib/active_warehouse.rb +24 -9
  16. data/lib/active_warehouse/{model/aggregate.rb → aggregate.rb} +29 -13
  17. data/lib/active_warehouse/builder/date_dimension_builder.rb +21 -6
  18. data/lib/active_warehouse/builder/random_data_builder.rb +204 -3
  19. data/lib/active_warehouse/compat/compat.rb +49 -0
  20. data/lib/active_warehouse/{model/cube.rb → cube.rb} +47 -17
  21. data/lib/active_warehouse/dimension.rb +296 -0
  22. data/lib/active_warehouse/dimension/bridge.rb +15 -0
  23. data/lib/active_warehouse/dimension/dimension_view.rb +11 -0
  24. data/lib/active_warehouse/dimension/hierarchical_dimension.rb +60 -0
  25. data/lib/active_warehouse/dimension/slowly_changing_dimension.rb +137 -0
  26. data/lib/active_warehouse/{model/fact.rb → fact.rb} +45 -10
  27. data/lib/active_warehouse/migrations.rb +1 -2
  28. data/lib/active_warehouse/report.rb +3 -0
  29. data/lib/active_warehouse/{model/report → report}/abstract_report.rb +0 -0
  30. data/lib/active_warehouse/{model/report → report}/chart_report.rb +0 -0
  31. data/lib/active_warehouse/{model/report → report}/table_report.rb +0 -0
  32. data/lib/active_warehouse/version.rb +2 -2
  33. data/lib/active_warehouse/view/report_helper.rb +2 -1
  34. data/tasks/active_warehouse_tasks.rake +54 -0
  35. metadata +43 -21
  36. data/doc/agg_queries.txt +0 -26
  37. data/doc/agg_queries_results.txt +0 -150
  38. data/doc/queries.txt +0 -35
  39. data/lib/active_warehouse/model.rb +0 -5
  40. data/lib/active_warehouse/model/dimension.rb +0 -3
  41. data/lib/active_warehouse/model/dimension/bridge.rb +0 -32
  42. data/lib/active_warehouse/model/dimension/dimension.rb +0 -152
  43. data/lib/active_warehouse/model/dimension/hierarchical_dimension.rb +0 -35
  44. data/lib/active_warehouse/model/report.rb +0 -3
data/doc/agg_queries.txt DELETED
@@ -1,26 +0,0 @@
1
- Aggregate 1:
2
-
3
- select d1.calendar_year, d2.store_state,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d2.store_state;
4
- select d1.calendar_year, d2.store_state, d2.store_county,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d2.store_state, d2.store_county;
5
- select d1.calendar_year, d2.store_state, d2.store_county, d2.store_city,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d2.store_state, d2.store_county, d2.store_city;
6
- select d1.calendar_year, d1.calendar_month_name, d2.store_state,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d1.calendar_month_name, d2.store_state;
7
- select d1.calendar_year, d1.calendar_month_name, d2.store_state, d2.store_county,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d1.calendar_month_name, d2.store_state, d2.store_county;
8
- select d1.calendar_year, d1.calendar_month_name, d2.store_state, d2.store_county, d2.store_city,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d1.calendar_month_name, d2.store_state, d2.store_county, d2.store_city;
9
- select d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d2.store_state,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d2.store_state;
10
- select d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d2.store_state, d2.store_county,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d2.store_state, d2.store_county;
11
- select d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d2.store_state, d2.store_county, d2.store_city,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d2.store_state, d2.store_county, d2.store_city;
12
- select d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d1.day_number_in_calendar_month, d2.store_state,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d1.day_number_in_calendar_month, d2.store_state;
13
- select d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d1.day_number_in_calendar_month, d2.store_state, d2.store_county,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d1.day_number_in_calendar_month, d2.store_state, d2.store_county;
14
- select d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d1.day_number_in_calendar_month, d2.store_state, d2.store_county, d2.store_city,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d1.day_number_in_calendar_month, d2.store_state, d2.store_county, d2.store_city;
15
-
16
-
17
- Aggregate 2:
18
-
19
- select d1.calendar_year, d2.store_region,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d2.store_region;
20
- select d1.calendar_year, d2.store_region, d2.store_district,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d2.store_region, d2.store_district;
21
- select d1.calendar_year, d1.calendar_month_name, d2.store_region,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d1.calendar_month_name, d2.store_region;
22
- select d1.calendar_year, d1.calendar_month_name, d2.store_region, d2.store_district,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d1.calendar_month_name, d2.store_region, d2.store_district;
23
- select d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d2.store_region,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d2.store_region;
24
- select d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d2.store_region, d2.store_district,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d2.store_region, d2.store_district;
25
- select d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d1.day_number_in_calendar_month, d2.store_region,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d1.day_number_in_calendar_month, d2.store_region;
26
- select d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d1.day_number_in_calendar_month, d2.store_region, d2.store_district,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d1.day_number_in_calendar_month, d2.store_region, d2.store_district;
@@ -1,150 +0,0 @@
1
- mysql> select d1.calendar_year, d2.store_state,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d2.store_state;
2
- +---------------+-------------+----------------+---------------------+
3
- | calendar_year | store_state | sales_quantity | sales_dollar_amount |
4
- +---------------+-------------+----------------+---------------------+
5
- | 2001 | Florida | 6 | 6.90000009536743 |
6
- | 2002 | Florida | 2 | 2.6800000667572 |
7
- | 2003 | Florida | 4 | 5.3600001335144 |
8
- | 2006 | Florida | 5 | 6.30000013113022 |
9
- +---------------+-------------+----------------+---------------------+
10
- 4 rows in set (0.00 sec)
11
-
12
- mysql> select d1.calendar_year, d2.store_state, d2.store_county,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d2.store_state, d2.store_county;
13
- +---------------+-------------+--------------+----------------+---------------------+
14
- | calendar_year | store_state | store_county | sales_quantity | sales_dollar_amount |
15
- +---------------+-------------+--------------+----------------+---------------------+
16
- | 2001 | Florida | Miami-Dade | 6 | 6.90000009536743 |
17
- | 2002 | Florida | Miami-Dade | 2 | 2.6800000667572 |
18
- | 2003 | Florida | Miami-Dade | 4 | 5.3600001335144 |
19
- | 2006 | Florida | Miami-Dade | 5 | 6.30000013113022 |
20
- +---------------+-------------+--------------+----------------+---------------------+
21
- 4 rows in set (0.00 sec)
22
-
23
- mysql> select d1.calendar_year, d2.store_state, d2.store_county, d2.store_city,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d2.store_state, d2.store_county, d2.store_city;
24
- +---------------+-------------+--------------+-------------+----------------+---------------------+
25
- | calendar_year | store_state | store_county | store_city | sales_quantity | sales_dollar_amount |
26
- +---------------+-------------+--------------+-------------+----------------+---------------------+
27
- | 2001 | Florida | Miami-Dade | Miami | 3 | 3.45000004768372 |
28
- | 2001 | Florida | Miami-Dade | South Miami | 3 | 3.45000004768372 |
29
- | 2002 | Florida | Miami-Dade | Miami | 1 | 1.3400000333786 |
30
- | 2002 | Florida | Miami-Dade | South Miami | 1 | 1.3400000333786 |
31
- | 2003 | Florida | Miami-Dade | Miami | 2 | 2.6800000667572 |
32
- | 2003 | Florida | Miami-Dade | South Miami | 2 | 2.6800000667572 |
33
- | 2006 | Florida | Miami-Dade | Miami | 4 | 4.96000009775162 |
34
- | 2006 | Florida | Miami-Dade | South Miami | 1 | 1.3400000333786 |
35
- +---------------+-------------+--------------+-------------+----------------+---------------------+
36
- 8 rows in set (0.00 sec)
37
-
38
- mysql> select d1.calendar_year, d1.calendar_month_name, d2.store_state,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d1.calendar_month_name, d2.store_state;
39
- +---------------+---------------------+-------------+----------------+---------------------+
40
- | calendar_year | calendar_month_name | store_state | sales_quantity | sales_dollar_amount |
41
- +---------------+---------------------+-------------+----------------+---------------------+
42
- | 2001 | November | Florida | 6 | 6.90000009536743 |
43
- | 2002 | September | Florida | 2 | 2.6800000667572 |
44
- | 2003 | June | Florida | 4 | 5.3600001335144 |
45
- | 2006 | October | Florida | 5 | 6.30000013113022 |
46
- +---------------+---------------------+-------------+----------------+---------------------+
47
- 4 rows in set (0.01 sec)
48
-
49
- mysql> select d1.calendar_year, d1.calendar_month_name, d2.store_state, d2.store_county,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d1.calendar_month_name, d2.store_state, d2.store_county;
50
- +---------------+---------------------+-------------+--------------+----------------+---------------------+
51
- | calendar_year | calendar_month_name | store_state | store_county | sales_quantity | sales_dollar_amount |
52
- +---------------+---------------------+-------------+--------------+----------------+---------------------+
53
- | 2001 | November | Florida | Miami-Dade | 6 | 6.90000009536743 |
54
- | 2002 | September | Florida | Miami-Dade | 2 | 2.6800000667572 |
55
- | 2003 | June | Florida | Miami-Dade | 4 | 5.3600001335144 |
56
- | 2006 | October | Florida | Miami-Dade | 5 | 6.30000013113022 |
57
- +---------------+---------------------+-------------+--------------+----------------+---------------------+
58
- 4 rows in set (0.04 sec)
59
-
60
- mysql> select d1.calendar_year, d1.calendar_month_name, d2.store_state, d2.store_county, d2.store_city,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d1.calendar_month_name, d2.store_state, d2.store_county, d2.store_city;
61
- +---------------+---------------------+-------------+--------------+-------------+----------------+---------------------+
62
- | calendar_year | calendar_month_name | store_state | store_county | store_city | sales_quantity | sales_dollar_amount |
63
- +---------------+---------------------+-------------+--------------+-------------+----------------+---------------------+
64
- | 2001 | November | Florida | Miami-Dade | Miami | 3 | 3.45000004768372 |
65
- | 2001 | November | Florida | Miami-Dade | South Miami | 3 | 3.45000004768372 |
66
- | 2002 | September | Florida | Miami-Dade | Miami | 1 | 1.3400000333786 |
67
- | 2002 | September | Florida | Miami-Dade | South Miami | 1 | 1.3400000333786 |
68
- | 2003 | June | Florida | Miami-Dade | Miami | 2 | 2.6800000667572 |
69
- | 2003 | June | Florida | Miami-Dade | South Miami | 2 | 2.6800000667572 |
70
- | 2006 | October | Florida | Miami-Dade | Miami | 4 | 4.96000009775162 |
71
- | 2006 | October | Florida | Miami-Dade | South Miami | 1 | 1.3400000333786 |
72
- +---------------+---------------------+-------------+--------------+-------------+----------------+---------------------+
73
- 8 rows in set (0.00 sec)
74
-
75
- mysql> select d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d2.store_state,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d2.store_state;
76
- +---------------+---------------------+---------------+-------------+----------------+---------------------+
77
- | calendar_year | calendar_month_name | calendar_week | store_state | sales_quantity | sales_dollar_amount |
78
- +---------------+---------------------+---------------+-------------+----------------+---------------------+
79
- | 2001 | November | Week 45 | Florida | 6 | 6.90000009536743 |
80
- | 2002 | September | Week 36 | Florida | 2 | 2.6800000667572 |
81
- | 2003 | June | Week 26 | Florida | 4 | 5.3600001335144 |
82
- | 2006 | October | Week 41 | Florida | 5 | 6.30000013113022 |
83
- +---------------+---------------------+---------------+-------------+----------------+---------------------+
84
- 4 rows in set (0.00 sec)
85
-
86
- mysql> select d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d2.store_state, d2.store_county,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d2.store_state, d2.store_county;
87
- +---------------+---------------------+---------------+-------------+--------------+----------------+---------------------+
88
- | calendar_year | calendar_month_name | calendar_week | store_state | store_county | sales_quantity | sales_dollar_amount |
89
- +---------------+---------------------+---------------+-------------+--------------+----------------+---------------------+
90
- | 2001 | November | Week 45 | Florida | Miami-Dade | 6 | 6.90000009536743 |
91
- | 2002 | September | Week 36 | Florida | Miami-Dade | 2 | 2.6800000667572 |
92
- | 2003 | June | Week 26 | Florida | Miami-Dade | 4 | 5.3600001335144 |
93
- | 2006 | October | Week 41 | Florida | Miami-Dade | 5 | 6.30000013113022 |
94
- +---------------+---------------------+---------------+-------------+--------------+----------------+---------------------+
95
- 4 rows in set (0.01 sec)
96
-
97
- mysql> select d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d2.store_state, d2.store_county, d2.store_city,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d2.store_state, d2.store_county, d2.store_city;
98
- +---------------+---------------------+---------------+-------------+--------------+-------------+----------------+---------------------+
99
- | calendar_year | calendar_month_name | calendar_week | store_state | store_county | store_city | sales_quantity | sales_dollar_amount |
100
- +---------------+---------------------+---------------+-------------+--------------+-------------+----------------+---------------------+
101
- | 2001 | November | Week 45 | Florida | Miami-Dade | Miami | 3 | 3.45000004768372 |
102
- | 2001 | November | Week 45 | Florida | Miami-Dade | South Miami | 3 | 3.45000004768372 |
103
- | 2002 | September | Week 36 | Florida | Miami-Dade | Miami | 1 | 1.3400000333786 |
104
- | 2002 | September | Week 36 | Florida | Miami-Dade | South Miami | 1 | 1.3400000333786 |
105
- | 2003 | June | Week 26 | Florida | Miami-Dade | Miami | 2 | 2.6800000667572 |
106
- | 2003 | June | Week 26 | Florida | Miami-Dade | South Miami | 2 | 2.6800000667572 |
107
- | 2006 | October | Week 41 | Florida | Miami-Dade | Miami | 4 | 4.96000009775162 |
108
- | 2006 | October | Week 41 | Florida | Miami-Dade | South Miami | 1 | 1.3400000333786 |
109
- +---------------+---------------------+---------------+-------------+--------------+-------------+----------------+---------------------+
110
- 8 rows in set (0.04 sec)
111
-
112
- mysql> select d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d1.day_number_in_calendar_month, d2.store_state,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d1.day_number_in_calendar_month, d2.store_state;
113
- +---------------+---------------------+---------------+------------------------------+-------------+----------------+---------------------+
114
- | calendar_year | calendar_month_name | calendar_week | day_number_in_calendar_month | store_state | sales_quantity | sales_dollar_amount |
115
- +---------------+---------------------+---------------+------------------------------+-------------+----------------+---------------------+
116
- | 2001 | November | Week 45 | 8 | Florida | 6 | 6.90000009536743 |
117
- | 2002 | September | Week 36 | 3 | Florida | 2 | 2.6800000667572 |
118
- | 2003 | June | Week 26 | 30 | Florida | 4 | 5.3600001335144 |
119
- | 2006 | October | Week 41 | 12 | Florida | 3 | 3.62000006437302 |
120
- | 2006 | October | Week 41 | 13 | Florida | 2 | 2.6800000667572 |
121
- +---------------+---------------------+---------------+------------------------------+-------------+----------------+---------------------+
122
- 5 rows in set (0.01 sec)
123
-
124
- mysql> select d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d1.day_number_in_calendar_month, d2.store_state, d2.store_county,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d1.day_number_in_calendar_month, d2.store_state, d2.store_county;
125
- +---------------+---------------------+---------------+------------------------------+-------------+--------------+----------------+---------------------+
126
- | calendar_year | calendar_month_name | calendar_week | day_number_in_calendar_month | store_state | store_county | sales_quantity | sales_dollar_amount |
127
- +---------------+---------------------+---------------+------------------------------+-------------+--------------+----------------+---------------------+
128
- | 2001 | November | Week 45 | 8 | Florida | Miami-Dade | 6 | 6.90000009536743 |
129
- | 2002 | September | Week 36 | 3 | Florida | Miami-Dade | 2 | 2.6800000667572 |
130
- | 2003 | June | Week 26 | 30 | Florida | Miami-Dade | 4 | 5.3600001335144 |
131
- | 2006 | October | Week 41 | 12 | Florida | Miami-Dade | 3 | 3.62000006437302 |
132
- | 2006 | October | Week 41 | 13 | Florida | Miami-Dade | 2 | 2.6800000667572 |
133
- +---------------+---------------------+---------------+------------------------------+-------------+--------------+----------------+---------------------+
134
- 5 rows in set (0.01 sec)
135
-
136
- mysql> select d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d1.day_number_in_calendar_month, d2.store_state, d2.store_county, d2.store_city,sum(f.sales_quantity) as sales_quantity,sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d1.day_number_in_calendar_month, d2.store_state, d2.store_county, d2.store_city;
137
- +---------------+---------------------+---------------+------------------------------+-------------+--------------+-------------+----------------+---------------------+
138
- | calendar_year | calendar_month_name | calendar_week | day_number_in_calendar_month | store_state | store_county | store_city | sales_quantity | sales_dollar_amount |
139
- +---------------+---------------------+---------------+------------------------------+-------------+--------------+-------------+----------------+---------------------+
140
- | 2001 | November | Week 45 | 8 | Florida | Miami-Dade | Miami | 3 | 3.45000004768372 |
141
- | 2001 | November | Week 45 | 8 | Florida | Miami-Dade | South Miami | 3 | 3.45000004768372 |
142
- | 2002 | September | Week 36 | 3 | Florida | Miami-Dade | Miami | 1 | 1.3400000333786 |
143
- | 2002 | September | Week 36 | 3 | Florida | Miami-Dade | South Miami | 1 | 1.3400000333786 |
144
- | 2003 | June | Week 26 | 30 | Florida | Miami-Dade | Miami | 2 | 2.6800000667572 |
145
- | 2003 | June | Week 26 | 30 | Florida | Miami-Dade | South Miami | 2 | 2.6800000667572 |
146
- | 2006 | October | Week 41 | 12 | Florida | Miami-Dade | Miami | 2 | 2.28000003099442 |
147
- | 2006 | October | Week 41 | 12 | Florida | Miami-Dade | South Miami | 1 | 1.3400000333786 |
148
- | 2006 | October | Week 41 | 13 | Florida | Miami-Dade | Miami | 2 | 2.6800000667572 |
149
- +---------------+---------------------+---------------+------------------------------+-------------+--------------+-------------+----------------+---------------------+
150
- 9 rows in set (0.00 sec)
data/doc/queries.txt DELETED
@@ -1,35 +0,0 @@
1
- # This will sum sales quantity and group by calendar year
2
- select d1.calendar_year, sum(f.sales_quantity) from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id group by d1.calendar_year;
3
-
4
- # This will sum sales quantity and group by store name
5
- select d2.store_name, sum(f.sales_quantity) from pos_retail_sales_transaction_facts f join store_dimension d2 on f.store_id = d2.id group by d2.store_name;
6
-
7
- # This will sum sales quantity and group by calendar year and store name
8
- select d1.calendar_year, d2.store_name, sum(f.sales_quantity) from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d2.store_name;
9
-
10
- # This will sum sales quantity and group by calendar year and store region
11
- select d1.calendar_year, d2.store_region, sum(f.sales_quantity) as sales_quantity from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d2.store_region;
12
-
13
-
14
- select d1.calendar_year, d1.calendar_quarter, d2.store_region, sum(f.sales_quantity) as sales_quantity from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d1.calendar_quarter, d2.store_region;
15
-
16
- select d1.calendar_year, d1.calendar_quarter, d1.calendar_month_name, d1.calendar_week, d1.day_number_in_calendar_month, d2.store_region, d2.store_district, sum(f.sales_quantity) as sales_quantity, sum(f.sales_dollar_amount) as sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id group by d1.calendar_year, d1.calendar_quarter, d1.calendar_month_name, d1.calendar_week, d1.day_number_in_calendar_month, d2.store_region, d2.store_district;
17
-
18
-
19
- select * from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id;
20
-
21
-
22
- select f.pos_transaction_number, d1.calendar_year, d1.calendar_month_name, d1.calendar_week, d1.day_number_in_calendar_month as day, d2.store_region, d2.store_district, f.sales_quantity, f.sales_dollar_amount from pos_retail_sales_transaction_facts f join date_dimension d1 on f.date_id = d1.id join store_dimension d2 on f.store_id = d2.id;
23
-
24
-
25
- # This will calculate the number of days per year
26
- select calendar_year, count(id) from date_dimension group by calendar_year;
27
-
28
- # This will calculate the number of days per month for a particular calendar year
29
- select calendar_year, calendar_month_name, count(id) from date_dimension where calendar_year = 2002 group by calendar_month_name;
30
-
31
- # This will calculate the number of fiscal year months in each calendar year. * This is what to use for denomniators *
32
- select calendar_year, count(distinct(fiscal_year_month)) from date_dimension group by calendar_year;
33
-
34
- # The example below shows the number of days in each week for each fiscal month
35
- select calendar_year_month, count(distinct(day_of_week)) from date_dimension where calendar_year = 2002 group by calendar_year_month;
@@ -1,5 +0,0 @@
1
- require 'active_warehouse/model/aggregate'
2
- require 'active_warehouse/model/fact'
3
- require 'active_warehouse/model/dimension'
4
- require 'active_warehouse/model/cube'
5
- require 'active_warehouse/model/report'
@@ -1,3 +0,0 @@
1
- require 'active_warehouse/model/dimension/dimension'
2
- require 'active_warehouse/model/dimension/hierarchical_dimension'
3
- require 'active_warehouse/model/dimension/bridge'
@@ -1,32 +0,0 @@
1
- module ActiveWarehouse
2
- class Bridge < ActiveRecord::Base
3
- class << self
4
- # Get the table name. By default the table name will be the name of the dimension in singular form.
5
- #
6
- # Example: DateDimension will have a table called date_dimension
7
- def table_name
8
- name = self.name.demodulize.underscore
9
- set_table_name(name)
10
- name
11
- end
12
-
13
- def build_table(force=false)
14
- connection.drop_table(table_name) if force and table_exists?
15
- if !table_exists?
16
- connection.create_table(table_name, :id => false) do |t|
17
- t.column :parent_id, :integer
18
- t.column :child_id, :integer
19
- t.column :levels_from_parent, :integer
20
- t.column :bottom_flag, :boolean
21
- t.column :top_flag, :boolean
22
- end
23
- connection.add_index table_name, :parent_id
24
- connection.add_index table_name, :child_id
25
- connection.add_index table_name, :levels_from_parent
26
- connection.add_index table_name, :bottom_flag
27
- connection.add_index table_name, :top_flag
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,152 +0,0 @@
1
- module ActiveWarehouse
2
- class Dimension < ActiveRecord::Base
3
- class << self
4
-
5
- # Indicate that this dimension is a variable depth hierarchical dimension. Calling this method will
6
- # mix-in the ActiveWarehouse::HierarchicalDimension module, adding methods to support the hierarchical
7
- # representation of this dimension
8
- def acts_as_hierarchy_dimension
9
- # Mix in the hierarchy dimension support code
10
- include ActiveWarehouse::HierarchicalDimension
11
- end
12
-
13
- # Define a named attribute hierarchy in the dimension.
14
- #
15
- # Example: define_hierarchy(:fiscal_calendar, [:fiscal_year, :fiscal_quarter, :fiscal_month])
16
- #
17
- # This would indicate that one of the drill down paths for this dimension is:
18
- # Fiscal Year -> Fiscal Quarter -> Fiscal Month
19
- #
20
- # Internally the hierarchies are stored in order. The first hierarchy defined will be used as the default
21
- # if no hierarchy is specified when rendering a cube.
22
- def define_hierarchy(name, levels)
23
- hierarchies << name
24
- hierarchy_levels[name] = levels
25
- end
26
-
27
- # Get the named attribute hierarchy
28
- #
29
- # Example: hierarchy(:fiscal_calendar) might return [:fiscal_year, :fiscal_quarter, :fiscal_month]
30
- def hierarchy(name)
31
- hierarchy_levels[name]
32
- end
33
-
34
- # Get the ordered hierarchy names
35
- def hierarchies
36
- @hierarchies ||= []
37
- end
38
-
39
- # Get the hierarchy levels hash
40
- def hierarchy_levels
41
- @hierarchy_levels ||= {}
42
- end
43
-
44
- # Return a symbol used when referring to this dimension. The symbol is calculated by demodulizing and underscoring the
45
- # dimension's class name and then removing the trailing _dimension.
46
- #
47
- # Example: DateDimension will return a symbol :date
48
- def sym
49
- self.name.demodulize.underscore.gsub(/_dimension/, '').to_sym
50
- end
51
-
52
- # Get the table name. By default the table name will be the name of the dimension in singular form.
53
- #
54
- # Example: DateDimension will have a table called date_dimension
55
- def table_name
56
- name = self.name.demodulize.underscore
57
- set_table_name(name)
58
- name
59
- end
60
-
61
- # Convert the given name into a dimension class name
62
- def class_name(name)
63
- dimension_name = name.to_s
64
- dimension_name = "#{dimension_name}_dimension" unless dimension_name =~ /_dimension$/
65
- dimension_name.classify
66
- end
67
-
68
- # Get a class for the specified named dimension
69
- def class_for_name(name)
70
- class_name(name).constantize
71
- end
72
-
73
- # Return the time when the underlying dimension source file was last modified. This is used
74
- # to determine if a cube structure rebuild is required
75
- def last_modified
76
- File.new(__FILE__).mtime
77
- end
78
-
79
- # Get the dimension class for the specified dimension parameter. The dimension parameter may be a class,
80
- # String or Symbol.
81
- def to_dimension(dimension)
82
- return dimension if dimension.is_a?(Class) and dimension.superclass == Dimension
83
- return class_for_name(dimension)
84
- end
85
-
86
- # Returns a hash of all of the values at the specified hierarchy level mapped to the count at that level.
87
- # For example, given a date dimension with years from 2002 to 2004 and a hierarchy defined with:
88
- #
89
- # hierarchy :cy, [:calendar_year, :calendar_quarter, :calendar_month_name]
90
- #
91
- # ...then...
92
- #
93
- # DateDimension.denominator_count(:cy, :calendar_year, :calendar_quarter) returns {'2002' => 4, '2003' => 4, '2004' => 4}
94
- #
95
- # If the denominator_level parameter is omitted or nil then:
96
- #
97
- # DateDimension.denominator_count(:cy, :calendar_year) returns {'2003' => 365, '2003' => 365, '2004' => 366}
98
- #
99
- def denominator_count(hierarchy_name, level, denominator_level=nil)
100
- if hierarchy_levels[hierarchy_name].nil?
101
- raise ArgumentError, "The hierarchy '#{hierarchy_name}' does not exist in your dimension #{name}"
102
- end
103
-
104
- q = nil
105
- # If the denominator_level is specified and it is not the last element in the hierarchy then do a distinct count. If
106
- # the denominator level is less than the current level then raise an ArgumentError. In other words, if the current level is
107
- # calendar month then passing in calendar year as the denominator level would raise an ArgumentErro.
108
- #
109
- # If the denominator_level is not specified then assume the finest grain possible (in the context of a date dimension
110
- # this would be each day) and use the id to count.
111
- if denominator_level && hierarchy_levels[hierarchy_name].last != denominator_level
112
- level_index = hierarchy_levels[hierarchy_name].index(level)
113
- denominator_index = hierarchy_levels[hierarchy_name].index(denominator_level)
114
-
115
- if level_index.nil?
116
- raise ArgumentError, "The level '#{level}' does not appear to exist"
117
- end
118
- if denominator_index.nil?
119
- raise ArgumentError, "The denominator level '#{denominator_level}' does not appear to exist"
120
- end
121
- if hierarchy_levels[hierarchy_name].index(denominator_level) < hierarchy_levels[hierarchy_name].index(level)
122
- raise ArgumentError, "The index of the denominator level '#{denominator_level}' in the hierarchy '#{hierarchy_name}' must be greater than or equal to the level '#{level}'"
123
- end
124
-
125
- q = "select #{level}, count(distinct(#{denominator_level})) from #{table_name} group by #{level}"
126
- else
127
- q = "select #{level}, count(id) from #{table_name} group by #{level}"
128
- end
129
- denominators = {}
130
- connection.execute(q).each do |row|
131
- denominators[row[0]] = row[1].to_i
132
- end
133
- denominators
134
- end
135
-
136
- # Get the foreign key for this dimension which is used in Fact tables.
137
- #
138
- # Example: DateDimension would have a foreign key of date_id
139
- def foreign_key
140
- table_name.sub(/_dimension/,'') + '_id'
141
- end
142
-
143
- # Get an array of the available values for a particular hierarchy level
144
- # For example, given a DateDimension with data from 2002 to 2004:
145
- #
146
- # available_values('calendar_year') returns ['2002','2003','2004']
147
- def available_values(level)
148
- find(:all, :group => level.to_s, :order => level.to_s).collect {|dim| dim.send(level.to_sym)}
149
- end
150
- end
151
- end
152
- end
@@ -1,35 +0,0 @@
1
- module ActiveWarehouse
2
- module HierarchicalDimension
3
- def self.included(base)
4
- base.extend(ClassMethods)
5
- end
6
-
7
- module ClassMethods
8
- # Get the bridge class for this hierarchical dimension
9
- def bridge_class
10
- unless @bridge_class
11
- @bridge_class = Class.new(ActiveWarehouse::Bridge)
12
- Object.const_set(bridge_class_name, @bridge_class)
13
- end
14
- @bridge_class
15
- end
16
-
17
- # Get the bridge class name for this hierarchical dimension
18
- def bridge_class_name
19
- name.gsub(/Dimension$/, '') + 'HierarchyBridge'
20
- end
21
- end
22
-
23
- # Get the parent for this node
24
- def parent
25
- bridge = bridge_class.new
26
- bridge.find(:first, :conditions => ['levels_from_parent = 1 and child_id = ?', self.id])
27
- end
28
-
29
- # Get the children for this node
30
- def children
31
- bridge = bridge_class.new
32
- bridge.find(:all, :conditions => ['levels_from_parent = 1 and parent_id = ?', self.id])
33
- end
34
- end
35
- end