Changes between Initial Version and Version 1 of AdvancedReports


Ignore:
Timestamp:
09/25/26 04:14:22 (6 days ago)
Author:
223306
Comment:

Додадени се два комплексни аналитички извештаи за продажба, приход и состојба на залихи, заедно со нивните SQL решенија и решенија во релациска алгебра.

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedReports

    v1 v1  
     1# Advanced Reports
     2
     3## Најуспешни книги според продажба и приход
     4
     5### Data requirements description
     6
     7Потребно е да се добие аналитички извештај кој ќе прикаже кои книги имаат најголема продажба и најголем остварен приход врз основа на реализираните нарачки.
     8
     9Извештајот ги користи податоците од книгите, ставките во нарачките и нарачките. За секоја продадена книга се пресметуваат вкупниот број на продадени примероци, вкупниот приход, бројот на реализирани нарачки и просечниот приход од ставките поврзани со книгата.
     10
     11Овој извештај може да се користи за анализа на успешноста на книгите на подолг временски период и за следење на продажбата и приходите во BiblioPremium.
     12
     13### Solution SQL
     14
     15{{{
     16SELECT
     17    k.kniga_id,
     18    k.naslov,
     19    k.isbn,
     20    SUM(s.kolicina) AS vkupno_prodadeni,
     21    SUM(s.kolicina * s.edinechna_cena) AS vkupen_prihod,
     22    COUNT(DISTINCT n.naracka_id) AS broj_naracki,
     23    ROUND(
     24        AVG(s.kolicina * s.edinechna_cena),
     25        2
     26    ) AS prosechen_prihod_od_stavka
     27FROM project.knigi k
     28JOIN project.sodrzi s
     29    ON k.kniga_id = s.kniga_id
     30JOIN project.naracki n
     31    ON s.naracka_id = n.naracka_id
     32WHERE n.status = 'ZAVRSENA'
     33GROUP BY
     34    k.kniga_id,
     35    k.naslov,
     36    k.isbn
     37HAVING SUM(s.kolicina) > 0
     38ORDER BY
     39    vkupen_prihod DESC;
     40}}}
     41
     42### Solution Relational Algebra
     43
     44{{{
     45R1 ← KNIGI ⋈ KNIGI.kniga_id = SODRZI.kniga_id SODRZI
     46
     47R2 ← R1 ⋈ SODRZI.naracka_id = NARACKI.naracka_id
     48      σ(status = 'ZAVRSENA')(NARACKI)
     49
     50R3 ← γ
     51      kniga_id, naslov, isbn;
     52      SUM(kolicina) → vkupno_prodadeni,
     53      SUM(kolicina × edinechna_cena) → vkupen_prihod,
     54      COUNT(DISTINCT naracka_id) → broj_naracki,
     55      AVG(kolicina × edinechna_cena) → prosechen_prihod_od_stavka
     56      (R2)
     57
     58R4 ← σ(vkupno_prodadeni > 0)(R3)
     59
     60Резултат ←
     61π[
     62    kniga_id,
     63    naslov,
     64    isbn,
     65    vkupno_prodadeni,
     66    vkupen_prihod,
     67    broj_naracki,
     68    prosechen_prihod_od_stavka
     69](R4)
     70}}}
     71
     72Во SQL резултатот дополнително се подредува според вкупниот приход во опаѓачки редослед. Ова подредување е за прикажување на резултатот и не е дел од класичната релациска алгебра, бидејќи релациската алгебра не дефинира редослед на редовите.
     73
     74---
     75
     76## Проценка на ризик од исцрпување на залихата
     77
     78### Data requirements description
     79
     80Потребно е да се добие аналитички извештај кој ќе прикаже кои книги имаат најголем ризик од исцрпување на залихата врз основа на моменталната залиха и досегашната продажба преку реализирани нарачки.
     81
     82За секоја книга се прикажуваат моменталната залиха, вкупниот број на продадени примероци, бројот на реализирани нарачки, просечната продажба по нарачка и проценетиот број на нарачки до исцрпување на моменталната залиха.
     83
     84Овој извештај може да се користи за следење на залихите и за навремено идентификување на книгите за кои е потребно дополнување на залихата.
     85
     86### Solution SQL
     87
     88{{{
     89SELECT
     90    k.kniga_id,
     91    k.naslov,
     92    k.kolicina_na_zaliha AS momentalna_zaliha,
     93
     94    SUM(s.kolicina) AS vkupno_prodadeni,
     95
     96    COUNT(DISTINCT n.naracka_id) AS broj_naracki,
     97
     98    ROUND(
     99        SUM(s.kolicina)::numeric /
     100        NULLIF(COUNT(DISTINCT n.naracka_id), 0),
     101        2
     102    ) AS prosecna_prodazba_po_naracka,
     103
     104    ROUND(
     105        k.kolicina_na_zaliha::numeric /
     106        NULLIF(
     107            SUM(s.kolicina)::numeric /
     108            NULLIF(COUNT(DISTINCT n.naracka_id), 0),
     109            0
     110        ),
     111        2
     112    ) AS proceneti_naracki_do_istekuvanje
     113
     114FROM project.knigi k
     115
     116JOIN project.sodrzi s
     117    ON k.kniga_id = s.kniga_id
     118
     119JOIN project.naracki n
     120    ON s.naracka_id = n.naracka_id
     121    AND n.status = 'ZAVRSENA'
     122
     123GROUP BY
     124    k.kniga_id,
     125    k.naslov,
     126    k.kolicina_na_zaliha
     127
     128HAVING SUM(s.kolicina) > 0
     129
     130ORDER BY
     131    proceneti_naracki_do_istekuvanje ASC;
     132}}}
     133
     134### Solution Relational Algebra
     135
     136{{{
     137R1 ← KNIGI ⋈ KNIGI.kniga_id = SODRZI.kniga_id SODRZI
     138
     139R2 ← R1 ⋈ SODRZI.naracka_id = NARACKI.naracka_id
     140      σ(status = 'ZAVRSENA')(NARACKI)
     141
     142R3 ← γ
     143      kniga_id, naslov, kolicina_na_zaliha;
     144      SUM(kolicina) → vkupno_prodadeni,
     145      COUNT(DISTINCT naracka_id) → broj_naracki
     146      (R2)
     147
     148R4 ← σ(vkupno_prodadeni > 0)(R3)
     149
     150R5 ←
     151π[
     152    kniga_id,
     153    naslov,
     154    kolicina_na_zaliha,
     155    vkupno_prodadeni,
     156    broj_naracki,
     157    (
     158        vkupno_prodadeni / broj_naracki
     159    ) → prosecna_prodazba_po_naracka,
     160    (
     161        kolicina_na_zaliha /
     162        (vkupno_prodadeni / broj_naracki)
     163    ) → proceneti_naracki_do_istekuvanje
     164](R4)
     165}}}
     166
     167Во SQL резултатот се подредува според проценетиот број на нарачки до исцрпување на залихата во растечки редослед. На тој начин книгите со помала проценета вредност се прикажуваат први. Подредувањето служи за прикажување на резултатот и не е дел од класичната релациска алгебра.
     168
     169---
     170
     171## Discussion
     172
     173Двата аналитички извештаи користат податоци од повеќе релации и овозможуваат анализа на долгорочното работење на BiblioPremium.
     174
     175Првиот извештај ја анализира успешноста на книгите преку бројот на продадени примероци, бројот на реализирани нарачки и остварениот приход.
     176
     177Вториот извештај ја анализира состојбата со залихите и овозможува идентификување на книгите кај кои постои поголем ризик од исцрпување на залихата.
     178
     179И двата извештаи користат само реализирани нарачки со статус ZAVRSENA, со што незавршените нарачки не влијаат врз аналитичките резултати.
     180
     181Извештаите можат да се користат како основа за периодични аналитички прегледи на продажбата, приходите и залихите во BiblioPremium.