Changes between Version 12 and Version 13 of AdvancedReports
- Timestamp:
- 09/25/25 00:28:41 (3 weeks ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
AdvancedReports
v12 v13 2 2 3 3 === Дестинации со најголем број на разновидни настани 4 Идентификување на дестинации кои имаат најголем број на различни видови настани. Во долунаведениот код се пребаруваат сите дестинации и ги брои различните видови на настани (како концерти, фестивали, саеми и сл.) поврзани со секоја дестинација. Потоа, резултатите се сортираат по бројот на различни настани во опаѓачки редослед и се добива еден вид на рангирање. Од особено значење за корисници што сакаат да вклучат повеќе разновидни настани при нивното патување. 4 Идентификување на дестинации со најголем број на различни видови на настани (концерти, фестивали, саеми и сл.). 5 Овој извештај е корисен за корисници што сакаат разновидно патување. 5 6 {{{ 6 7 SELECT d.location_name AS destination, COUNT(DISTINCT e.event_type) AS event_number … … 21 22 22 23 === Настани на одредена дестинација 23 Дополнително, за да се прикажат различни категории на настани за одредена дестинација. За пример, доколку сакате да ги видите сите видови настани што се одржуваат во Охрид: 24 Прикажување на сите категории на настани за одредена дестинација. 24 25 {{{ 25 26 SELECT DISTINCT e.event_type AS event_type … … 31 32 32 33 === Топ дестинации според просечен квалитет на рецензии 33 Овде се зема просечниот квалитет на рецензиите за секоја дестинација и ги прикажува првите 10 дестинации со највисок квалитет на рецензии. Корисно за корисниците што сакаат да ја изберат најдобро оценетата дестинација.34 Прикажува првите 10 дестинации со највисок просечен квалитет на рецензии. 34 35 {{{ 35 36 SELECT d.location_name AS destination_name, … … 44 45 45 46 === Дестинации со најголем број на активности под различни ценовни опсези 46 Приказ на дестинациите и брои колку активности постојат во различни ценовни групи (пример под 20, под 50, под 100 евра). Тоа му помага на корисникот да избере дестинација според неговиот буџет и преференции за активности.47 Го прикажува бројот на активности по ценовни групи (<20, <50, <100). 47 48 {{{ 48 49 SELECT d.location_name AS destination_name, … … 58 59 59 60 === Дестинации со најголем процент на достапни(евтини) активности 60 Се прикажуваат дестинации со евтини активности. Овој извештај покажува кои дестинации имаат најголем удел на евтини активности вовкупната понуда.61 Овој извештај покажува кои дестинации имаат најголем удел на евтини активности (<20) во однос на вкупната понуда. 61 62 {{{ 62 63 SELECT d.location_name AS destination_name, … … 68 69 GROUP BY d.location_name 69 70 HAVING COUNT(a.id_activity) > 0 70 ORDER BY percent_cheap_activities DESC; 71 ORDER BY percent_cheap_activities DESC; 71 72 }}} 72 73 73 74 74 75 === Топ корисници со најголем број напишани рецензии 75 Најактивни корисници т.е. оние кои имаат напишано најголем број на рецензии.76 Идентификува најактивни корисници. 76 77 {{{ 77 78 SELECT u.id_user AS user_id, … … 86 87 87 88 === Најисплатливи пакети (Best value for per day) 88 Пресметува ње на цената по ден за пакети, што помага да се дознае кој пакет има најдобра вредност според сумата. Во случај да има пакет од 20 евра за 1 ден или пакет од 50 евра за 1 недела, би можело да се прикаже која опција е најисплатлива.89 Пресметува цена по ден за пакетите и враќа најисплатлив пакет. 89 90 {{{ 90 91 SELECT p.package_name, … … 97 98 98 99 === Приказ на бројот на резервации по месец 99 Помага да се следи трендот на резервации прекувремето.100 Следење на тренд на резервации низ времето. 100 101 {{{ 101 102 SELECT DATE_TRUNC('month', r.time_point) AS month, … … 108 109 109 110 === Приказ на бројот на нови корисници по месец 110 П окажување на новорегистрираните корисници по месец. Овозможува да се види растот на бројот на корисници во различни месеци.111 Прикажува број на новорегистрирани корисници по месец. 111 112 {{{ 112 113 SELECT DATE_TRUNC('month', u.birth_date) AS month, … … 155 156 156 157 157 === П риказ на број на резервации и активности по месец и корисник158 === ПАктивност на корисници по месец 158 159 Статистика за секој корисник по месец, вклучувајќи број на резервации и активности. Така, се гледа активноста на корисниците и популарноста на нивните активности. 159 160 {{{ … … 171 172 172 173 === Просечен попуст на премиум корисници 174 Пресметува просечен попуст што го добиваат премиум корисници. 173 175 {{{ 174 176 SELECT AVG(pu.discount) AS average_discount 175 FROM premium pu;177 FROM travel_sage.premium pu; 176 178 }}} 177 179 … … 179 181 === Детален преглед на дестинација 180 182 Детален приказ на одредена туристичка дестинација т.е. покрај основните информации (име, опис, држава), ги вклучува и сите поврзани тагови, настани, активности и туристички пакети, како и тековни метеоролошки услови. 181 182 Најчеста примена: во view за деталите на дестинација каде корисникот сака целосен преглед на достапни понуди и услови за избраното место.183 183 {{{ 184 184 SELECT … … 194 194 m.weather_condition 195 195 FROM 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 196 LEFT JOIN travel_sage.destination_tag dt ON d.id_destination = dt.id_destination 197 LEFT JOIN travel_sage.tag t ON dt.id_tag = t.id_tag 198 LEFT JOIN travel_sage.event e ON d.id_destination = e.id_destination 199 LEFT JOIN travel_sage.activity a ON d.id_destination = a.id_destination 200 LEFT JOIN travel_sage.package p ON d.id_destination = p.id_destination 201 LEFT JOIN travel_sage.meteorological_condition m ON d.id_destination = m.id_destination 208 202 WHERE 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 203 GROUP 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 {{{ 216 CREATE OR REPLACE FUNCTION GetUsersReport(month INT, year INT) 217 RETURNS TABLE( 218 UserFullName varchar(100), 219 TotalReservations bigint, 220 TotalActivities bigint, 221 TotalSpent numeric, 222 AverageReview numeric 223 ) 224 LANGUAGE plpgsql 225 AS $$ 226 BEGIN 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; 242 END; 243 $$; 244 }}} 245 246 247 === Извештај за сите пакети според месец и година 248 Овој извештај прикажува како пакетите (туристички аранжмани) се користат низ времето. 249 * Се групираат пакетите според месецот и годината на нивниот почетен датум. 250 * Се брои колку пати тие пакети биле резервирани во тој период. 251 252 На овој начин може да се следи популарноста на различни пакети во текот на годината: 253 * Може да се открие кои пакети се најбарани во летниот период, а кои во зимскиот. 254 * Овозможува да се прави подобро планирање на ресурсите и промоциите (на пример, да се засили реклама за пакет кој е популарен пред лето). 255 {{{ 256 CREATE OR REPLACE FUNCTION GetPackagesReport(month INT, year INT) 257 RETURNS TABLE( 258 PackageName varchar(100), 259 ReservationCount bigint, 260 TotalRevenue numeric, 261 AvgDuration numeric, 262 PricePerDay numeric 263 ) 264 LANGUAGE plpgsql 265 AS $$ 266 BEGIN 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; 279 END; 280 $$; 281 }}}