Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lecture_SBD.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.2 Mб
Скачать

Көп өлшемді кубтар.

Бұл бөлімде біз OLAP концепциясын және көп өлшемді кубтарды нақты қарастырамыз. Мысал ретінде реляциялық деректер қорын қолданамыз. Біз оны OLAP принциптерін иллюстрациялау үшін қолданамыз, Microsoft SQL Server жеткізу комплектісіне кіретін Northwind деректер қорын немесе қарапайым деректер қоры болатын, компанияның сауда операциялары жөнінде мәліметті сақтайтын және өнімді көтерме жеткізумен айналысатын Microsoft Access пайдаланамыз. Мұндай деректерге жеткізуші, клиент, жеткізумен айналысатын компания, жеткізілетін тауар тізімі және оның категориясы, сұраныс жасалған тауар жөніндегі деректер, компания қызметкерлерінің тізімі жөніндегі мәліметтер жатады. Northwind деректер қорының нақты сипаттамасын Microsoft SQL Server немесе Microsoft Access анықтама жүйесінен табуға болады - бұл жерде біз орын аз болғандықтан оны келтірмейміз.

OLAP концепциясын қарастыру үшін Invoices ұсынысын және Northwind деректер қорынан Products мен Categories кестелерін пайдаланамыз. Сұраныс құрып, оның нәтижесінде сұраныс жасалған тауарлар және жазылған шоттар жөнінде мағлұмат аламыз:

SELECT dbo.Invoices.Country,

dbo.Invoices.City,

   dbo.Invoices.CustomerName,

   dbo.Invoices.Salesperson,

   dbo.Invoices.OrderDate,

dbo.Categories.CategoryName,

   dbo.Invoices.ProductName,

    dbo.Invoices.ShipperName,

   dbo.Invoices.ExtendedPrice

FROM dbo.Products INNER JOIN

   dbo.Categories ON dbo.Products.CategoryID = dbo.Categories.CategoryID INNER JOIN

   dbo.Invoices ON dbo.Products.ProductID = dbo.Invoices.ProductID

Ұқсас тапсырыс Access 2000 келесі түрде:

SELECT Invoices.Country, Invoices.City,

Invoices.Customers.CompanyName AS

CustomerName, Invoices.Salesperson,

Invoices.OrderDate, Categories.CategoryName,

Invoices.ProductName,

Invoices.Shippers.CompanyName AS

ShipperName, Invoices.ExtendedPrice

FROM Categories INNER JOIN (Invoices INNER

JOIN Products ON Invoices.ProductID =

Products.ProductID) ON Categories.CategoryID =

Products.CategoryID;

Бұл тапсырыс жазылған шот жөніндегі мәліметі бар Invoices ұсынысына, сол сияқты Сategories және Products кестелеріне үндейді. Кестелерде сұраныс жасалған өнім категориясы және сол өнім туралы мәлімет болады. Осы тапсырыс нәтижесінде біз категориясы мен тауар аталуы бар тапсырыс жасатылған деректер, тапсырыс жасалған күні бар, шотты жазған қызметкер аты бар, тапсырыс беруші компанияның толық адресі, сол сияқты жеткізуге жауапты компанияның аталуы бар жиынды аламыз.

Ыңғайлы болу үшін бұл тапсырысты ұсыныс түрінде Invoices1 деп атаймыз. Бұл ұсынысқа жасалған үндеу нәтижесі 22-суретте келтірілген.

22-сурет. Invoices1 ұсынысына үндеу нәтижесі.

Біз осы ұсыныс негізінде қандай агрегатты деректерді аламыз? Көбінесе бұл жауаптар мынадай типтегі сұрақтарға:

  • Франциядағы клиенттермен жасалған тапсырыс бағасының қосындысы қандай?

  • Speedy Express компаниясымен жеткізілген және Франциядағы клиенттермен жасалған тапсырыс бағасының қосындысы қандай?

  • Speedy Express компаниясымен жеткізілген және 1997 жылы Франциядағы клиенттермен жасалған тапсырыс бағасының қосындысы қандай?

Бұл сұрақтарды SQL тіліндегі сұранысқа ауыстырамыз (ағылшын тіліндегі ұқсас сұрақтарды Microsoft English Query көмегімен SQL-сұранысқа аударамыз, бірақ осындай құралдарды қарастыру берілген мақаланың шегінен шығады).

Сұрақ

SQL-сұраныс

Франциядағы клиенттермен жасалған тапсырыс бағасының қосындысы қандай?

SELECT SUM (ExtendedPrice) FROM invoices1 WHERE Country=’France’

Speedy Express компаниясымен жеткізілген және Франциядағы клиенттермен жасалған тапсырыс бағасының қосындысы қандай?

SELECT SUM (ExtendedPrice) FROM invoices1 WHERE Country=’France’ AND ShipperName=’Speedy Express’

Speedy Express компаниясымен жеткізілген және 1996 жылы Франциядағы клиенттермен жасалған тапсырыс бағасының қосындысы қандай?

