wiki:AdvancedReports

Version 6 (modified by 221181, 6 days ago) ( diff )

--

Напредни извештаи од базата (SQL, складирани процедури и релациона алгебра)

---

2. Месечен тренд на продажба (Monthly Sales Growth Trend)

Ги споредува приходите од тековниот месец со претходниот за да го пресмета процентот на раст или пад на бизнисот.

WITH MonthlySales AS (
    SELECT 
        DATE_TRUNC('month', date_time) AS sales_month, 
        SUM(total_amount) AS revenue
    FROM sale 
    GROUP BY 1
)
SELECT 
    sales_month, 
    revenue AS current_month_revenue,
    LAG(revenue) OVER (ORDER BY sales_month) AS previous_month_revenue,
    ROUND(((revenue - LAG(revenue) OVER (ORDER BY sales_month)) / 
           NULLIF(LAG(revenue) OVER (ORDER BY sales_month), 0)) * 100, 2) AS growth_percentage
FROM MonthlySales;

Релациона алгебра:

MonthlySales ← γ DATE_TRUNC('month', date_time) → sales_month; 
                 SUM(total_amount) → revenue (sale)

Result ← π sales_month, 
           revenue → current_month_revenue,
           LAG(revenue) → previous_month_revenue,
           ROUND(((revenue - LAG(revenue)) / NULLIF(LAG(revenue), 0)) × 100, 2) → growth_percentage
           (τ sales_month ASC (MonthlySales))

3. Состојба на залихи и критични точки (Inventory Health & Reorder Levels)

Ги идентификува производите што се под минимумот во магацините и дава аларм за итна набавка.

SELECT 
    p.name AS product_name, 
    w.name AS warehouse_location, 
    ws.quantity_on_hand, 
    p.reorder_level,
    CASE 
        WHEN ws.quantity_on_hand <= p.reorder_level THEN 'CRITICAL: REORDER'
        WHEN ws.quantity_on_hand <= p.reorder_level * 1.5 THEN 'WARNING: LOW'
        ELSE 'HEALTHY' 
    END AS stock_status
FROM product p
JOIN warehouse_stock ws ON p.product_id = ws.product_id
JOIN warehouse w ON ws.warehouse_id = w.warehouse_id;

Релациона алгебра:

Temp1 ← product ⨝ product_id=product_id warehouse_stock

Temp2 ← Temp1 ⨝ warehouse_id=warehouse_id warehouse

Result ← π product.name → product_name,
           warehouse.name → warehouse_location,
           quantity_on_hand,
           reorder_level,
           CASE(quantity_on_hand ≤ reorder_level → 'CRITICAL: REORDER',
                quantity_on_hand ≤ reorder_level × 1.5 → 'WARNING: LOW',
                ELSE → 'HEALTHY') → stock_status
           (Temp2)

6. Искористеност на капацитетот на магацините

Пресметува колкав процент од физичкиот простор во секој магацин е моментално пополнет.

SELECT 
    w.name AS warehouse_name, 
    w.capacity AS total_unit_capacity,
    SUM(ws.quantity_on_hand) AS units_in_stock,
    ROUND((SUM(ws.quantity_on_hand)::NUMERIC / w.capacity) * 100, 2) AS occupancy_percentage
FROM warehouse w
LEFT JOIN warehouse_stock ws ON w.warehouse_id = ws.warehouse_id
GROUP BY w.warehouse_id, w.name, w.capacity;

Релациона алгебра:

Temp1 ← warehouse ⟕ warehouse_id=warehouse_id warehouse_stock

Result ← γ warehouse_id, name → warehouse_name, capacity → total_unit_capacity;
           SUM(quantity_on_hand) → units_in_stock,
           ROUND((SUM(quantity_on_hand) / capacity) × 100, 2) → occupancy_percentage
           (Temp1)

7. Анализа на застојни производи

Ги прикажува производите што не се продале во последните 90 дена и само зафаќаат простор и капитал.

SELECT 
    p.name AS product_name, 
    p.sku, 
    ws.quantity_on_hand, 
    COALESCE(MAX(s.date_time)::TEXT, 'NO SALES RECORDED') AS last_sold_date
FROM product p
JOIN warehouse_stock ws ON p.product_id = ws.product_id
LEFT JOIN sale_item si ON p.product_id = si.product_id
LEFT JOIN sale s ON si.sale_id = s.sale_id
GROUP BY p.product_id, p.name, p.sku, ws.quantity_on_hand
HAVING MAX(s.date_time) < CURRENT_DATE - INTERVAL '90 days' OR MAX(s.date_time) IS NULL;

Релациона алгебра:

Temp1 ← product ⨝ product_id=product_id warehouse_stock

Temp2 ← Temp1 ⟕ product_id=product_id sale_item

Temp3 ← Temp2 ⟕ sale_id=sale_id sale

Temp4 ← γ product_id, name, sku, quantity_on_hand; 
          MAX(date_time) → last_sold_date (Temp3)

Result ← π name → product_name, sku, quantity_on_hand,
           COALESCE(last_sold_date::TEXT, 'NO SALES RECORDED') → last_sold_date
           (σ last_sold_date < CURRENT_DATE - 90 ∨ last_sold_date IS NULL (Temp4))

Релациона алгебра:

Temp1 ← ρ si1 (sale_item)

Temp2 ← ρ si2 (sale_item)

Temp3 ← σ si1.sale_id = si2.sale_id ∧ si1.product_id < si2.product_id (Temp1 × Temp2)

Temp4 ← Temp3 ⨝ si1.product_id = p1.product_id (ρ p1 (product))

Temp5 ← Temp4 ⨝ si2.product_id = p2.product_id (ρ p2 (product))

Temp6 ← γ p1.name → product_a, p2.name → product_b; 
          COUNT(*) → pair_occurrence_count (Temp5)

Result ← δ 10 (τ pair_occurrence_count DESC (Temp6))

Релациона алгебра:

LatestCost(product_id) ← π product_id, unit_cost 
                         (δ 1 (τ po_id DESC (purchase_order_item)))

Temp1 ← warehouse ⨝ warehouse_id=warehouse_id warehouse_stock

Temp2 ← Temp1 ⨝ product_id=product_id LatestCost

Result ← γ warehouse.name → warehouse_location;
           SUM(quantity_on_hand × unit_cost) → total_inventory_valuation_mkd
           (Temp2)

Символи и операции:

  • π - проекција (SELECT)
  • σ - селекција (WHERE)
  • ⨝ - природен спој (JOIN)
  • ⟕ - left outer join (LEFT JOIN)
  • × - Декартов производ (CROSS JOIN)
  • γ - групирање (GROUP BY)
  • τ - сортирање (ORDER BY)
  • δ - лимит (LIMIT)
  • ρ - преименување (AS / alias)
  • ∧ - логичко И (AND)
  • ∨ - логичко ИЛИ (OR)
Note: See TracWiki for help on using the wiki.