Changes between Version 12 and Version 13 of AdvancedReports


Ignore:
Timestamp:
09/25/25 00:28:41 (3 weeks ago)
Author:
223270
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedReports

    v12 v13  
    22
    33=== Дестинации со најголем број на разновидни настани
    4 Идентификување на дестинации кои имаат најголем број на различни видови настани. Во долунаведениот код се пребаруваат сите дестинации и ги брои различните видови на настани (како концерти, фестивали, саеми и сл.) поврзани со секоја дестинација. Потоа, резултатите се сортираат по бројот на различни настани во опаѓачки редослед и се добива еден вид на рангирање. Од особено значење за корисници што сакаат да вклучат повеќе разновидни настани при нивното патување.
     4Идентификување на дестинации со најголем број на различни видови на настани (концерти, фестивали, саеми и сл.).
     5Овој извештај е корисен за корисници што сакаат разновидно патување.
    56{{{
    67SELECT d.location_name AS destination, COUNT(DISTINCT e.event_type) AS event_number
     
    2122
    2223=== Настани на одредена дестинација
    23 Дополнително, за да се прикажат различни категории на настани за одредена дестинација. За пример, доколку сакате да ги видите сите видови настани што се одржуваат во Охрид:
     24Прикажување на сите категории на настани за одредена дестинација.
    2425{{{
    2526SELECT DISTINCT e.event_type AS event_type
     
    3132
    3233=== Топ дестинации според просечен квалитет на рецензии
    33 Овде се зема просечниот квалитет на рецензиите за секоја дестинација и ги прикажува првите 10 дестинации со највисок квалитет на рецензии. Корисно за корисниците што сакаат да ја изберат најдобро оценетата дестинација.
     34Прикажува првите 10 дестинации со највисок просечен квалитет на рецензии.
    3435{{{
    3536SELECT d.location_name AS destination_name,
     
    4445
    4546=== Дестинации со најголем број на активности под различни ценовни опсези
    46 Приказ на дестинациите и брои колку активности постојат во различни ценовни групи (пример под 20, под 50, под 100 евра). Тоа му помага на корисникот да избере дестинација според неговиот буџет и преференции за активности.
     47Го прикажува бројот на активности по ценовни групи (<20, <50, <100).
    4748{{{
    4849SELECT d.location_name AS destination_name,
     
    5859
    5960=== Дестинации со најголем процент на достапни(евтини) активности
    60 Се прикажуваат дестинации со евтини активности. Овој извештај покажува кои дестинации имаат најголем удел на евтини активности во вкупната понуда.
     61Овој извештај покажува кои дестинации имаат најголем удел на евтини активности (<20) во однос на вкупната понуда.
    6162{{{
    6263SELECT d.location_name AS destination_name,
     
    6869GROUP BY d.location_name
    6970HAVING COUNT(a.id_activity) > 0
    70 ORDER BY percent_cheap_activities DESC; 
     71ORDER BY percent_cheap_activities DESC;
    7172}}}
    7273
    7374
    7475=== Топ корисници со најголем број напишани рецензии
    75 Најактивни корисници т.е. оние кои имаат напишано најголем број на рецензии.
     76Идентификува најактивни корисници.
    7677{{{
    7778SELECT u.id_user AS user_id,
     
    8687
    8788=== Најисплатливи пакети (Best value for per day)
    88 Пресметување на цената по ден за пакети, што помага да се дознае кој пакет има најдобра вредност според сумата. Во случај да има пакет од 20 евра за 1 ден или пакет од 50 евра за 1 недела, би можело да се прикаже која опција е најисплатлива.
     89Пресметува цена по ден за пакетите и враќа најисплатлив пакет.
    8990{{{
    9091SELECT p.package_name,
     
    9798
    9899=== Приказ на бројот на резервации по месец
    99 Помага да се следи трендот на резервации преку времето.
     100Следење на тренд на резервации низ времето.
    100101{{{
    101102SELECT DATE_TRUNC('month', r.time_point) AS month,
     
    108109
    109110=== Приказ на бројот на нови корисници по месец
    110 Покажување на новорегистрираните корисници по месец. Овозможува да се види растот на бројот на корисници во различни месеци.
     111Прикажува број на новорегистрирани корисници по месец.
    111112{{{
    112113SELECT DATE_TRUNC('month', u.birth_date) AS month,
     
    155156
    156157
    157 === Приказ на број на резервации и активности по месец и корисник
     158=== ПАктивност на корисници по месец
    158159Статистика за секој корисник по месец, вклучувајќи број на резервации и активности. Така, се гледа активноста на корисниците и популарноста на нивните активности.
    159160{{{
     
    171172
    172173=== Просечен попуст на премиум корисници
     174Пресметува просечен попуст што го добиваат премиум корисници.
    173175{{{
    174176SELECT AVG(pu.discount) AS average_discount
    175 FROM premium pu;
     177FROM travel_sage.premium pu;
    176178}}}
    177179
     
    179181=== Детален преглед на дестинација
    180182Детален приказ на одредена туристичка дестинација т.е. покрај основните информации (име, опис, држава), ги вклучува и сите поврзани тагови, настани, активности и туристички пакети, како и тековни метеоролошки услови.
    181 
    182 Најчеста примена: во view за деталите на дестинација каде корисникот сака целосен преглед на достапни понуди и услови за избраното место.
    183183{{{
    184184SELECT
     
    194194    m.weather_condition
    195195FROM travel_sage.destination d
    196 LEFT JOIN travel_sage.destination_tag dt
    197        ON d.id_destination = dt.id_destination
    198 LEFT JOIN travel_sage.tag t
    199        ON dt.id_tag = t.id_tag
    200 LEFT JOIN travel_sage.event e
    201        ON d.id_destination = e.id_destination
    202 LEFT JOIN travel_sage.activity a
    203        ON d.id_destination = a.id_destination
    204 LEFT JOIN travel_sage.package p
    205        ON d.id_destination = p.id_destination
    206 LEFT JOIN travel_sage.meteorological_condition m
    207        ON d.id_destination = m.id_destination
     196LEFT JOIN travel_sage.destination_tag dt ON d.id_destination = dt.id_destination
     197LEFT JOIN travel_sage.tag t ON dt.id_tag = t.id_tag
     198LEFT JOIN travel_sage.event e ON d.id_destination = e.id_destination
     199LEFT JOIN travel_sage.activity a ON d.id_destination = a.id_destination
     200LEFT JOIN travel_sage.package p ON d.id_destination = p.id_destination
     201LEFT JOIN travel_sage.meteorological_condition m ON d.id_destination = m.id_destination
    208202WHERE d.id_destination = 2
    209 GROUP BY
    210     d.id_destination,
    211     d.location_name,
    212     d.location_desc,
    213     d.country,
    214     m.current_temp,
    215     m.weather_condition;
    216 }}}
    217 
     203GROUP BY d.id_destination, d.location_name, d.location_desc, d.country, m.current_temp, m.weather_condition;
     204}}}
     205
     206
     207=== Извештај за сите корисници според месец и година
     208Овој извештај овозможува следење на растот на базата на корисници преку време.
     209* Се групираат корисниците според месецот и годината на нивната регистрација (или датум на креирање во системот).
     210* За секој месец се прикажува бројот на нови корисници што се приклучиле.
     211
     212Со ова се добива тренд анализа на растот на платформата:
     213* Може да се забележат периоди кога бројот на регистрации нагло расте (на пример, после маркетинг кампања или воведување на нова функционалност).
     214* Може да се идентификуваат и „слаби“ месеци кога има малку нови регистрации.
     215{{{
     216CREATE OR REPLACE FUNCTION GetUsersReport(month INT, year INT)
     217RETURNS TABLE(
     218    UserFullName varchar(100),
     219    TotalReservations bigint,
     220    TotalActivities bigint,
     221    TotalSpent numeric,
     222    AverageReview numeric
     223)
     224LANGUAGE plpgsql
     225AS $$
     226BEGIN
     227    RETURN QUERY
     228    SELECT
     229       u.first_name || ' ' || u.last_name AS UserFullName,
     230       COUNT(DISTINCT r.id_reservation) AS TotalReservations,
     231       COUNT(DISTINCT ar.id_activity) AS TotalActivities,
     232       COALESCE(SUM(p.price),0) AS TotalSpent,
     233       COALESCE(AVG(rv.quality),0) AS AverageReview
     234    FROM travel_sage.users u
     235    LEFT JOIN travel_sage.reservation r ON u.id_user = r.id_user
     236    LEFT JOIN travel_sage.activity_reservation ar ON r.id_reservation = ar.id_reservation
     237    LEFT JOIN travel_sage.package_reservation pr ON r.id_reservation = pr.id_reservation
     238    LEFT JOIN travel_sage.package p ON pr.id_package = p.id_package
     239    LEFT JOIN travel_sage.review rv ON u.id_user = rv.id_user
     240    WHERE EXTRACT(MONTH FROM r.time_point) = month AND EXTRACT(YEAR FROM r.time_point) = year
     241    GROUP BY u.id_user;
     242END;
     243$$;
     244}}}
     245
     246
     247=== Извештај за сите пакети според месец и година
     248Овој извештај прикажува како пакетите (туристички аранжмани) се користат низ времето.
     249* Се групираат пакетите според месецот и годината на нивниот почетен датум.
     250* Се брои колку пати тие пакети биле резервирани во тој период.
     251
     252На овој начин може да се следи популарноста на различни пакети во текот на годината:
     253* Може да се открие кои пакети се најбарани во летниот период, а кои во зимскиот.
     254* Овозможува да се прави подобро планирање на ресурсите и промоциите (на пример, да се засили реклама за пакет кој е популарен пред лето).
     255{{{
     256CREATE OR REPLACE FUNCTION GetPackagesReport(month INT, year INT)
     257RETURNS TABLE(
     258    PackageName varchar(100),
     259    ReservationCount bigint,
     260    TotalRevenue numeric,
     261    AvgDuration numeric,
     262    PricePerDay numeric
     263)
     264LANGUAGE plpgsql
     265AS $$
     266BEGIN
     267    RETURN QUERY
     268    SELECT
     269       p.package_name,
     270       COUNT(pr.id_reservation) AS ReservationCount,
     271       SUM(p.price) AS TotalRevenue,
     272       AVG(DATE_PART('day', p.end_date - p.start_date)) AS AvgDuration,
     273       AVG(p.price / GREATEST(DATE_PART('day', p.end_date - p.start_date),1)) AS PricePerDay
     274    FROM travel_sage.package p
     275    JOIN travel_sage.package_reservation pr ON p.id_package = pr.id_package
     276    JOIN travel_sage.reservation r ON pr.id_reservation = r.id_reservation
     277    WHERE EXTRACT(MONTH FROM r.time_point) = month AND EXTRACT(YEAR FROM r.time_point) = year
     278    GROUP BY p.package_name;
     279END;
     280$$;
     281}}}