SELECT SUM (ExtendedPrice) FROM Ord_pmt WHERE CompanyName=’Speedy Express’ AND OrderDate BETWEEN ‘December 31, 1995’ AND ‘April 1, 1996’ AND ShipperName=’Speedy Express’

Жоғарыда келтірілген кез келген сұраныс нәтижесі сан болады. Егер бірінші сұраныста Если в ‘France’ параметрін ‘Austria’ параметріне немесе басқа мемлекет атына ауыстырып, осы сұранысты қайтадан орындап, басқа сан алуға болады. Осы процедураны барлық мемлекеттермен орындап, біз келесі деректер жиынын аламыз (төменде фрагментті көрсетілген):

Country

SUM (ExtendedPrice)

Argentina

7327.3

Austria

110788.4

Brazil

97407.74

Canada

46190.1

Denmark

28392.32

Finland

15296.35

Алынған агрегатты мәндер жиыны (бұл жағдайда-қосынды) деректердің бір өлшемді жиыны сияқты интерпретациялануы мүмкін. Осы деректер жиынын сұраныс нәтижесінде келесі түрдегі GROUP BY сөйлемімен алуға болады:

SELECT Country, SUM (ExtendedPrice) FROM invoices1

 GROUP BY Country

Жоғарыда келтірілген WHERE сөйлемде екі шартты бар сұранысты қараймыз. Егер Country және ShipperName параметрлерінің барлық мүмкін мәндерін қойып, осы сұранысты орындасақ, біз келесі түрдегі деректердің екі өлшемді жиынын аламыз (төменде фрагмент көрсетілген):

 

ShipperName

Country

Federal Shipping

Speedy Express

United Package

Argentina

1 210.30

1 816.20

5 092.60

Austria

40 870.77

41 004.13

46 128.93

Belgium

11 393.30

4 717.56

17 713.99

Brazil

16 514.56

35 398.14

55 013.08

Canada

19 598.78

5 440.42

25 157.08

Denmark

18 295.30

6 573.97

7 791.74

Finland

4 889.84

5 966.21

7 954.00

France

28 737.23

21 140.18

31 480.90

Germany

53 474.88

94 847.12

81 962.58

Егер WHERE сөйлемінде мән жиынын нәтижелейтін (OLAP-куб деп аталынатын) төрт өлшемді пен бес өлшемді және т.б. болып келетін, төрт немесе одан да көп параметрлер болады.

Көпөлшемді OLAP-кубты қарастырып, деректерді талдаудың көп өлшемін қолданып кейбір кілттік терминдер мен түсініктерге өтеміз.

Соншалықты қарастырылған мысалда жалпы жағдайда әр елде бірнеше қала, ал қалада - бірнеше клиент болуы мүмкін, сол сияқты өлшемдегі мән иерархиясы жөнінде айтуға болады. Төмендегі суретте иерархияның бірінші деңгейінде мемлекет, екіншісінде - қала, ал үшіншісінде -клиенттер орналасуы мүмкін (23-сурет).

23-сурет. Клиенттрдің географиялық орналасуына байланысты өлшемдегі иерархия.

Иерархиялар балансталған (balanced) болуын ескерейік, мысалы 30 суретте берілген иерархия сияқты, сонымен қатар «күні-уақыты» және балансталмаған (unbalanced) деректер типіне негізделген иерархиялар сияқты. Балансталмаған иерархияның қарапайым мысалы - «басқарушы-бағынушы» типті иерархия (оны құрастыруға болады, мысалы, жоғарыда қарастырылған бастапқы деректер жиынының Salespeson өрісінің мәндерін қолдана отырып), ол 24-суретте берілген.

24-сурет. Балансталмаған иерархия.

Кейде мұндай иерархия үшін Parent-child hierarchy термині қолданылады.

