1 | | temporary text |
| 1 | = Купувач и Нарачки |
| 2 | |
| 3 | == Извештај за топ-купувачи |
| 4 | |
| 5 | Идентификување на купувачите кои направиле најголем број нарачки или (вкупно) потрошиле најмногу. |
| 6 | |
| 7 | {{{#!sql |
| 8 | SELECT |
| 9 | b.buyer_id, |
| 10 | b.company_name, |
| 11 | COUNT(o.order_id) AS total_orders, |
| 12 | COALESCE(SUM(i.total_amount), 0) AS total_spent |
| 13 | FROM |
| 14 | BUYER b |
| 15 | LEFT JOIN "ORDER" o ON b.buyer_id = o.buyer_id |
| 16 | LEFT JOIN INVOICE i ON o.order_id = i.order_id |
| 17 | GROUP BY |
| 18 | b.buyer_id, b.company_name |
| 19 | ORDER BY |
| 20 | total_spent DESC, total_orders DESC; |
| 21 | }}} |
| 22 | |
| 23 | == Очекувани нарачки од купувач |
| 24 | |
| 25 | Наведени се сите неплатени нарачки групирани по купувачи, вклучувајќи ја и вкупната вредност. |
| 26 | |
| 27 | {{{#!sql |
| 28 | SELECT |
| 29 | b.buyer_id, |
| 30 | b.company_name, |
| 31 | COUNT(o.order_id) AS pending_orders, |
| 32 | COALESCE(SUM(i.total_amount), 0) AS total_pending_value |
| 33 | FROM |
| 34 | BUYER b |
| 35 | LEFT JOIN "ORDER" o ON b.buyer_id = o.buyer_id |
| 36 | LEFT JOIN INVOICE i ON o.order_id = i.order_id |
| 37 | WHERE |
| 38 | o.status = 'Pending' |
| 39 | GROUP BY |
| 40 | b.buyer_id, b.company_name |
| 41 | ORDER BY |
| 42 | total_pending_value DESC; |
| 43 | }}} |
| 44 | |
| 45 | == Нарачки по земја |
| 46 | |
| 47 | Собирање нарачки по земјата на купувач и прикажување на нивниот соодветен придонес на целокупниот приходот. |
| 48 | |
| 49 | {{{#!sql |
| 50 | SELECT |
| 51 | b.country, |
| 52 | COUNT(o.order_id) AS total_orders, |
| 53 | COALESCE(SUM(i.total_amount), 0) AS total_revenue |
| 54 | FROM |
| 55 | BUYER b |
| 56 | LEFT JOIN "ORDER" o ON b.buyer_id = o.buyer_id |
| 57 | LEFT JOIN INVOICE i ON o.order_id = i.order_id |
| 58 | GROUP BY |
| 59 | b.country |
| 60 | ORDER BY |
| 61 | total_revenue DESC, total_orders DESC; |
| 62 | }}} |
| 63 | |
| 64 | = Производ и Снабдувач |
| 65 | |
| 66 | == Најпродавани производи |
| 67 | |
| 68 | Прикажување на најкупуваните производи - вкупен приход, продадена количина и поврзани производители. |
| 69 | |
| 70 | - **БЕЛЕШКА**: Бидејќи нема колона за количина во ORDER_PRODUCT, се смета "times_ordered" како број на нарачки што го содржи тој производ. |
| 71 | |
| 72 | {{{#!sql |
| 73 | SELECT |
| 74 | p.product_id, |
| 75 | p.name AS product_name, |
| 76 | prod.company_name AS producer_name, |
| 77 | COUNT(op.order_id) AS times_ordered, |
| 78 | COALESCE(SUM(i.total_amount), 0) AS total_revenue |
| 79 | FROM PRODUCT p |
| 80 | JOIN PRODUCER prod ON p.producer_id = prod.producer_id |
| 81 | LEFT JOIN ORDER_PRODUCT op ON p.product_id = op.product_id |
| 82 | LEFT JOIN "ORDER" o ON op.order_id = o.order_id |
| 83 | LEFT JOIN INVOICE i ON o.order_id = i.order_id |
| 84 | GROUP BY p.product_id, prod.company_name |
| 85 | ORDER BY total_revenue DESC, times_ordered DESC; |
| 86 | }}} |
| 87 | |
| 88 | == Приход по произведувач |
| 89 | |
| 90 | Прикажување вкупнен приход генериран од секој производител врз основа на нарачките што ги вклучува неговите производи. |
| 91 | |
| 92 | - **БЕЛЕШКА**: Се сумираат вкупните суми на уникатните фактура за да се избегне двојно броење на нарачката повеќекратно, ако има повеќе производи од ист производител. |
| 93 | |
| 94 | {{{#!sql |
| 95 | SELECT |
| 96 | pr.producer_id, |
| 97 | pr.company_name, |
| 98 | COALESCE(SUM(DISTINCT i.total_amount), 0) AS total_revenue |
| 99 | FROM PRODUCER pr |
| 100 | JOIN PRODUCT p ON pr.producer_id = p.producer_id |
| 101 | JOIN ORDER_PRODUCT op ON p.product_id = op.product_id |
| 102 | JOIN "ORDER" o ON op.order_id = o.order_id |
| 103 | JOIN INVOICE i ON o.order_id = i.order_id |
| 104 | GROUP BY pr.producer_id, pr.company_name |
| 105 | ORDER BY total_revenue DESC; |
| 106 | }}} |
| 107 | |
| 108 | == Производи со слаби перформанси |
| 109 | |
| 110 | Надевени се производите кои не се нарачани или имаат минимална продажба во последните 6 месеци. |
| 111 | "Минимално" овде се дефинира како помалку од 5 нарачки во тој период. Овој временски период може да се смени. |
| 112 | |
| 113 | {{{#!sql |
| 114 | SELECT |
| 115 | p.product_id, |
| 116 | p.name AS product_name, |
| 117 | pr.company_name AS producer_name, |
| 118 | COUNT(o.order_id) AS order_count |
| 119 | FROM PRODUCT p |
| 120 | JOIN PRODUCER pr ON p.producer_id = pr.producer_id |
| 121 | LEFT JOIN ORDER_PRODUCT op ON p.product_id = op.product_id |
| 122 | LEFT JOIN "ORDER" o |
| 123 | ON op.order_id = o.order_id |
| 124 | AND o.order_date >= CURRENT_DATE - INTERVAL '6 MONTH' |
| 125 | GROUP BY p.product_id, pr.company_name |
| 126 | HAVING COUNT(o.order_id) < 5 |
| 127 | ORDER BY order_count ASC; |
| 128 | }}} |
| 129 | |
| 130 | = Детали за нарачка |
| 131 | |
| 132 | == Извештај за исполнување нарачка |
| 133 | |
| 134 | Прикажување статус на испорака на секоја нарачка, вклучувајќи ги проценетите и датумите на испорака. |
| 135 | |
| 136 | - **БЕЛЕШКА**: бидејќи нема колона "actual_delivery_date", се споредуваат "estimated_delivery_date" (Табела {{{ORDERS}}}) и "estimated_arrival" (табела {{{TRANSPORT}}}). Полето "статус" може да покаже дали е испорачано или не. |
| 137 | |
| 138 | {{{#!sql |
| 139 | SELECT |
| 140 | o.order_id, |
| 141 | o.order_date, |
| 142 | o.status AS order_status, |
| 143 | o.estimated_delivery_date, |
| 144 | t.estimated_departure, |
| 145 | t.estimated_arrival, |
| 146 | CASE |
| 147 | WHEN o.status = 'Delivered' THEN 'Fulfilled' |
| 148 | WHEN o.status IN ('Shipped', 'In Transit') THEN 'In Transit' |
| 149 | ELSE 'Pending' |
| 150 | END AS fulfillment_status |
| 151 | FROM "ORDER" o |
| 152 | LEFT JOIN TRANSPORT t ON o.transport_id = t.transport_id |
| 153 | ORDER BY o.order_date DESC; |
| 154 | }}} |
| 155 | |
| 156 | == Анализа на нарачки по временски период |
| 157 | |
| 158 | Анализа на времето потребно од поставување на нарачката до проценетата испорака за секоја нарачка. |
| 159 | |
| 160 | - **БЕЛЕШКА**: се користи "estimated_delivery_date“ од {{{ORDER}}}. Може да се спореди и "transport.estimated_arrival". |
| 161 | |
| 162 | {{{#!sql |
| 163 | SELECT |
| 164 | o.order_id, |
| 165 | o.order_date, |
| 166 | o.estimated_delivery_date, |
| 167 | (o.estimated_delivery_date - o.order_date) AS days_from_order_to_estimated_delivery, |
| 168 | t.estimated_departure, |
| 169 | t.estimated_arrival, |
| 170 | (t.estimated_arrival - o.order_date) AS days_from_order_to_estimated_arrival |
| 171 | FROM "ORDER" o |
| 172 | LEFT JOIN TRANSPORT t ON o.transport_id = t.transport_id |
| 173 | ORDER BY o.order_id; |
| 174 | }}} |
| 175 | |
| 176 | == Детали за транспорт на нарачка |
| 177 | |
| 178 | Извештај кој прикажува детали за транспортот (поаѓање, пристигнување и растојание) поврзани со секоја нарачка. |
| 179 | |
| 180 | {{{#!sql |
| 181 | SELECT |
| 182 | o.order_id, |
| 183 | o.order_date, |
| 184 | t.carrier_name, |
| 185 | t.departure_point, |
| 186 | t.arrival_point, |
| 187 | t.estimated_departure, |
| 188 | t.estimated_arrival, |
| 189 | t.total_distance, |
| 190 | t.special_requirements, |
| 191 | t.insurance_conditions, |
| 192 | t.incoterm |
| 193 | FROM "ORDER" o |
| 194 | JOIN TRANSPORT t ON o.transport_id = t.transport_id |
| 195 | ORDER BY o.order_date DESC; |
| 196 | }}} |
| 197 | |
| 198 | = Фактура и Наплата |
| 199 | |
| 200 | == Извештај за неплатени фактури |
| 201 | |
| 202 | Наведени се сите неплатени фактури со нивната соодветна нарачка и детали за купувачот. |
| 203 | Претпоставува статус "Неплатен" или "Во тек" во табелата {{{INVOICE}}} или статус на плаќање различен од "payed" во табелата {{{PAYMENT}}}. |
| 204 | Ако информациите строго зависат од {{{invoice.status}}}, филтрирањето е "статус <---> платено". |
| 205 | |
| 206 | {{{#!sql |
| 207 | SELECT |
| 208 | i.invoice_key, |
| 209 | i.invoice_date, |
| 210 | i.status AS invoice_status, |
| 211 | p.due_date AS payment_due_date, |
| 212 | p.payment_status, |
| 213 | b.buyer_id, |
| 214 | b.company_name AS buyer_name, |
| 215 | b.billing_address |
| 216 | FROM INVOICE i |
| 217 | JOIN "ORDER" o ON i.order_id = o.order_id |
| 218 | JOIN BUYER b ON o.buyer_id = b.buyer_id |
| 219 | JOIN PAYMENT p ON o.order_id = p.order_id |
| 220 | WHERE p.payment_status NOT IN ('Paid') |
| 221 | ORDER BY p.due_date DESC; |
| 222 | }}} |
| 223 | |
| 224 | == Анализа на задоцнети плаќања |
| 225 | |
| 226 | Прикажани се сите нарачки чиј плаќања се извршени по крајниот датумот, вклучително и примерок од пресметката на задоцнетите трошоци. |
| 227 | Може да се промени дневната стапка. |
| 228 | |
| 229 | {{{#!sql |
| 230 | SELECT |
| 231 | p.payment_id, |
| 232 | p.order_id, |
| 233 | p.amount, |
| 234 | p.due_date, |
| 235 | p.payment_date, |
| 236 | CASE |
| 237 | WHEN p.payment_date > p.due_date THEN (p.payment_date - p.due_date) |
| 238 | ELSE 0 |
| 239 | END AS days_late, |
| 240 | CASE |
| 241 | WHEN p.payment_date > p.due_date THEN (p.amount * 0.01 * (p.payment_date - p.due_date)) |
| 242 | ELSE 0 |
| 243 | END AS late_fee |
| 244 | FROM PAYMENT p |
| 245 | WHERE p.payment_date > p.due_date; |
| 246 | }}} |
| 247 | |
| 248 | == Преглед на статусот на плаќање |
| 249 | |
| 250 | Агрегација и прикажување процент на плаќања кои се во различни статуси. |
| 251 | |
| 252 | {{{#!sql |
| 253 | SELECT |
| 254 | payment_status, |
| 255 | COUNT(*) AS count_payments, |
| 256 | SUM(amount) AS total_amount, |
| 257 | ROUND( |
| 258 | (COUNT(*) * 100.0 / SUM(COUNT(*)) OVER ()), 2 |
| 259 | ) AS percentage_of_payments |
| 260 | FROM PAYMENT |
| 261 | GROUP BY payment_status |
| 262 | ORDER BY count_payments DESC; |
| 263 | }}} |
| 264 | |
| 265 | = Финансиска Анализа |
| 266 | |
| 267 | == Трендови на приходи |
| 268 | |
| 269 | Месечни или квартални движења на приходите генерирани од нарачки. |
| 270 | Ова се заснова на табелата {{{INVOICE}}} ({{{invoice_date}}}, {{{total_amount}}}). |
| 271 | За месечни трендови, користиме {{{DATE_TRUNC}}} ({{{month}}}, i.invoice_date) |
| 272 | |
| 273 | - **БЕЛЕШКА**: За квартални трендови, по желба можете да го замените {{{month}}} со {{{quarter}}}. |
| 274 | |
| 275 | {{{#!sql |
| 276 | SELECT |
| 277 | DATE_TRUNC('month', i.invoice_date) AS month, |
| 278 | SUM(i.total_amount) AS monthly_revenue |
| 279 | FROM INVOICE i |
| 280 | GROUP BY DATE_TRUNC('month', i.invoice_date) |
| 281 | ORDER BY month; |
| 282 | }}} |
| 283 | |
| 284 | == Анализа на валути |
| 285 | |
| 286 | Распределба на плаќањата примени во различни валути, претворајќи ги во единствена референтна валута (на пр. {{{USD}}}) со користење на девизен курс. |
| 287 | |
| 288 | {{{#!sql |
| 289 | SELECT |
| 290 | p.currency, |
| 291 | COUNT(*) AS total_payments, |
| 292 | SUM(p.amount) AS total_amount_in_currency, |
| 293 | SUM(p.amount * p.exchange_rate) AS total_amount_converted -- e.g., to USD |
| 294 | FROM PAYMENT p |
| 295 | GROUP BY p.currency; |
| 296 | }}} |
| 297 | |
| 298 | == Даночни придонеси |
| 299 | |
| 300 | Апроксимација на даночните придонеси по купувач или производител. |
| 301 | Бидејќи нема експлицитна даночна стапка во базата на податоци, претпоставена е хипотетичка стапка (на пр., 20%). |
| 302 | Овој пример ја пресметува вкупната вредност на фактурата по купувач и се множи со 20%. |
| 303 | |
| 304 | {{{#!sql |
| 305 | SELECT |
| 306 | b.buyer_id, |
| 307 | b.company_name, |
| 308 | b.country, |
| 309 | COALESCE(SUM(i.total_amount), 0) AS total_sales, |
| 310 | COALESCE(SUM(i.total_amount) * 0.20, 0) AS estimated_tax_contribution |
| 311 | FROM BUYER b |
| 312 | JOIN "ORDER" o ON b.buyer_id = o.buyer_id |
| 313 | JOIN INVOICE i ON o.order_id = i.order_id |
| 314 | GROUP BY b.buyer_id, b.company_name, b.country |
| 315 | ORDER BY total_sales DESC; |
| 316 | }}} |
| 317 | |
| 318 | = Транспорт и логистика |
| 319 | |
| 320 | == Перформанси на превозникот |
| 321 | |
| 322 | Анализа на перформансите на секој превозник врз основа на бројот на пратки, просечното растојание и просечното време на транзит. |
| 323 | |
| 324 | {{{#!sql |
| 325 | SELECT |
| 326 | t.carrier_name, |
| 327 | COUNT(o.order_id) AS total_shipments, |
| 328 | COALESCE(AVG(t.total_distance), 0) AS avg_distance, |
| 329 | COALESCE(AVG(t.estimated_arrival - t.estimated_departure), 0) AS avg_transit_days |
| 330 | FROM TRANSPORT t |
| 331 | LEFT JOIN "ORDER" o ON t.transport_id = o.transport_id |
| 332 | GROUP BY t.carrier_name |
| 333 | ORDER BY total_shipments DESC; |
| 334 | }}} |
| 335 | |
| 336 | == Анализа на incoterm |
| 337 | |
| 338 | Се прикажива распределбата на нарачките по incoterms, заедно со вкупните износи на фактурата. |
| 339 | |
| 340 | {{{#!sql |
| 341 | SELECT |
| 342 | t.incoterm, |
| 343 | COUNT(o.order_id) AS total_orders, |
| 344 | COALESCE(SUM(i.total_amount), 0) AS total_invoice_amount |
| 345 | FROM TRANSPORT t |
| 346 | LEFT JOIN "ORDER" o ON t.transport_id = o.transport_id |
| 347 | LEFT JOIN INVOICE i ON o.order_id = i.order_id |
| 348 | GROUP BY t.incoterm |
| 349 | ORDER BY total_orders DESC; |
| 350 | }}} |
| 351 | |
| 352 | == Ефикасност на рутата |
| 353 | |
| 354 | Оценување на просечното растојание и време на транзит по рута ({{{departure_point}}}, {{{arrival_point}}}). |
| 355 | |
| 356 | {{{#!sql |
| 357 | SELECT |
| 358 | t.departure_point, |
| 359 | t.arrival_point, |
| 360 | COUNT(o.order_id) AS total_orders, |
| 361 | COALESCE(AVG(t.total_distance), 0) AS avg_distance, |
| 362 | COALESCE(AVG(t.estimated_arrival - t.estimated_departure), 0) AS avg_transit_time |
| 363 | FROM TRANSPORT t |
| 364 | LEFT JOIN "ORDER" o ON t.transport_id = o.transport_id |
| 365 | GROUP BY t.departure_point, t.arrival_point |
| 366 | ORDER BY total_orders DESC; |
| 367 | }}} |
| 368 | |
| 369 | = Усогласенот и ревизија |
| 370 | |
| 371 | == Усогласеност со извозот на производителот |
| 372 | |
| 373 | Идентификација на производителите со нецелосни или невалидни детали за лиценцата за извоз. |
| 374 | За демонстрација, наведени се сите производители кои имаат NULL или празен {{{export_license_number}}}. |
| 375 | |
| 376 | {{{#!sql |
| 377 | SELECT |
| 378 | producer_id, |
| 379 | company_name, |
| 380 | export_license_number |
| 381 | FROM PRODUCER |
| 382 | WHERE export_license_number IS NULL |
| 383 | OR export_license_number = ''; |
| 384 | }}} |
| 385 | |
| 386 | == Трага за ревизија на фактура |
| 387 | |
| 388 | Целосен преглед на фактури, вклучувајќи ги поврзаните нарачки, плаќања и тековниот статус. |
| 389 | |
| 390 | {{{#!sql |
| 391 | SELECT |
| 392 | i.invoice_key, |
| 393 | i.invoice_date, |
| 394 | i.status AS invoice_status, |
| 395 | i.total_amount, |
| 396 | o.order_id, |
| 397 | o.status AS order_status, |
| 398 | p.payment_id, |
| 399 | p.payment_status, |
| 400 | p.payment_method |
| 401 | FROM INVOICE i |
| 402 | JOIN "ORDER" o ON i.order_id = o.order_id |
| 403 | LEFT JOIN PAYMENT p ON o.order_id = p.order_id |
| 404 | ORDER BY i.invoice_date DESC; |
| 405 | }}} |
| 406 | |
| 407 | == Несовпаѓање на плаќање наспроти фактура |
| 408 | |
| 409 | Идентификација на нарачки каде збирот на плаќања не се совпаѓа со вкупниот износ на фактурата. |
| 410 | |
| 411 | {{{#!sql |
| 412 | SELECT |
| 413 | i.invoice_key, |
| 414 | i.order_id, |
| 415 | i.total_amount AS invoice_total, |
| 416 | COALESCE(SUM(p.amount), 0) AS total_payment, |
| 417 | (i.total_amount - COALESCE(SUM(p.amount), 0)) AS difference |
| 418 | FROM INVOICE i |
| 419 | LEFT JOIN PAYMENT p ON i.order_id = p.order_id |
| 420 | GROUP BY i.invoice_key, i.order_id, i.total_amount |
| 421 | HAVING i.total_amount <> COALESCE(SUM(p.amount), 0) |
| 422 | ORDER BY difference DESC; |
| 423 | }}} |