| 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 | }}} |