wiki:AdvancedReports

Version 1 (modified by 221181, 12 days ago) ( diff )

--

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


1. ABC Анализа на производи (ABC Product Analysis)

Овој извештај ги дели производите во сегменти A (80%), B (15%) и C (5%) според нивниот придонес во вкупниот промет, користејќи ги овие проценти за да се прикаже кои производи се најважни за приходот и да се олесни управувањето со залихите.

WITH ProductRevenue AS (
    SELECT 
        p.name AS product_name, 
        SUM(si.quantity * si.unit_price_at_sale) AS total_revenue
    FROM product p
    JOIN sale_item si ON p.product_id = si.product_id
    GROUP BY p.name
),
RevenueCalculations AS (
    SELECT 
        product_name, 
        total_revenue,
        SUM(total_revenue) OVER (ORDER BY total_revenue DESC) / SUM(total_revenue) OVER () AS cumulative_share
    FROM ProductRevenue
)
SELECT 
    product_name, 
    ROUND(total_revenue, 2) AS revenue_mkd,
    CASE 
        WHEN cumulative_share <= 0.80 THEN 'A (High Value)'
        WHEN cumulative_share <= 0.95 THEN 'B (Medium Value)'
        ELSE 'C (Low Value)' 
    END AS abc_classification
FROM RevenueCalculations;

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;

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;

4. Перформанси на добавувачите (Supplier Performance Matrix)

Го мери доцнењето на испораките од добавувачите и ја пресметува нивната доверливост во исполнување на роковите.

SELECT 
    s.name AS supplier_name,
    COUNT(po.po_id) AS total_orders,
    AVG(po.actual_delivery_date - po.expected_delivery_date) AS average_delay_days,
    ROUND(COUNT(CASE WHEN po.actual_delivery_date <= po.expected_delivery_date THEN 1 END) * 100.0 / COUNT(*), 2) AS on_time_delivery_rate
FROM supplier s
JOIN purchase_order po ON s.supplier_id = po.supplier_id
WHERE po.status = 'DELIVERED'
GROUP BY s.name;

5. RFM Анализа на клиенти (Customer RFM Segmentation)

Ги сегментира купувачите според тоа кога последен пат купувале, колку често се враќаат и колку пари потрошиле.

SELECT 
    c.name AS customer_name,
    EXTRACT(DAY FROM CURRENT_TIMESTAMP - MAX(s.date_time)) AS recency_days,
    COUNT(s.sale_id) AS frequency_count,
    SUM(s.total_amount) AS monetary_total,
    NTILE(5) OVER (ORDER BY MAX(s.date_time)) AS r_score,
    NTILE(5) OVER (ORDER BY COUNT(s.sale_id)) AS f_score,
    NTILE(5) OVER (ORDER BY SUM(s.total_amount)) AS m_score
FROM customer c
JOIN sale s USING (customer_id)
GROUP BY c.customer_id, c.name;

6. Искористеност на капацитетот на магацините (Warehouse Utilization Rate)

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

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;

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;

8. Маржа на профит по категорија (Category Profit Margin)

Ја пресметува разликата помеѓу продажната и набавната цена за секоја категорија производи.

WITH ProductCosts AS (
    SELECT product_id, AVG(unit_cost) AS average_cost FROM purchase_order_item GROUP BY 1
)
SELECT 
    c.name AS category_name,
    SUM(si.quantity * si.unit_price_at_sale) AS gross_revenue,
    SUM(si.quantity * pc.average_cost) AS total_cost_of_goods,
    ROUND(((SUM(si.quantity * si.unit_price_at_sale) - SUM(si.quantity * pc.average_cost)) / 
           NULLIF(SUM(si.quantity * si.unit_price_at_sale), 0)) * 100, 2) AS profit_margin_pct
FROM category c
JOIN product p USING (category_id)
JOIN sale_item si USING (product_id)
JOIN ProductCosts pc USING (product_id)
GROUP BY c.name;

9. Анализа на „пазарна кошничка" (Product Affinity / Market Basket)

Открива кои производи купувачите најчесто ги купуваат заедно во иста трансакција.

SELECT 
    p1.name AS product_a, 
    p2.name AS product_b, 
    COUNT(*) AS pair_occurrence_count
FROM sale_item si1
JOIN sale_item si2 ON si1.sale_id = si2.sale_id AND si1.product_id < си2.product_id
JOIN product p1 ON si1.product_id = p1.product_id
JOIN product p2 ON si2.product_id = p2.product_id
GROUP BY 1, 2
ORDER BY pair_occurrence_count DESC 
LIMIT 10;

10. Финансиска вредност на залихите (Stock Asset Valuation)

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

SELECT 
    w.name AS warehouse_location,
    SUM(ws.quantity_on_hand * (
        SELECT unit_cost FROM purchase_order_item poi 
        WHERE poi.product_id = ws.product_id 
        ORDER BY po_id DESC LIMIT 1
    )) AS total_inventory_valuation_mkd
FROM warehouse w
JOIN warehouse_stock ws USING (warehouse_id)
GROUP BY w.name;

Note: See TracWiki for help on using the wiki.