Changes between Version 10 and Version 11 of AdvancedReports


Ignore:
Timestamp:
02/12/26 04:58:28 (12 days ago)
Author:
221181
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedReports

    v10 v11  
    177177)
    178178}}}
     179
     180== 7. Анализа на тренд на продажба и доволност на залиха ==
     181
     182Цел: Да се анализира продажбата во последните 60 дена и врз основа на просечната дневна продажба да се пресмета дали моменталната залиха е доволна за наредните 30 дена.
     183
     184{{{#!sql
     185WITH recent_sales AS (
     186    SELECT
     187        si.product_id,
     188        SUM(si.quantity) AS sold_last_60_days
     189    FROM sale_item si
     190    JOIN sale s ON si.sale_id = s.sale_id
     191    WHERE s.date_time >= CURRENT_DATE - INTERVAL '60 days'
     192    GROUP BY si.product_id
     193),
     194current_stock AS (
     195    SELECT
     196        product_id,
     197        SUM(quantity_on_hand) AS total_stock
     198    FROM warehouse_stock
     199    GROUP BY product_id
     200)
     201SELECT
     202    p.product_id,
     203    p.name AS product_name,
     204    COALESCE(rs.sold_last_60_days, 0) AS sold_last_60_days,
     205    ROUND(COALESCE(rs.sold_last_60_days,0)::numeric / 60, 2) AS avg_daily_sales,
     206    ROUND((COALESCE(rs.sold_last_60_days,0)::numeric / 60) * 30, 2) AS projected_next_30_days,
     207    COALESCE(cs.total_stock,0) AS current_total_stock,
     208    CASE
     209        WHEN COALESCE(cs.total_stock,0) >=
     210             ((COALESCE(rs.sold_last_60_days,0)::numeric / 60) * 30)
     211        THEN 'SUFFICIENT'
     212        ELSE 'INSUFFICIENT'
     213    END AS stock_status
     214FROM product p
     215LEFT JOIN recent_sales rs ON p.product_id = rs.product_id
     216LEFT JOIN current_stock cs ON p.product_id = cs.product_id
     217ORDER BY stock_status, projected_next_30_days DESC;
     218
     219}}}
     220
     221'''Релациона алгебра:'''
     222{{{
     223τ stock_status, projected_next_30_days (
     224  π product_id, product_name, sold_last_60_days, avg_daily_sales, projected_next_30_days, current_total_stock,
     225    (current_total_stock >= projected_next_30_days ? 'SUFFICIENT' : 'INSUFFICIENT') -> stock_status (
     226    π product_id, product_name, sold_last_60_days, sold_last_60_days / 60 -> avg_daily_sales,
     227      (sold_last_60_days / 60) * 30 -> projected_next_30_days, current_total_stock (
     228      product ⟕ (
     229        γ product_id ; SUM(quantity)->sold_last_60_days (
     230          σ date_time >= CURRENT_DATE - 60 (sale_item ⋈ sale)
     231        )
     232      ) ⟕ (
     233        γ product_id ; SUM(quantity_on_hand)->current_total_stock (warehouse_stock)
     234      )
     235    )
     236  )
     237)
     238}}}
     239
     240== 8. Годишен извештај за продажба (последни 12 месеци) ==
     241
     242Цел: Прикажува детална анализа на продажбата за последните 12 месеци, групирана по месец, складиште, категорија и добавувач.
     243
     244{{{#!sql
     245SELECT
     246    TO_CHAR(date_trunc('month', s.date_time), 'YYYY-MM') AS sales_month,
     247    w.name AS warehouse_name,
     248    c.name AS category_name,
     249    sup.name AS supplier_name,
     250    COUNT(DISTINCT s.sale_id) AS total_order_count,
     251    SUM(si.quantity) AS total_units_sold,
     252    SUM(si.quantity * si.unit_price_at_sale) AS total_gross_revenue
     253FROM sale s
     254JOIN sale_item si ON s.sale_id = si.sale_id
     255JOIN product p ON si.product_id = p.product_id
     256LEFT JOIN category c ON p.category_id = c.category_id
     257LEFT JOIN supplier sup ON p.supplier_id = sup.supplier_id
     258JOIN warehouse w ON s.warehouse_id = w.warehouse_id
     259WHERE s.date_time >= date_trunc('month', CURRENT_DATE) - INTERVAL '11 months'
     260GROUP BY sales_month, w.name, c.name, sup.name
     261ORDER BY sales_month DESC, total_gross_revenue DESC;
     262}}}
     263
     264'''Релациона алгебра:'''
     265{{{
     266γ warehouse_name, category_name, supplier_name ; COUNT(sale_id)->total_order_count, SUM(quantity)->total_units_sold, SUM(revenue)->total_gross_revenue (
     267  π sale_id, warehouse_name, category_name, supplier_name, quantity, quantity * unit_price_at_sale -> revenue (
     268    (
     269      (
     270        sale
     271        ⋈ sale_item
     272        ⋈ ρ name->product_name, description->product_desc (product)
     273      )
     274      ⟕ ρ name->category_name, description->category_desc (category)
     275    )
     276    ⟕ ρ name->supplier_name (supplier)
     277    ⋈ ρ name->warehouse_name (warehouse)
     278  )
     279)
     280}}}
     281
     282== 9. Детален извештај за набавни нарачки ==
     283
     284Цел: Да се прикаже детална состојба на сите набавни нарачки: статус на нарачката, добавувач, магацин, нарачана количина, примена количина и преостаната количина.
     285
     286{{{#!sql
     287SELECT
     288    po.po_id,
     289    po.status AS order_status,
     290    po.order_date,
     291    po.expected_delivery_date,
     292    po.actual_delivery_date,
     293    w.name AS warehouse_name,
     294    sup.name AS supplier_name,
     295    p.name AS product_name,
     296    poi.quantity AS ordered_qty,
     297    poi.received_quantity AS received_qty,
     298    (poi.quantity - poi.received_quantity) AS remaining_to_receive
     299FROM purchase_order po
     300JOIN purchase_order_item poi ON po.po_id = poi.po_id
     301JOIN product p ON poi.product_id = p.product_id
     302LEFT JOIN supplier sup ON po.supplier_id = sup.supplier_id
     303JOIN warehouse w ON po.warehouse_id = w.warehouse_id
     304ORDER BY po.status, po.expected_delivery_date;
     305}}}
     306
     307'''Релациона алгебра:'''
     308{{{
     309τ status (
     310  π po_id, status, order_date, expected_delivery_date, warehouse_name, supplier_name, product_name, quantity->ordered_qty, received_quantity->received_qty, quantity - received_quantity -> remaining_to_receive (
     311    (
     312      (
     313        purchase_order
     314        ⋈ purchase_order_item
     315        ⋈ ρ name->product_name, description->product_desc, supplier_id->product_supplier_id (product)
     316      )
     317      ⟕ ρ name->supplier_name (supplier)
     318    )
     319    ⋈ ρ name->warehouse_name (warehouse)
     320  )
     321)
     322}}}
     323