Changes between Initial Version and Version 1 of NaprednaTema


Ignore:
Timestamp:
09/01/26 16:47:56 (3 days ago)
Author:
231004
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • NaprednaTema

    v1 v1  
     1= НАПРЕДНА ТЕМА / Data Cube =
     2
     3Овој дел од проектот претставува аналитички дел на базата за автосалон.
     4Во кодот се креира посебна шема:
     5
     6{{{
     7car_dealership_analytics
     8}}}
     9
     10Оваа шема се користи за анализа на продажбите, приходите, попустите, клиентите, возилата, вработените и начините на плаќање.
     11
     12== Главна идеја ==
     13
     14Во аналитичкиот дел се користи структура со димензионални табели и една главна факт табела.
     15
     16Главната идеја може да се претстави вака:
     17
     18{{{
     19DimDate
     20DimEmployee
     21DimCustomer
     22DimVehicle
     23DimPaymentType
     24DimContractType
     25        ↓
     26     FactSales
     27}}}
     28
     29Димензионалните табели содржат описни податоци, а факт табелата '''FactSales''' ги содржи податоците за продажбите и приходите.
     30
     31== Димензионални табели ==
     32
     33Во кодот се креираат следните димензионални табели:
     34
     35 * '''DimDate'''
     36 * '''DimEmployee'''
     37 * '''DimCustomer'''
     38 * '''DimVehicle'''
     39 * '''DimPaymentType'''
     40 * '''DimContractType'''
     41
     42'''DimDate''' содржи информации за датумот, како година, квартал, месец, ден, име на ден и дали денот е викенд.
     43
     44'''DimEmployee''' содржи податоци за вработените, како employee id, име на вработен и позиција.
     45
     46'''DimCustomer''' содржи податоци за клиентите, како customer id, име, email, телефон, град и држава.
     47
     48'''DimVehicle''' содржи податоци за возилата, како VIN, бренд, модел, година, тип на возило, боја, година на производство и основна цена.
     49
     50'''DimPaymentType''' ги содржи различните типови на плаќање.
     51
     52'''DimContractType''' ги содржи различните типови на договори.
     53
     54== FactSales ==
     55
     56Главна табела во аналитичкиот дел е '''FactSales'''.
     57
     58Оваа табела ги поврзува сите димензии и ги чува главните мерки за продажбата.
     59
     60Во '''FactSales''' се чуваат:
     61
     62 * sale_id
     63 * payment_id
     64 * date_key
     65 * employee_key
     66 * customer_key
     67 * vehicle_key
     68 * payment_type_key
     69 * contract_type_key
     70 * gross_revenue
     71 * discount_percentage
     72 * discount_amount
     73 * net_revenue
     74 * sale_count
     75
     76Табелата '''FactSales''' користи foreign key врски кон сите димензионални табели.
     77
     78Најважните мерки во оваа табела се:
     79
     80{{{
     81gross_revenue       → приход пред попуст
     82discount_amount     → износ на попуст
     83net_revenue         → приход после попуст
     84sale_count          → број на продажби
     85}}}
     86
     87== Индекси ==
     88
     89Во аналитичкиот дел се креираат индекси за побрзо извршување на аналитичките прашалници.
     90
     91Индекси се креираат на '''FactSales''' според:
     92
     93 * employee_key
     94 * customer_key
     95 * vehicle_key
     96 * payment_type_key
     97 * contract_type_key
     98 * date_key + vehicle_key
     99 * date_key + contract_type_key
     100
     101Исто така се креираат индекси и на димензионалните табели:
     102
     103 * DimDate(year, month)
     104 * DimVehicle(brand, model)
     105 * DimCustomer(city)
     106
     107Овие индекси се користат за побрзо филтрирање, групирање и пребарување во аналитичките прашалници.
     108
     109== Обични аналитички views ==
     110
     111Во кодот се креираат неколку аналитички views:
     112
     113 * '''RevenueByBrandAndYear'''
     114 * '''RevenueByEmployeeAndMonth'''
     115 * '''SalesByPaymentType'''
     116 * '''RevenueByCustomerCity'''
     117 * '''RevenueByVehicleType'''
     118 * '''RevenueByContractType'''
     119
     120Овие views служат за анализа на приходите од различни аспекти.
     121
     122'''RevenueByBrandAndYear''' покажува приходи по бренд и година.
     123
     124'''RevenueByEmployeeAndMonth''' покажува приходи по вработен и месец.
     125
     126'''SalesByPaymentType''' покажува продажби и приходи според тип на плаќање.
     127
     128'''RevenueByCustomerCity''' покажува приходи според град на клиентот.
     129
     130'''RevenueByVehicleType''' покажува приходи според тип на возило.
     131
     132'''RevenueByContractType''' покажува приходи според тип на договор.
     133
     134== Data Cube views ==
     135
     136Во кодот има и materialized views кои користат Data Cube логика.
     137
     138Главниот cube view е:
     139
     140{{{
     141SalesCubeBrandYearPaymentContract
     142}}}
     143
     144Овој view користи:
     145
     146{{{
     147GROUP BY CUBE (dv.brand, dd.year, dpt.payment_type, dct.contract_type)
     148}}}
     149
     150Со ова се добива анализа на продажби и приходи според:
     151
     152 * бренд
     153 * година
     154 * тип на плаќање
     155 * тип на договор
     156
     157Исто така се добиваат и вкупни вредности, на пример:
     158
     159 * сите брендови
     160 * сите години
     161 * сите типови на плаќање
     162 * сите типови на договори
     163
     164Во кодот се користи и функцијата '''GROUPING''' за да се означи дали редот е вкупен ред или ред за конкретна вредност.
     165
     166== SalesCubeBrandYearPayment ==
     167
     168'''SalesCubeBrandYearPayment''' е view кој се базира на '''SalesCubeBrandYearPaymentContract'''.
     169
     170Овој view ги прикажува податоците според:
     171
     172 * бренд
     173 * година
     174 * тип на плаќање
     175
     176Притоа се земаат редовите каде што типот на договор е вкупен, односно:
     177
     178{{{
     179is_contract_type_total = 1
     180}}}
     181
     182== EmployeeSalesRollup ==
     183
     184'''EmployeeSalesRollup''' е materialized view кој прави анализа на продажбите според вработени.
     185
     186Во него се анализираат:
     187
     188 * позиција
     189 * employee_id
     190 * име на вработен
     191 * година
     192 * вкупен приход
     193 * попуст
     194 * нето приход
     195 * број на продажби
     196 * просечна вредност на продажба
     197
     198Овој view користи:
     199
     200{{{
     201GROUP BY GROUPING SETS
     202}}}
     203
     204Со тоа се добиваат различни нивоа на групирање, на пример по конкретен вработен, по позиција, по година и вкупно.
     205
     206== EmployeeCubePositionEmployeeYear ==
     207
     208'''EmployeeCubePositionEmployeeYear''' е view кој ги зема податоците од '''EmployeeSalesRollup'''.
     209
     210Овој view служи за полесно прикажување на податоците од rollup анализата за вработените.
     211
     212== VehicleCubeTypeBrandYear ==
     213
     214'''VehicleCubeTypeBrandYear''' е materialized view кој прави cube анализа според возилата.
     215
     216Овој view користи:
     217
     218{{{
     219GROUP BY CUBE (dv.vehicle_type, dv.brand, dd.year)
     220}}}
     221
     222Со ова се анализираат приходите според:
     223
     224 * тип на возило
     225 * бренд
     226 * година
     227
     228Исто така се добиваат и вкупни вредности за сите типови на возила, сите брендови и сите години.
     229
     230== Analyze и проверки ==
     231
     232По креирањето на табелите, views и materialized views, во кодот се извршува '''ANALYZE'''.
     233
     234Тоа се прави за базата да ги освежи статистиките и подобро да ги извршува прашалниците.
     235
     236Потоа има и дополнителни проверки:
     237
     238 * проверка на бројот на редови во FactSales
     239 * проверка дали gross_revenue - discount_amount = net_revenue
     240 * проверки дали индексите се користат
     241 * проверки дали резултатите од views се совпаѓаат со рачно пресметани резултати
     242
     243== Краток заклучок ==
     244
     245Овој дел од проектот претставува аналитички модел за автосалон.
     246
     247Прво се креира посебна analytics шема.
     248Потоа се креираат димензионални табели за датум, вработен, клиент, возило, тип на плаќање и тип на договор.
     249Главната факт табела е '''FactSales''', која ги содржи продажбите, приходите, попустите и нето приходот.
     250
     251Потоа се креираат индекси за побрзи аналитички прашалници, како и повеќе views за анализа на приходите.
     252
     253Најважниот дел е Data Cube делот, каде што со '''GROUP BY CUBE''' и '''GROUPING SETS''' се добиваат агрегирани резултати на повеќе нивоа, на пример по бренд, година, тип на плаќање, тип на договор, вработен и тип на возило.