Changes between Version 5 and Version 6 of AdvancedReports


Ignore:
Timestamp:
01/21/26 04:46:02 (6 days ago)
Author:
221181
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedReports

    v5 v6  
    11= Напредни извештаи од базата (SQL, складирани процедури и релациона алгебра) =
    2 ----
    3 
    4 == 1. ABC Анализа на производи (ABC Product Analysis) ==
    5 
    6 Овој извештај ги дели производите во сегменти A (80%), B (15%) и C (5%) според нивниот придонес во вкупниот промет, користејќи ги овие проценти за да се прикаже кои производи се најважни за приходот и да се олесни управувањето со залихите.
    7 
    8 {{{#!sql
    9 WITH ProductRevenue AS (
    10     SELECT
    11         p.name AS product_name,
    12         SUM(si.quantity * si.unit_price_at_sale) AS total_revenue
    13     FROM product p
    14     JOIN sale_item si ON p.product_id = si.product_id
    15     GROUP BY p.name
    16 ),
    17 RevenueCalculations AS (
    18     SELECT
    19         product_name,
    20         total_revenue,
    21         SUM(total_revenue) OVER (ORDER BY total_revenue DESC) / SUM(total_revenue) OVER () AS cumulative_share
    22     FROM ProductRevenue
    23 )
    24 SELECT
    25     product_name,
    26     ROUND(total_revenue, 2) AS revenue_mkd,
    27     CASE
    28         WHEN cumulative_share <= 0.80 THEN 'A (High Value)'
    29         WHEN cumulative_share <= 0.95 THEN 'B (Medium Value)'
    30         ELSE 'C (Low Value)'
    31     END AS abc_classification
    32 FROM RevenueCalculations;
    33 }}}
    34 
    35 '''Релациона алгебра:'''
    36 {{{
    37 ProductRevenue ← γ name; SUM(quantity × unit_price_at_sale) → total_revenue (product ⨝ product_id sale_item)
    38 
    39 RevenueCalculations ← π product_name, total_revenue,
    40                         (RunningSum(total_revenue) / TotalSum(total_revenue)) → cumulative_share
    41                         (τ total_revenue DESC (ProductRevenue))
    42 
    43 Result ← π product_name,
    44            ROUND(total_revenue, 2) → revenue_mkd,
    45            CASE(cumulative_share ≤ 0.80 → 'A',
    46                 cumulative_share ≤ 0.95 → 'B',
    47                 ELSE → 'C') → abc_classification
    48            (RevenueCalculations)
    49 }}}
    50 
    51 ----
     2---
    523
    534== 2. Месечен тренд на продажба (Monthly Sales Growth Trend) ==
     
    12475----
    12576
    126 == 4. Перформанси на добавувачите (Supplier Performance Matrix) ==
    127 
    128 Го мери доцнењето на испораките од добавувачите и ја пресметува нивната доверливост во исполнување на роковите.
    129 
    130 {{{#!sql
    131 SELECT
    132     s.name AS supplier_name,
    133     COUNT(po.po_id) AS total_orders,
    134     AVG(po.actual_delivery_date - po.expected_delivery_date) AS average_delay_days,
    135     ROUND(COUNT(CASE WHEN po.actual_delivery_date <= po.expected_delivery_date THEN 1 END) * 100.0 / COUNT(*), 2) AS on_time_delivery_rate
    136 FROM supplier s
    137 JOIN purchase_order po ON s.supplier_id = po.supplier_id
    138 WHERE po.status = 'DELIVERED'
    139 GROUP BY s.name;
    140 }}}
    141 
    142 '''Релациона алгебра:'''
    143 {{{
    144 Temp1 ← supplier ⨝ supplier_id=supplier_id purchase_order
    145 
    146 Temp2 ← σ status='DELIVERED' (Temp1)
    147 
    148 Result ← γ supplier.name → supplier_name;
    149            COUNT(po_id) → total_orders,
    150            AVG(actual_delivery_date - expected_delivery_date) → average_delay_days,
    151            ROUND(COUNT(actual_delivery_date ≤ expected_delivery_date) × 100.0 / COUNT(*), 2) → on_time_delivery_rate
    152            (Temp2)
    153 }}}
    154 
    155 ----
    156 
    157 == 5. RFM Анализа на клиенти (Customer RFM Segmentation) ==
    158 
    159 Ги сегментира купувачите според тоа кога последен пат купувале, колку често се враќаат и колку пари потрошиле.
    160 
    161 {{{#!sql
    162 SELECT
    163     c.name AS customer_name,
    164     EXTRACT(DAY FROM CURRENT_TIMESTAMP - MAX(s.date_time)) AS recency_days,
    165     COUNT(s.sale_id) AS frequency_count,
    166     SUM(s.total_amount) AS monetary_total,
    167     NTILE(5) OVER (ORDER BY MAX(s.date_time)) AS r_score,
    168     NTILE(5) OVER (ORDER BY COUNT(s.sale_id)) AS f_score,
    169     NTILE(5) OVER (ORDER BY SUM(s.total_amount)) AS m_score
    170 FROM customer c
    171 JOIN sale s USING (customer_id)
    172 GROUP BY c.customer_id, c.name;
    173 }}}
    174 
    175 '''Релациона алгебра:'''
    176 {{{
    177 Temp1 ← customer ⨝ customer_id=customer_id sale
    178 
    179 Result ← γ customer_id, name → customer_name;
    180            EXTRACT(DAY FROM CURRENT_TIMESTAMP - MAX(date_time)) → recency_days,
    181            COUNT(sale_id) → frequency_count,
    182            SUM(total_amount) → monetary_total,
    183            NTILE(5, MAX(date_time)) → r_score,
    184            NTILE(5, COUNT(sale_id)) → f_score,
    185            NTILE(5, SUM(total_amount)) → m_score
    186            (Temp1)
    187 }}}
    188 
    189 ----
    190 
    191 == 6. Искористеност на капацитетот на магацините (Warehouse Utilization Rate) ==
     77== 6. Искористеност на капацитетот на магацините ==
    19278
    19379Пресметува колкав процент од физичкиот простор во секој магацин е моментално пополнет.
     
    250136}}}
    251137
    252 ----
    253 
    254 == 8. Маржа на профит по категорија (Category Profit Margin) ==
    255 
    256 Ја пресметува разликата помеѓу продажната и набавната цена за секоја категорија производи.
    257 
    258 {{{#!sql
    259 WITH ProductCosts AS (
    260     SELECT product_id, AVG(unit_cost) AS average_cost FROM purchase_order_item GROUP BY 1
    261 )
    262 SELECT
    263     c.name AS category_name,
    264     SUM(si.quantity * si.unit_price_at_sale) AS gross_revenue,
    265     SUM(si.quantity * pc.average_cost) AS total_cost_of_goods,
    266     ROUND(((SUM(si.quantity * si.unit_price_at_sale) - SUM(si.quantity * pc.average_cost)) /
    267            NULLIF(SUM(si.quantity * si.unit_price_at_sale), 0)) * 100, 2) AS profit_margin_pct
    268 FROM category c
    269 JOIN product p USING (category_id)
    270 JOIN sale_item si USING (product_id)
    271 JOIN ProductCosts pc USING (product_id)
    272 GROUP BY c.name;
    273 }}}
    274 
    275 '''Релациона алгебра:'''
    276 {{{
    277 ProductCosts ← γ product_id; AVG(unit_cost) → average_cost (purchase_order_item)
    278 
    279 Temp1 ← category ⨝ category_id=category_id product
    280 
    281 Temp2 ← Temp1 ⨝ product_id=product_id sale_item
    282 
    283 Temp3 ← Temp2 ⨝ product_id=product_id ProductCosts
    284 
    285 Result ← γ category.name → category_name;
    286            SUM(quantity × unit_price_at_sale) → gross_revenue,
    287            SUM(quantity × average_cost) → total_cost_of_goods,
    288            ROUND(((SUM(quantity × unit_price_at_sale) - SUM(quantity × average_cost)) /
    289                   NULLIF(SUM(quantity × unit_price_at_sale), 0)) × 100, 2) → profit_margin_pct
    290            (Temp3)
    291 }}}
    292138
    293139----
    294 
    295 == 9. Анализа на „пазарна кошничка" (Product Affinity / Market Basket) ==
    296 
    297 Открива кои производи купувачите најчесто ги купуваат заедно во иста трансакција.
    298 
    299 {{{#!sql
    300 SELECT
    301     p1.name AS product_a,
    302     p2.name AS product_b,
    303     COUNT(*) AS pair_occurrence_count
    304 FROM sale_item si1
    305 JOIN sale_item si2 ON si1.sale_id = si2.sale_id AND si1.product_id < si2.product_id
    306 JOIN product p1 ON si1.product_id = p1.product_id
    307 JOIN product p2 ON si2.product_id = p2.product_id
    308 GROUP BY 1, 2
    309 ORDER BY pair_occurrence_count DESC
    310 LIMIT 10;
    311 }}}
    312140
    313141'''Релациона алгебра:'''
     
    330158
    331159----
    332 
    333 == 10. Финансиска вредност на залихите (Stock Asset Valuation) ==
    334 
    335 Дава точен преглед на вкупната парична вредност на производите во магацините врз основа на последните набавни цени.
    336 
    337 {{{#!sql
    338 SELECT
    339     w.name AS warehouse_location,
    340     SUM(ws.quantity_on_hand * (
    341         SELECT unit_cost FROM purchase_order_item poi
    342         WHERE poi.product_id = ws.product_id
    343         ORDER BY po_id DESC LIMIT 1
    344     )) AS total_inventory_valuation_mkd
    345 FROM warehouse w
    346 JOIN warehouse_stock ws USING (warehouse_id)
    347 GROUP BY w.name;
    348 }}}
    349160
    350161'''Релациона алгебра:'''