Changes between Version 1 and Version 2 of AdvancedReports


Ignore:
Timestamp:
01/28/25 20:49:38 (3 weeks ago)
Author:
211561
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedReports

    v1 v2  
    1 temporary text
     1= Купувач и Нарачки
     2
     3== Извештај за топ-купувачи
     4
     5Идентификување на купувачите кои направиле најголем број нарачки или (вкупно) потрошиле најмногу.
     6
     7{{{#!sql
     8SELECT
     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
     13FROM
     14    BUYER b
     15LEFT JOIN "ORDER" o ON b.buyer_id = o.buyer_id
     16LEFT JOIN INVOICE i ON o.order_id = i.order_id
     17GROUP BY
     18    b.buyer_id, b.company_name
     19ORDER BY
     20    total_spent DESC, total_orders DESC;
     21}}}
     22
     23== Очекувани нарачки од купувач
     24
     25Наведени се сите неплатени нарачки групирани по купувачи, вклучувајќи ја и вкупната вредност.
     26
     27{{{#!sql
     28SELECT
     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
     33FROM
     34    BUYER b
     35LEFT JOIN "ORDER" o ON b.buyer_id = o.buyer_id
     36LEFT JOIN INVOICE i ON o.order_id = i.order_id
     37WHERE
     38    o.status = 'Pending'
     39GROUP BY
     40    b.buyer_id, b.company_name
     41ORDER BY
     42    total_pending_value DESC;
     43}}}
     44
     45== Нарачки по земја
     46
     47Собирање нарачки по земјата на купувач и прикажување на нивниот соодветен придонес на целокупниот приходот.
     48
     49{{{#!sql
     50SELECT
     51    b.country,
     52    COUNT(o.order_id) AS total_orders,
     53    COALESCE(SUM(i.total_amount), 0) AS total_revenue
     54FROM
     55    BUYER b
     56LEFT JOIN "ORDER" o ON b.buyer_id = o.buyer_id
     57LEFT JOIN INVOICE i ON o.order_id = i.order_id
     58GROUP BY
     59    b.country
     60ORDER BY
     61    total_revenue DESC, total_orders DESC;
     62}}}
     63
     64= Производ и Снабдувач
     65
     66== Најпродавани производи
     67
     68Прикажување на најкупуваните производи - вкупен приход, продадена количина и поврзани производители.
     69
     70- **БЕЛЕШКА**: Бидејќи нема колона за количина во ORDER_PRODUCT, се смета "times_ordered" како број на нарачки што го содржи тој производ.
     71
     72{{{#!sql
     73SELECT
     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
     79FROM PRODUCT p
     80JOIN PRODUCER prod ON p.producer_id = prod.producer_id
     81LEFT JOIN ORDER_PRODUCT op ON p.product_id = op.product_id
     82LEFT JOIN "ORDER" o ON op.order_id = o.order_id
     83LEFT JOIN INVOICE i ON o.order_id = i.order_id
     84GROUP BY p.product_id, prod.company_name
     85ORDER BY total_revenue DESC, times_ordered DESC;
     86}}}
     87
     88== Приход по произведувач
     89
     90Прикажување вкупнен приход генериран од секој производител врз основа на нарачките што ги вклучува неговите производи.
     91
     92- **БЕЛЕШКА**: Се сумираат вкупните суми на уникатните фактура за да се избегне двојно броење на нарачката повеќекратно, ако има повеќе производи од ист производител.
     93
     94{{{#!sql
     95SELECT
     96    pr.producer_id,
     97    pr.company_name,
     98    COALESCE(SUM(DISTINCT i.total_amount), 0) AS total_revenue
     99FROM PRODUCER pr
     100JOIN PRODUCT p ON pr.producer_id = p.producer_id
     101JOIN ORDER_PRODUCT op ON p.product_id = op.product_id
     102JOIN "ORDER" o ON op.order_id = o.order_id
     103JOIN INVOICE i ON o.order_id = i.order_id
     104GROUP BY pr.producer_id, pr.company_name
     105ORDER BY total_revenue DESC;
     106}}}
     107
     108== Производи со слаби перформанси
     109
     110Надевени се производите кои не се нарачани или имаат минимална продажба во последните 6 месеци.
     111"Минимално" овде се дефинира како помалку од 5 нарачки во тој период. Овој временски период може да се смени.
     112
     113{{{#!sql
     114SELECT
     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
     119FROM PRODUCT p
     120JOIN PRODUCER pr ON p.producer_id = pr.producer_id
     121LEFT JOIN ORDER_PRODUCT op ON p.product_id = op.product_id
     122LEFT JOIN "ORDER" o
     123       ON op.order_id = o.order_id
     124      AND o.order_date >= CURRENT_DATE - INTERVAL '6 MONTH'
     125GROUP BY p.product_id, pr.company_name
     126HAVING COUNT(o.order_id) < 5
     127ORDER 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
     139SELECT
     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
     151FROM "ORDER" o
     152LEFT JOIN TRANSPORT t ON o.transport_id = t.transport_id
     153ORDER BY o.order_date DESC;
     154}}}
     155
     156== Анализа на нарачки по временски период
     157
     158Анализа на времето потребно од поставување на нарачката до проценетата испорака за секоја нарачка.
     159
     160- **БЕЛЕШКА**: се користи "estimated_delivery_date“ од {{{ORDER}}}. Може да се спореди и "transport.estimated_arrival".
     161
     162{{{#!sql
     163SELECT
     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
     171FROM "ORDER" o
     172LEFT JOIN TRANSPORT t ON o.transport_id = t.transport_id
     173ORDER BY o.order_id;
     174}}}
     175
     176== Детали за транспорт на нарачка
     177
     178Извештај кој прикажува детали за транспортот (поаѓање, пристигнување и растојание) поврзани со секоја нарачка.
     179
     180{{{#!sql
     181SELECT
     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
     193FROM "ORDER" o
     194JOIN TRANSPORT t ON o.transport_id = t.transport_id
     195ORDER BY o.order_date DESC;
     196}}}
     197
     198= Фактура и Наплата
     199
     200== Извештај за неплатени фактури
     201
     202Наведени се сите неплатени фактури со нивната соодветна нарачка и детали за купувачот.
     203Претпоставува статус "Неплатен" или "Во тек" во табелата {{{INVOICE}}} или статус на плаќање различен од "payed" во табелата {{{PAYMENT}}}.
     204Ако информациите строго зависат од {{{invoice.status}}}, филтрирањето е "статус <---> платено".
     205
     206{{{#!sql
     207SELECT
     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
     216FROM INVOICE i
     217JOIN "ORDER" o ON i.order_id = o.order_id
     218JOIN BUYER b ON o.buyer_id = b.buyer_id
     219JOIN PAYMENT p ON o.order_id = p.order_id
     220WHERE p.payment_status NOT IN ('Paid')
     221ORDER BY p.due_date DESC;
     222}}}
     223
     224== Анализа на задоцнети плаќања
     225
     226Прикажани се сите нарачки чиј плаќања се извршени по крајниот датумот, вклучително и примерок од пресметката на задоцнетите трошоци.
     227Може да се промени дневната стапка.
     228
     229{{{#!sql
     230SELECT
     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
     244FROM PAYMENT p
     245WHERE p.payment_date > p.due_date;
     246}}}
     247
     248== Преглед на статусот на плаќање
     249
     250Агрегација и прикажување процент на плаќања кои се во различни статуси.
     251
     252{{{#!sql
     253SELECT
     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
     260FROM PAYMENT
     261GROUP BY payment_status
     262ORDER 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
     276SELECT
     277    DATE_TRUNC('month', i.invoice_date) AS month,
     278    SUM(i.total_amount) AS monthly_revenue
     279FROM INVOICE i
     280GROUP BY DATE_TRUNC('month', i.invoice_date)
     281ORDER BY month;
     282}}}
     283
     284== Анализа на валути
     285
     286Распределба на плаќањата примени во различни валути, претворајќи ги во единствена референтна валута (на пр. {{{USD}}}) со користење на девизен курс.
     287
     288{{{#!sql
     289SELECT
     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
     294FROM PAYMENT p
     295GROUP BY p.currency;
     296}}}
     297
     298== Даночни придонеси
     299
     300Апроксимација на даночните придонеси по купувач или производител.
     301Бидејќи нема експлицитна даночна стапка во базата на податоци, претпоставена е хипотетичка стапка (на пр., 20%).
     302Овој пример ја пресметува вкупната вредност на фактурата по купувач и се множи со 20%.
     303
     304{{{#!sql
     305SELECT
     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
     311FROM BUYER b
     312JOIN "ORDER" o ON b.buyer_id = o.buyer_id
     313JOIN INVOICE i ON o.order_id = i.order_id
     314GROUP BY b.buyer_id, b.company_name, b.country
     315ORDER BY total_sales DESC;
     316}}}
     317
     318= Транспорт и логистика
     319
     320== Перформанси на превозникот
     321
     322Анализа на перформансите на секој превозник врз основа на бројот на пратки, просечното растојание и просечното време на транзит.
     323
     324{{{#!sql
     325SELECT
     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
     330FROM TRANSPORT t
     331LEFT JOIN "ORDER" o ON t.transport_id = o.transport_id
     332GROUP BY t.carrier_name
     333ORDER BY total_shipments DESC;
     334}}}
     335
     336== Анализа на incoterm
     337
     338Се прикажива распределбата на нарачките по incoterms, заедно со вкупните износи на фактурата.
     339
     340{{{#!sql
     341SELECT
     342    t.incoterm,
     343    COUNT(o.order_id) AS total_orders,
     344    COALESCE(SUM(i.total_amount), 0) AS total_invoice_amount
     345FROM TRANSPORT t
     346LEFT JOIN "ORDER" o ON t.transport_id = o.transport_id
     347LEFT JOIN INVOICE i ON o.order_id = i.order_id
     348GROUP BY t.incoterm
     349ORDER BY total_orders DESC;
     350}}}
     351
     352== Ефикасност на рутата
     353
     354Оценување на просечното растојание и време на транзит по рута ({{{departure_point}}}, {{{arrival_point}}}).
     355
     356{{{#!sql
     357SELECT
     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
     363FROM TRANSPORT t
     364LEFT JOIN "ORDER" o ON t.transport_id = o.transport_id
     365GROUP BY t.departure_point, t.arrival_point
     366ORDER BY total_orders DESC;
     367}}}
     368
     369= Усогласенот и ревизија
     370
     371== Усогласеност со извозот на производителот
     372
     373Идентификација на производителите со нецелосни или невалидни детали за лиценцата за извоз.
     374За демонстрација, наведени се сите производители кои имаат NULL или празен {{{export_license_number}}}.
     375
     376{{{#!sql
     377SELECT
     378    producer_id,
     379    company_name,
     380    export_license_number
     381FROM PRODUCER
     382WHERE export_license_number IS NULL
     383   OR export_license_number = '';
     384}}}
     385
     386== Трага за ревизија на фактура
     387
     388Целосен преглед на фактури, вклучувајќи ги поврзаните нарачки, плаќања и тековниот статус.
     389
     390{{{#!sql
     391SELECT
     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
     401FROM INVOICE i
     402JOIN "ORDER" o ON i.order_id = o.order_id
     403LEFT JOIN PAYMENT p ON o.order_id = p.order_id
     404ORDER BY i.invoice_date DESC;
     405}}}
     406
     407== Несовпаѓање на плаќање наспроти фактура
     408
     409Идентификација на нарачки каде збирот на плаќања не се совпаѓа со вкупниот износ на фактурата.
     410
     411{{{#!sql
     412SELECT
     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
     418FROM INVOICE i
     419LEFT JOIN PAYMENT p ON i.order_id = p.order_id
     420GROUP BY i.invoice_key, i.order_id, i.total_amount
     421HAVING i.total_amount <> COALESCE(SUM(p.amount), 0)
     422ORDER BY difference DESC;
     423}}}