wiki:AdvancedTopics-AdvDb

Version 3 (modified by 231175, 8 days ago) ( diff )

--

Напредна тема

За напредна тема е избрано да се направи Data Cube мултидимензионална структура (аналитика) за записи на курсеви и промет. Структурата има 5 димензии: месец, тежина на курс, тип на запис за курс, големина на компанија каде работи корисникот, и метод на плаќање). Тоа се вкупно 2<sup>5</sup> = 32 кубоиди (кардиналност/лице на data cube-от). За секој кубоит имаме 5 метрики: број на записи, бруто промет, попусти дадено, нето промет, просечна цена по купување.

CREATE MATERIALIZED VIEW mv_enrollment_revenue_cube AS
SELECT date_trunc('month', p.date)        AS month,
       c.difficulty                       AS course_difficulty,
       e.enrollment_type                  AS enrollment_type,
       u.company_size                     AS user_company_size,
       p.method                           AS payment_method,
       COUNT(e.id)                        AS enrollment_count,
       SUM(od.price)                      AS gross_revenue,
       SUM(od.discount_amount)            AS total_discounts,
       SUM(od.price - od.discount_amount) AS net_revenue,
       AVG(od.price)                      AS avg_order_value
FROM enrollment e
         JOIN course_version cv
              ON cv.id = e.course_version_id
         JOIN course c ON c.id = cv.course_id
         JOIN _user u ON u.id = e.user_id
         LEFT JOIN order_details od ON od.enrollment_id = e.id
         LEFT JOIN _order o ON o.id = od.order_id
         LEFT JOIN payment p ON p.order_id = o.id
WHERE e.enrollment_status != 'CANCELED'
  and e.enrollment_status != 'PENDING'
GROUP BY CUBE ( date_trunc('month', p.date), -- MONTH
                c.difficulty,                -- ENUM ('BEGINNER', 'INTERMEDIATE', 'ADVANCED', 'EXPERT')
                e.enrollment_type,           -- ENUM ('BUNDLE', 'INDIVIDUAL', 'LEARNING_PATH')
                u.company_size,              -- ENUM ('FREELANCE', 'MICRO', 'SMALL', 'MEDIUM', 'MID_MARKET', 'ENTERPRISE', 'OTHER')
                p.method                     -- ENUM ('CARD', 'PAYPAL', 'CASYS')
    );
Note: See TracWiki for help on using the wiki.