| 1 | | = Напредни теми |
| | 1 | = Напредна тема |
| | 2 | |
| | 3 | За напредна тема е избрано да се направи Data Cube мултидимензионална структура (аналитика) за записи на курсеви и промет. |
| | 4 | Структурата има 5 димензии: месец, тежина на курс, тип на запис за курс, големина на компанија каде работи корисникот, и метод на плаќање). Тоа се вкупно 2^5 = 32 кубоиди (кардиналност/лице на data cube-от). |
| | 5 | За секој кубоит имаме 5 метрики: број на записи, бруто промет, попусти дадено, нето промет, просечна цена по купување. |
| | 6 | |
| | 7 | {{{ |
| | 8 | CREATE MATERIALIZED VIEW mv_enrollment_revenue_cube AS |
| | 9 | SELECT date_trunc('month', p.date) AS month, |
| | 10 | c.difficulty AS course_difficulty, |
| | 11 | e.enrollment_type AS enrollment_type, |
| | 12 | u.company_size AS user_company_size, |
| | 13 | p.method AS payment_method, |
| | 14 | COUNT(e.id) AS enrollment_count, |
| | 15 | SUM(od.price) AS gross_revenue, |
| | 16 | SUM(od.discount_amount) AS total_discounts, |
| | 17 | SUM(od.price - od.discount_amount) AS net_revenue, |
| | 18 | AVG(od.price) AS avg_order_value |
| | 19 | FROM enrollment e |
| | 20 | JOIN course_version cv |
| | 21 | ON cv.id = e.course_version_id |
| | 22 | JOIN course c ON c.id = cv.course_id |
| | 23 | JOIN _user u ON u.id = e.user_id |
| | 24 | LEFT JOIN order_details od ON od.enrollment_id = e.id |
| | 25 | LEFT JOIN _order o ON o.id = od.order_id |
| | 26 | LEFT JOIN payment p ON p.order_id = o.id |
| | 27 | WHERE e.enrollment_status != 'CANCELED' |
| | 28 | and e.enrollment_status != 'PENDING' |
| | 29 | GROUP BY CUBE ( date_trunc('month', p.date), -- MONTH |
| | 30 | c.difficulty, -- ENUM ('BEGINNER', 'INTERMEDIATE', 'ADVANCED', 'EXPERT') |
| | 31 | e.enrollment_type, -- ENUM ('BUNDLE', 'INDIVIDUAL', 'LEARNING_PATH') |
| | 32 | u.company_size, -- ENUM ('FREELANCE', 'MICRO', 'SMALL', 'MEDIUM', 'MID_MARKET', 'ENTERPRISE', 'OTHER') |
| | 33 | p.method -- ENUM ('CARD', 'PAYPAL', 'CASYS') |
| | 34 | ); |
| | 35 | }}} |