| | 2 | = Data Cube ( Trade Analytics Cube ) |
| | 3 | |
| | 4 | Структурата има 5 димензии: корисник, акција (stock), година, месец и тип на трансакција (BUY/SELL). Со овие димензии се овозможува детална и агрегирана анализа на податоците од различни аспекти. |
| | 5 | |
| | 6 | Со користење на GROUP BY CUBE се добиваат сите можни комбинации на овие димензии, што значи дека се формираат вкупно 2⁵ = 32 кубоиди. За секој кубоит се пресметуваат неколку метрики: вкупна вредност на тргувањата (price * quantity), вкупна количина на извршени трансакции и број на трансакции. |
| | 7 | |
| | 8 | Редовите каде некоја димензија е NULL претставуваат агрегирани подзбирови, а со користење на GROUPING() функцијата јасно се разликуваат од реални NULL вредности во податоците. Овој пристап овозможува длабинска анализа на пазарното однесување на корисниците и перформансите на акциите низ различни временски периоди. |
| | 9 | |
| | 10 | Дополнително, овој Data Cube овозможува лесно откривање на трендови и шаблони во тргувањето, како што се најтргувани акции, најактивни корисници и сезонски промени во активноста. Со тоа се подобрува можноста за донесување аналитички одлуки и подлабоко разбирање на однесувањето на корисниците во системот. |
| | 11 | |
| | 12 | {{{ |
| | 13 | CREATE INDEX idx_tt_user ON trade_transaction(user_id); |
| | 14 | CREATE INDEX idx_tt_stock ON trade_transaction(stock_id); |
| | 15 | CREATE INDEX idx_tt_time ON trade_transaction(timestamp); |
| | 16 | |
| | 17 | SELECT |
| | 18 | u.username, |
| | 19 | s.symbol, |
| | 20 | EXTRACT(YEAR FROM tt.timestamp) AS year, |
| | 21 | EXTRACT(MONTH FROM tt.timestamp) AS month, |
| | 22 | tt.type, |
| | 23 | SUM(tt.price * tt.quantity) AS total_trade_value, |
| | 24 | SUM(tt.quantity) AS total_quantity, |
| | 25 | COUNT(*) AS trade_count, |
| | 26 | GROUPING(u.username) AS is_all_users, |
| | 27 | GROUPING(s.symbol) AS is_all_stocks, |
| | 28 | GROUPING(tt.type) AS is_all_types |
| | 29 | FROM trade_transaction tt |
| | 30 | JOIN users u ON tt.user_id = u.id |
| | 31 | JOIN stock s ON tt.stock_id = s.id |
| | 32 | GROUP BY CUBE ( |
| | 33 | u.username, |
| | 34 | s.symbol, |
| | 35 | EXTRACT(YEAR FROM tt.timestamp), |
| | 36 | EXTRACT(MONTH FROM tt.timestamp), |
| | 37 | tt.type |
| | 38 | ) |
| | 39 | ORDER BY u.username, s.symbol; |
| | 40 | }}} |