| Version 2 (modified by , 3 days ago) ( diff ) |
|---|
Напредни теми
Data Cube ( Trade Analytics Cube )
Структурата има 5 димензии: корисник, акција (stock), година, месец и тип на трансакција (BUY/SELL). Со овие димензии се овозможува детална и агрегирана анализа на податоците од различни аспекти.
Со користење на GROUP BY CUBE се добиваат сите можни комбинации на овие димензии, што значи дека се формираат вкупно 2⁵ = 32 кубоиди. За секој кубоит се пресметуваат неколку метрики: вкупна вредност на тргувањата (price * quantity), вкупна количина на извршени трансакции и број на трансакции.
Редовите каде некоја димензија е NULL претставуваат агрегирани подзбирови, а со користење на GROUPING() функцијата јасно се разликуваат од реални NULL вредности во податоците. Овој пристап овозможува длабинска анализа на пазарното однесување на корисниците и перформансите на акциите низ различни временски периоди.
Дополнително, овој Data Cube овозможува лесно откривање на трендови и шаблони во тргувањето, како што се најтргувани акции, најактивни корисници и сезонски промени во активноста. Со тоа се подобрува можноста за донесување аналитички одлуки и подлабоко разбирање на однесувањето на корисниците во системот.
CREATE INDEX idx_tt_user ON trade_transaction(user_id);
CREATE INDEX idx_tt_stock ON trade_transaction(stock_id);
CREATE INDEX idx_tt_time ON trade_transaction(timestamp);
SELECT
u.username,
s.symbol,
EXTRACT(YEAR FROM tt.timestamp) AS year,
EXTRACT(MONTH FROM tt.timestamp) AS month,
tt.type,
SUM(tt.price * tt.quantity) AS total_trade_value,
SUM(tt.quantity) AS total_quantity,
COUNT(*) AS trade_count,
GROUPING(u.username) AS is_all_users,
GROUPING(s.symbol) AS is_all_stocks,
GROUPING(tt.type) AS is_all_types
FROM trade_transaction tt
JOIN users u ON tt.user_id = u.id
JOIN stock s ON tt.stock_id = s.id
GROUP BY CUBE (
u.username,
s.symbol,
EXTRACT(YEAR FROM tt.timestamp),
EXTRACT(MONTH FROM tt.timestamp),
tt.type
)
ORDER BY u.username, s.symbol;