Балансталғандар мен балансталмағандардың арасында (олар ragged - «тегіс емес» терминімен белгіленеді) аралық қалыпты алатын иерархиялар да бар. Әдетте олардың құрамына жоғарғы деңгейде орналасқан логикалық "родители" мүшелері кіреді (мысалы, географиялық иерархияда Country, City және State деңгейлері бар, бірақ бұл кезде деректер жиынында Country және City деңгейлері арасында аймақтары мен штаттары жоқ елдер бар (25-сурет).

25-сурет. «Тегіс емес» иерархия.

Балансталмаған және «тегіс емес» иерархия лар барлық OLAP-құрылғыларымен қолданылмайды. Мысалы, Microsoft Analysis Services 2000 иерархияның екі типі де бар, ал Microsoft OLAP Services 7.0 – тек балансталған түрлі OLAP-құрылғыларда иерархия деңгейінің саны да, бір деңгейдің рұқсат етілген максимал мүшелер саны да кеңістіктердің өздерінің максимал мүмкін саны да әр түрлі болуы мүмкін.

Бұл оқиға өңдеушісінде біз тізімнен таңдалған мәнге сәйкес QueryType параметрі бар Connection объектісінің OpenSchema объектісіне қатынас жасаймыз және алынған деректер жиынын MSHFlexGrid1 объектісінде көрсетеміз (26-сурет).

26-сурет. ADO Connection объектісінің OpenSchema әдісі көмегімен

метадеректер туралы мағлұмат алу.

Сонымен, біз ADO OpenSchema әдісі арқылы көпөлшемді деректер қорының метадеректеріне қатынау мүмкіндігін алдық. Біздің келесі мақсатымыз сәйкес деректерге MDX- сұраныстарды орындау болады. Метадеректердің қандай болатынын біле отырып, біз оны жасай аламыз.

MDX- сұраныстарды орындау

MDX- сұраныстарды орындау үшін біздің қосымшаға бір батырма мен MDX- сұранысының мәтінін енгізу үшін TextBox компонентін қоса отырып модификациялаймыз:

Private Sub Command2_Click()

 Dim RS As New ADODB.Recordset

 Dim Cnn As New ADODB.Connection

 On Error GoTo Err1

 Cnn.ConnectionString = "Provider=MSOLAP.2;" & _

  "Persist Security Info=True;User ID=sa;Data Source=MAINDESK;" &

  "Initial Catalog=NorthWind_OLAP"

 Cnn.Open

 Set Rs = Cnn.Execute(Text1.Text)

 Set MSHFlexGrid1.Recordset = Rs

 Set Cnn = Nothing

 Set Rs = Nothing

 Exit Sub

 Err1:

  MsgBox ("Неверный запрос")

End Sub

27-сурет. ADO Connection объектісінің Execute әдісінің көмегімен MDX-сұранысты орындау.

ADO MD объектті моделінде MDX-сұраныстың нәтижесі CellSet объектісімен берілген. Бұл оъект Cells объектілеріне қатынас жүргізуге мүмкіндік береді, олардың сұраныс нәтижесінде алынатын деректер жиынындағы нақты ұяшықтарды береді. Бұдан басқа CellSet объектісінің құрамына Axis объектілерінен тұратын Axes коллекциясы енеді (бұл коллекция мүшелерінің саны нәтижелік деректер жиынындағы кеңістіктер санына тең). Cell объектісі сияқты Axis объектісі ось бойындағы позицияларға сәйкес келетін Position объектілерінен тұратын Positions коллекциясына ие. Мүшелері осьтегі деректердің нақты мәндерін беретін Position объектісі Members коллекциясына ие.

Құрылған қосымшаға MDX-сұранысты орындау мүмкіндігін қосамыз. Ол үшін қосымша формасына тағы бір батырманы орналастырайық, екі TextBox компонентін және осы батырма үшін оқиға өңдеушісі Click құрамыз (2 листингті қараңыз).

Private Sub Command2_Click()

Dim Cst As New ADOMD.Cellset

Dim Cnn As New ADODB.Connection

Cnn.ConnectionString = "Provider=MSOLAP.2;Persist Security Info=True;”_

+”User ID=sa;Data Source=MAINDESK;Initial Catalog=NorthWind_OLAP"

Cnn.Open

Text2.Text = vbTab & vbTab

Set cst.ActiveConnection = cnn

cst.Source = Text1.Text

On Error GoTo Err

cst.Open

For i = 0 To cst.Axes(0).Positions.Count - 1

Text2.Text = Text2.Text & cst.Axes(0).Positions(i).Members(0).Caption_

& vbTab

Next i

Text2.Text = Text2.Text & vbCrLf & vbCrLf

For j = 0 To cst.Axes(1).Positions.Count - 1

Text2.Text = Text2.Text & cst.Axes(1).Positions(j).Members(0).Caption_

& vbTab

For k = 0 To cst.Axes(0).Positions.Count - 1

Text2.Text = Text2.Text & vbTab & cst(k, j).FormattedValue

Next k

Text2.Text = Text2.Text & vbCrLf

Next j

Exit Sub

Err:

MsgBox ("Invalid Query")

End Sub

Кодтың берілген көрінісінде біз CellSet объектісін құрамыз және оның Open әдісін қолданамыз. Егер MDX-сұранысы тиянақты болса, онда CellSet объектісінің ұяшықтарын таңдау циклы орындалады және Text2 компонентіне олардың мазмұнын шығару жүргізіледі. Құрылған қосымша жұмысының нәтижесі 28-суретте берілген.

28-сурет. ADO MD көмегімен метадеректерді оқуға арналған қосымша.

Назар аударыңыз: кодтың беріген көрінісі Cellset объектісінде екіөлшемді деректер жиыны бар болуы рұқсат етілгенде жазылады. Жалпы жағдайда бұл деректер жиынының кеңістіктер саны берілген мәннен жоғары болуы мүмкін және бұл жағдайды OLAP-клиенттерді құрған кезде ескерген жөн.

Негізгі әдебиет [2], бет773-782

Қосымша әдебиет [4], бет 215-219

Бақылау сұрақтары

1. OLAP технологиясын айтыңыз.

2. Балансталмаған иерархия дегеніміз не?

3. Тегіс емес иерархия дегеніміз не?

4. ADO - OLAP клиенттерінде қалай қолданылады?

5. Жоғарыда аталған технологияны төмендегі технологиялармен салыстырыңыз, жақсы қасиеттерін атап көрсетіңіз.

Дәріс 22. CORBA (Common Object Request Broker Architecture) технологиясы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]