Изчисляването и сортирането на обобщени данни, съхранявани отделно от източниците на данни за онлайн обработка на транзакции (Online Transaction Processing – OLTP), намалява количеството на обработваните данните, когато е необходимо потребителите да анализират огромно количество информация. Организирането на данните в склада за данни в структури, съответстващи на многомерния модел и предварителното им обработване осигурява максимална производителност за заявките, които обобщават данните по различни начини. Когато се използват инструменти за онлайн аналитична обработка на данни (Online Analytical Processing – OLAP), е необходимо да се вземат предвид някои основни съображения при проектиране на кубовете с данни (data cubes).
Системи за онлайн аналитична обработка на данни (OLAP)
1. СИСТЕМИ ЗА ОНЛАЙН АНАЛИТИЧНА
ОБРАБОТКА НА ДАННИ (OLAP)
доц. д-р Цветанка Георгиева-Трифонова
2. СИСТЕМИ ЗА ОНЛАЙН АНАЛИТИЧНА ОБРАБОТКА НА ДАННИ
– СЪДЪРЖАНИЕ
Онлайн аналитична обработка на данни (OnLine Analytical
Processing – OLAP)
Видове OLAP системи
OLAP кубове с данни
Основни OLAP операции
Езикът MDX (MultiDimensional eXpressions)
22Цветанка Георгиева Информационни системи
3. ОНЛАЙН АНАЛИТИЧНА ОБРАБОТКА НА ДАННИ
Отнася се към определена категория софтуерни технологии,
предоставящи възможност на аналитици, мениджъри,
администратори да извлекат полза от проучването на
натрупаните данни;
Бърз, удобен, интерактивен достъп до разнообразни изгледи
на информацията, която е била трансформирана от
първоначалните данни така, че да отразява реалните
потребителски изисквания;
Извършване на динамичен многомерен анализ на
събраните данни, натрупани в резултат от дейността на
конкретната организация;
Многопотребителски клиент/сървър режим на работа и
получаване на бърз отговор на заявките, независимо от
количеството на обработваните данни.
33Цветанка Георгиева Информационни системи
4. ОНЛАЙН АНАЛИТИЧНА ОБРАБОТКА НА ДАННИ (2)
На крайните потребители е осигурена възможност за:
пресмятане и моделиране, приложени за различните
размерности и йерархии;
анализиране на тенденции за последователен период от
време;
извличане на подмножества на данните за допълнително
преглеждане;
извличане на данни от различните нива на обобщаване;
получаване на нови размерности за сравняване на
преглежданите данни.
44Цветанка Георгиева Информационни системи
5. ВИДОВЕ OLAP СИСТЕМИ
Релационна OLAP система (ROLAP)
съхранява данните в релационна база от данни, чиято
структура се основава на схема “звезда” или схема
“снежинка”, но поддържа разширения на SQL като
например операторите ROLLUP, CUBE, PIVOT и методи
за ефективно реализиране на многомерния модел и
операции;
Многомерна OLAP система (MOLAP)
съхранява многомерни данни, включващи резултати от
обобщения, в специални структури от данни, наречени
кубове с данни (data cubes) и изпълнява OLAP
операциите върху тях.
55Цветанка Георгиева Информационни системи
6. OLAP КУБОВЕ С ДАННИ
Структури, предназначени да осигуряват бърз достъп до
данните в складовете за данни;
Съхраняват предварително изчислени обобщения на
данните;
Отстраняват необходимостта от съединяването на таблици и
преизчисляването на стойностите, връщани от най-често
изпълняваните заявки.
66Цветанка Георгиева Информационни системи
7. OLAP КУБОВЕ С ДАННИ (2)
3-D куб с данни с
размерности A1, A2, A3
77Цветанка Георгиева
Получаването на куба с данни от
дадена релация може да се представи
чрез добавяне на нов атрибут, който
съхранява обобщена стойност (брой,
сума, средна аритметична) при
групиране по стойностите на един от
атрибутите, по два от тях, т.н. и накрая
по всички атрибути на
първоначалната релация.
Информационни системи
8. КУБ С ДАННИ – ПРИМЕР
888Цветанка Георгиева Информационни системи
9. TeacherName SubjectName SpecialityName SchoolYear Exercises
Total
И. Димитров Бази от данни Информатика 2009/2010 45
И. Димитров Бази от данни Компютърни науки 2009/2010 90
К. Петров Бази от данни Информатика 2009/2010 45
К. Петров Информационни
системи
Информатика 2009/2010 60
К. Петров Бази от данни Математика и
информатика
2009/2010 30
К. Петров Информационни
системи
Компютърни науки 2009/2010 60
all Бази от данни Информатика 2009/2010 90
all Бази от данни Компютърни науки 2009/2010 90
…
И. Димитров all Информатика 2009/2010 45
К. Петров all Информатика 2009/2010 105
…
ПРИМЕРЕН КУБ С ДАННИ ОТ ЧЕТИРИ РАЗМЕРНОСТИ
99Цветанка Георгиева Информационни системи
10. TeacherName SubjectName SpecialityName SchoolYear Exercises
Total
И. Димитров Бази от данни all 2009/2010 135
К. Петров Бази от данни all 2009/2010 75
…
И. Димитров Бази от данни Информатика all 45
И. Димитров Бази от данни Компютърни науки all 90
…
all all Информатика 2009/2010 150
all all Компютърни науки 2009/2010 150
all all Математика и
информатика
2009/2010 30
all Бази от данни all 2009/2010 210
all Информационни
системи
all 2009/2010 120
И. Димитров all all 2009/2010 135
К. Петров all all 2009/2010 195
…
all all all 2009/2010 330
…
all all all all 330
11. РЕШЕТКИ ЗА ПРЕДСТАВЯНЕ НА КУБА С ДАННИ
Решетка на куб с данни
1111Цветанка Георгиева
Решетка на йерархия на
размерности
Информационни системи
12. РЕШЕТКИ ЗА ПРЕДСТАВЯНЕ НА КУБА С ДАННИ (2)
1212Цветанка Георгиева
Комбинирана решетка
Информационни системи
13. ОСНОВНИ OLAP ОПЕРАЦИИ
Обединяване (roll-up)
увеличаване на нивото на обобщаване;
Детайлизиране (drill-down)
намаляване на нивото на обобщаване или увеличаване
на подробностите;
Избиране и проектиране (slice-and-dice)
намаляване на размерността на данните, т.е. извличане на
проекция на данните върху подмножество от размерностите за
определени стойности на другите размерности;
Филтриране (filtering)
извеждане на данни, които отговарят на определено
условие, зададено за някоя размерност;
Пренасочване (pivot)
пренасочване на многомерния изглед на данните.
1313Цветанка Георгиева Информационни системи
14. ЕЗИКЪТ MDX (MULTIDIMENSIONAL EXPRESSIONS)
Стандартен език за заявки, позволяващи да се извършва
извличане и манипулиране на многомерните данни,
предложен от Microsoft през 1997;
Не е отворен стандарт, а спецификация, собственост на
Microsoft;
Възприет е от много OLAP доставчици:
доставчици от страна на сървъра като Applix,
MicroStrategy, SAS (Statistical Analysis System), SAP
(System Analysis and Program Development), Whitelight,
NCR (National Cash Register Company);
доставчици от страна на клиента като Panorama Software,
Proclarity, AppSource, Cognos, Business Objects, Brio
Technology, Crystal Reports, Microsoft Excel, Microsoft
Reporting Services, др.
1414Цветанка Георгиева Информационни системи
15. ЕЗИКЪТ MDX – ОСНОВНИ ПОНЯТИЯ
Член (member)
стойност на дадено ниво (level) на размерност
(dimension); например размерността Dates.Semester
може да има стойности “летен” и “зимен”.
Оси (axis)
Една MDX конструкция може да има до 128 оси, въпреки
че рядко се използват повече от две.
Първите пет имат имена:
0 COLUMNS
1 ROWS
2 PAGES
3 CHAPTERS
4 SECTIONS
1515Цветанка Георгиева Информационни системи
16. ЕЗИКЪТ MDX – ОСНОВНИ ПОНЯТИЯ (2)
Размерност (dimensionality)
характеристика на колекция от членове или нива, която
описва от кои размерности са те и реда им в тези
размерности;
Кортеж (tuple)
Един кортеж t е колекция от членове (m1, …, mi), в която
всички имат различни размерности (dimensionality).
Загражда се с обикновени скоби ().
Например:
(Dates.SchoolYear.[2009/2010],
Specialities.[Математика и информатика])
1616Цветанка Георгиева Информационни системи
17. ЕЗИКЪТ MDX – ОСНОВНИ ПОНЯТИЯ (3)
Множество (set)
колекция от кортежи {t1, …, tk}, в която всички имат
еднакви размерности в един и същи ред;
загражда се с фигурни скоби {}.
Например:
{ (Dates.SchoolYear.[2008/2009],
Specialities.[Математика и информатика]),
(Dates.SchoolYear.[2009/2010],
Specialities.[Математика и информатика]) }
Разрез (slice)
представя данните от куба за част от размерностите при
определени стойности на останалите размерности.
1717Цветанка Георгиева Информационни системи
18. ЕЗИКЪТ MDX
Общият вид на конструкцията SELECT в MDX може да се
представи по следния начин:
SELECT
{set 0} ON AXIS(0),
{set 1} ON AXIS(1),
…
{set n} ON AXIS(n),
FROM cube_name
[WHERE (tuple)]
1818Цветанка Георгиева Информационни системи
19. ЕЗИКЪТ MDX – ПРИМЕРИ Състои се от три мерки и
четири размерности:
обща сума на упражнения
(ExercisesTotal);
обща сума на лекции
(LecturesTotal);
брой редове
(TeachFactCount);
време (Dates);
специалности
(Specialities);
учебни предмети
(Subjects);
преподаватели (Teachers).
1919Цветанка Георгиева Информационни системи
20. ЕЗИКЪТ MDX – ПРИМЕРИ
Дефинираните йерархии в куба с данни StudentsCube
2020Цветанка Георгиева Информационни системи
21. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 1 Да се намери общият брой лекции за учебните
предмети „Бази от данни” и „Информационни системи” по
специалности.
SELECT
{ ( Subjects.SubjectName.[Бази от данни] ),
( Subjects.SubjectName.[Информационни системи] ) }
ON COLUMNS,
{ Specialities.SpecialityName.members } ON ROWS
FROM StudentsCube
2121Цветанка Георгиева Информационни системи
22. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 2 Да се намери общият брой лекции за учебните
години от 2007/2008 до 2013/2014 по специалностите във
факултет „Математика и информатика”.
SELECT
{ Dates.SchoolYear.[2007/2008] :
Dates.SchoolYear.[2009/2010] } ON COLUMNS,
{ Specialities.[DepartmentName -
SpecialityName].[Математика и
информатика].children }
ON ROWS
FROM StudentsCube
2222Цветанка Георгиева Информационни системи
23. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 3 Да се извлече общият брой лекции за учебните
предмети по преподавателите във факултет „Математика и
информатика” и по специалности.
SELECT
NON EMPTY { Subjects.SubjectName.members }
ON COLUMNS,
NON EMPTY
{ { Teachers.[Математика и информатика].children }
* { Specialities.SpecialityName.members }
} ON ROWS
FROM StudentsCube
2323Цветанка Георгиева Моделиране на информационни системи
24. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 4 Да се намери общият брой лекции за специалност
„Информатика” по учебни предмети и по семестри на
учебната 2009/2010 година.
SELECT
{ Subjects.SubjectName.members } ON COLUMNS,
{ Dates.[SchoolYear - Semester -
Date].[2009/2010].children } ON ROWS
FROM StudentsCube
WHERE (Specialities.SpecialityName.[Информатика])
2424Цветанка Георгиева Информационни системи
25. Пример 5 Да се извлече общият брой упражнения по учебни
предмети.
SELECT Subjects.SubjectName.members ON COLUMNS
FROM StudentsCube
WHERE (Measures.ExercisesTotal)
2525Цветанка Георгиева Информационни системи
ЕЗИКЪТ MDX – ПРИМЕРИ
26. Пример 6 Да се изведе общият брой упражнения за учебната
2009/2010 година по специалности и преподаватели.
SELECT { Specialities.SpecialityName.members } ON
COLUMNS,
{ Teachers.TeacherName.members } ON ROWS
FROM StudentsCube
WHERE (Measures.ExercisesTotal, Dates.[2009/2010])
2626Цветанка Георгиева Информационни системи
ЕЗИКЪТ MDX – ПРИМЕРИ
27. Пример 7 Следната конструкция връща обобщената стойност
за всички размерности:
SELECT
FROM StudentsCube
2727Цветанка Георгиева Информационни системи
ЕЗИКЪТ MDX – ПРИМЕРИ
28. ФУНКЦИИ В MDX
Функции, връщащи множество (например функцията
CROSSJOIN());
Функции, които връщат отделен член;
Функции, които връщат кортеж;
Числови функции, които извършват изчисления с мерките;
Логически функции, които връщат булев резултат;
Функции, които връщат като резултат масив;
Функции, които връщат като резултат символен низ.
2828Цветанка Георгиева Информационни системи
29. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 8 Да се намери общият брой лекции по учебни
предмети, семестри на учебната 2009/2010 година и
специалности.
SELECT
{ Subjects.SubjectName.members } ON COLUMNS,
CROSSJOIN( { Dates.[SchoolYear - Semester -
Date].[2009/2010].children },
{ Specialities.SpecialityName.members } ) ON ROWS
FROM StudentsCube
2929Цветанка Георгиева Информационни системи
30. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 9 Да се изведат стойностите на мерките на куба с
данни StudentsCube за преподавателите по семестрите на
учебната 2009/2010 година.
SELECT { Measures.members } ON COLUMNS,
{ NONEMPTYCROSSJOIN(Teachers.TeacherName.members,
Dates.[SchoolYear - Semester -
Date].[2009/2010].children ) } ON ROWS
FROM StudentsCube
3030Цветанка Георгиева Информационни системи
31. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 10 Да се изведе общият брой лекции по учебни
предмети, семестри на учебната 2009/2010 година,
специалности и преподаватели.
SELECT { Subjects.SubjectName.members } ON
COLUMNS,
CROSSJOIN( CROSSJOIN( {
Dates.[SchoolYear - Semester -
Date].[2009/2010].children },
{ Specialities.SpecialityName.members } ),
{Teachers.TeacherName.members} ) ON ROWS
FROM StudentsCube
3131Цветанка Георгиева Информационни системи
32. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 10 Да се изведе общият брой лекции по учебни
предмети, семестри на учебната 2009/2010 година,
специалности и преподаватели.
SELECT { Subjects.SubjectName.members } ON
COLUMNS,
CROSSJOIN( CROSSJOIN( {
Dates.[SchoolYear - Semester -
Date].[2009/2010].children },
{ Specialities.SpecialityName.members } ),
{Teachers.TeacherName.members} ) ON ROWS
FROM StudentsCube
3232Цветанка Георгиева Информационни системи
33. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 11 Да се намерят десетте учебни предмета с най-
голям общ брой упражнения.
SELECT { Measures.ExercisesTotal } ON COLUMNS,
TOPCOUNT(Subjects.SubjectName.members, 10,
Measures.ExercisesTotal) ON ROWS
FROM StudentsCube
3333Цветанка Георгиева Информационни системи
34. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 12 Да се изведат стойностите на мерките на куба с
данни StudentsCube за дванадесетте специалности с най-
голям общ брой упражнения.
SELECT { Measures.members } ON COLUMNS,
TOPCOUNT(Specialities.SpecialityName.members, 12,
Measures.ExercisesTotal) ON ROWS
FROM StudentsCube
3434Цветанка Георгиева Информационни системи
35. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 13 Да се намерят учебните предмети с най-голям
общ брой упражнения за учебната 2009/2010 година.
Общата сума от упражненията за тези учебни предмети да е
поне 400.
SELECT
{ Measures.ExercisesTotal } ON COLUMNS,
TOPSUM (Subjects.SubjectName.children, 400,
Measures.ExercisesTotal) ON ROWS
FROM StudentsCube
WHERE (Dates.[2009/2010])
3535Цветанка Георгиева Информационни системи
36. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 14 Да се изведе общият брой упражнения на
специалност „Информатика” за зимния семестър на
учебната 2009/2010 година по учебни предмети, подредени
в низходящ ред.
SELECT
{ Dates.[2009/2010].[зимен] } ON COLUMNS,
ORDER( { Subjects.SubjectName.children },
( Measures.ExercisesTotal,
Dates.[2009/2010].[зимен] ),
BDESC) ON ROWS
FROM StudentsCube
WHERE (Specialities.[Информатика],
Measures.ExercisesTotal)
3636Цветанка Георгиева Информационни системи
37. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 14 Да се изведе общият брой упражнения на
специалност „Информатика” за зимния семестър на
учебната 2009/2010 година по учебни предмети, подредени
в низходящ ред.
SELECT
{ Dates.[2009/2010].[зимен] } ON COLUMNS,
ORDER( { Subjects.SubjectName.children },
( Measures.ExercisesTotal,
Dates.[2009/2010].[зимен] ),
BDESC) ON ROWS
FROM StudentsCube
WHERE (Specialities.[Информатика],
Measures.ExercisesTotal)
3737Цветанка Георгиева Информационни системи
38. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 15 Следната MDX заявка е еквивалентна на
заявката от пример 12:
SELECT Measures.members ON COLUMNS,
HEAD(ORDER({Specialities.SpecialityName.members},
Measures.ExercisesTotal, BDESC), 12)
ON ROWS
FROM StudentsCube
3838Цветанка Георгиева Информационни системи
39. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 16 Да се изведат учебните предмети, чиито общ
брой упражнения са повече през летния семестър на
учебната 2009/2010 година в сравнение със зимния.
SELECT
{Dates.[2009/2010].[зимен],
Dates.[2009/2010].[летен]}
ON COLUMNS,
FILTER( { Subjects.SubjectName.members },
(Dates.[2009/2010].[зимен],
Measures.ExercisesTotal) <
(Dates.[2009/2010].[летен],
Measures.ExercisesTotal) )
ON ROWS
FROM StudentsCube
WHERE (Measures.ExercisesTotal)
3939Цветанка Георгиева Информационни системи
40. ЕЗИКЪТ MDX
Изчислими членове
Изчисляването на нова стойност като част от
изпълнението на дадена заявка се извършва чрез
добавяне на изчислим член с помощта на следния
синтаксис:
WITH MEMBER member_name1 AS 'expression1'
MEMBER member_name2 AS 'expression2'
…
SELECT
{set 0} ON AXIS(0),
{set 1} ON AXIS(1),
…
{set n} ON AXIS(n),
FROM cube_name
WHERE (tuple)
4040Цветанка Георгиева Информационни системи
41. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 17 Да се намери учебната натовареност на
преподавателите за учебната 2009/2010 година.
WITH MEMBER Measures.Total AS
'(Measures.LecturesTotal*2 +
Measures.ExercisesTotal)'
SELECT
NON EMPTY { Teachers.TeacherName.members } ON
COLUMNS,
{ Measures.LecturesTotal,
Measures.ExercisesTotal,
Measures.Total} ON ROWS
FROM StudentsCube
WHERE (Dates.[2009/2010])
4141Цветанка Георгиева Информационни системи
42. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 18 Да се намери изчислената средна аритметична
стойност на лекциите по учебни предмети за различните
специалности.
WITH MEMBER Specialities.[DepartmentName -
SpecialityName].[Average lectures] AS
'AVG({ Specialities.[DepartmentName -
SpecialityName].SpecialityName.members })'
SELECT
{ Specialities.[Average lectures] } ON COLUMNS,
{ Subjects.SubjectName.members } ON ROWS
FROM StudentsCube
4242Цветанка Георгиева Информационни системи
43. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 18 Да се намери изчислената средна аритметична
стойност на лекциите по учебни предмети за различните
специалности.
WITH MEMBER Specialities.[DepartmentName -
SpecialityName].[Average lectures] AS
'AVG({ Specialities.[DepartmentName -
SpecialityName].SpecialityName.members })'
SELECT
{ Specialities.[Average lectures] } ON COLUMNS,
{ Subjects.SubjectName.members } ON ROWS
FROM StudentsCube
4343Цветанка Георгиева Информационни системи
44. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 19 Да се намери максималният брой на лекциите по
учебни предмети за различните специалности за учебната
2009/2010 година.
WITH MEMBER Specialities.[DepartmentName -
SpecialityName].[Max lectures] AS
'MAX({ Specialities.[DepartmentName -
SpecialityName].SpecialityName.members })'
SELECT
{ Specialities.[Max lectures] } ON COLUMNS,
{ Subjects.SubjectName.members } ON ROWS
FROM StudentsCube
WHERE (Dates.[2009/2010])
4444Цветанка Георгиева Информационни системи
45. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 19 Да се намери максималният брой на лекциите по
учебни предмети за различните специалности за учебната
2009/2010 година.
WITH MEMBER Specialities.[DepartmentName -
SpecialityName].[Max lectures] AS
'MAX({ Specialities.[DepartmentName -
SpecialityName].SpecialityName.members })'
SELECT
{ Specialities.[Max lectures] } ON COLUMNS,
{ Subjects.SubjectName.members } ON ROWS
FROM StudentsCube
WHERE (Dates.[2009/2010])
4545Цветанка Георгиева Информационни системи
46. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 20 Да се намери броят на специалностите във
факултет „Математика и информатика”.
WITH MEMBER Measures.[Count of specialities] AS
'COUNT(Specialities.[Математика и
информатика].children)'
SELECT { Measures.[Count of specialities] } ON
COLUMNS
FROM StudentsCube
4646Цветанка Георгиева Информационни системи
47. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 21 Да се изведе общият брой лекции за всеки
преподавател и броя на учебните предмети на съответните
преподаватели през учебната 2009/2010 година.
WITH MEMBER Measures.[Subject Count] AS
'COUNT( CROSSJOIN( {Measures.LecturesTotal},
{Subjects.SubjectName.children} ),
EXCLUDEEMPTY )'
SELECT { Measures.LecturesTotal,
Measures.[Subject Count] }
ON COLUMNS,
{ Teachers.TeacherName.members} ON ROWS
FROM StudentsCube
WHERE (Dates.[2009/2010])
4747Цветанка Георгиева Информационни системи
48. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 21 Да се изведе общият брой лекции за всеки
преподавател и броя на учебните предмети на съответните
преподаватели през учебната 2009/2010 година.
WITH MEMBER Measures.[Subject Count] AS
'COUNT( CROSSJOIN( {Measures.LecturesTotal},
{Subjects.SubjectName.children} ),
EXCLUDEEMPTY )'
SELECT { Measures.LecturesTotal,
Measures.[Subject Count] }
ON COLUMNS,
{ Teachers.TeacherName.members} ON ROWS
FROM StudentsCube
WHERE (Dates.[2009/2010])
4848Цветанка Георгиева Информационни системи
49. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 22 Да се намери средната аритметична стойност от
броя на лекциите през семестрите на учебната 2009/2010
година за всеки преподавател.
WITH MEMBER
Dates.[SchoolYear - Semester - Date].[Average per
semester]
AS 'AVG(DESCENDANTS(Dates.[2009/2010],
Dates.Semester),
Measures.LecturesTotal)'
SELECT
{ Dates.[Average per semester] } ON COLUMNS,
{ Teachers.TeacherName.members } ON ROWS
FROM StudentsCube
4949Цветанка Георгиева Информационни системи
50. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 22 Да се намери средната аритметична стойност от
броя на лекциите през семестрите на учебната 2009/2010
година за всеки преподавател.
WITH MEMBER
Dates.[SchoolYear - Semester - Date].[Average per
semester]
AS 'AVG(DESCENDANTS(Dates.[2009/2010],
Dates.Semester),
Measures.LecturesTotal)'
SELECT
{ Dates.[Average per semester] } ON COLUMNS,
{ Teachers.TeacherName.members } ON ROWS
FROM StudentsCube
5050Цветанка Георгиева Информационни системи
51. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 23 Да се изведе броят на преподавателите от всеки
факултет.
WITH MEMBER Measures.[Count of teachers] AS
'COUNT(DESCENDANTS(
Teachers.TeacherName.CURRENTMEMBER.children,
Teachers.TeacherName))'
SELECT
{ Measures.[Count of teachers] } ON COLUMNS,
{ Teachers.DepartmentName.members } ON ROWS
FROM StudentsCube
5151Цветанка Георгиева Информационни системи
52. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 24 Да се намери процентът на лекциите на всеки
учебен предмет от лекциите на всички учебни предмети.
WITH MEMBER
Measures.[Percentage of lectures of subjects] AS
'100*(Subjects.SubjectName.CURRENTMEMBER,
Measures.LecturesTotal) /
(Subjects.SubjectName.CURRENTMEMBER.PARENT,
Measures.LecturesTotal)'
MEMBER Measures.[All subjects] AS
'Subjects.SubjectName.CURRENTMEMBER.PARENT.NAME'
SELECT { Measures.LecturesTotal,
Measures.[Percentage of lectures of subjects],
Measures.[All subjects] } ON COLUMNS,
{ Subjects.SubjectName.members } ON ROWS
FROM StudentsCube
5252Цветанка Георгиева Информационни системи
53. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 24 Да се намери процентът на лекциите на всеки
учебен предмет от лекциите на всички учебни предмети.
WITH MEMBER
Measures.[Percentage of lectures of subjects] AS
'100*(Subjects.SubjectName.CURRENTMEMBER,
Measures.LecturesTotal) /
(Subjects.SubjectName.CURRENTMEMBER.PARENT,
Measures.LecturesTotal)'
MEMBER Measures.[All subjects] AS
'Subjects.SubjectName.CURRENTMEMBER.PARENT.NAME'
SELECT { Measures.LecturesTotal,
Measures.[Percentage of lectures of subjects],
Measures.[All subjects] } ON COLUMNS,
{ Subjects.SubjectName.members } ON ROWS
FROM StudentsCube
5353Цветанка Георгиева Информационни системи
54. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 25 Да се намери общият брой лекции за факултета,
в който е специалност „Информатика”.
SELECT
{ ANCESTOR( Specialities.[Информатика],
Specialities.[DepartmentName -
SpecialityName].DepartmentName ) } ON COLUMNS
FROM StudentsCube
5454Цветанка Георгиева Информационни системи
55. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 26 Да се намери процентът на лекциите на всеки
преподавател от всички лекции.
WITH MEMBER
Measures.[Percentage of lectures of teachers] AS
'100*(Teachers.TeacherName.CURRENTMEMBER,
Measures.LecturesTotal) /
(ANCESTOR(Teachers.TeacherName.CURRENTMEMBER,
Teachers.TeacherName.[(All)]),
Measures.LecturesTotal)'
MEMBER Measures.[All teachers] AS
'ANCESTOR(Teachers.TeacherName.CURRENTMEMBER,
Teachers.TeacherName.[(All)]).NAME'
SELECT { Measures.LecturesTotal,
Measures.[Percentage of lectures of teachers],
Measures.[All teachers] } ON COLUMNS,
{ Teachers.TeacherName.members } ON ROWS
FROM StudentsCube
5555Цветанка Георгиева Информационни системи
56. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 26 Да се намери процентът на лекциите на всеки
преподавател от всички лекции.
WITH MEMBER
Measures.[Percentage of lectures of teachers] AS
'100*(Teachers.TeacherName.CURRENTMEMBER,
Measures.LecturesTotal) /
(ANCESTOR(Teachers.TeacherName.CURRENTMEMBER,
Teachers.TeacherName.[(All)]),
Measures.LecturesTotal)'
MEMBER Measures.[All teachers] AS
'ANCESTOR(Teachers.TeacherName.CURRENTMEMBER,
Teachers.TeacherName.[(All)]).NAME'
SELECT { Measures.LecturesTotal,
Measures.[Percentage of lectures of teachers],
Measures.[All teachers] } ON COLUMNS,
{ Teachers.TeacherName.members } ON ROWS
FROM StudentsCube
5656Цветанка Георгиева Информационни системи
57. ЕЗИКЪТ MDX
Създаване на именувано множество (named sets)
WITH SET set_name1 AS 'set1'
SET set_name2 AS 'set2'
…
SELECT
{set 0} ON AXIS(0),
{set 1} ON AXIS(1),
…
{set n} ON AXIS(n),
FROM cube_name
WHERE (tuple)
5757Цветанка Георгиева Информационни системи
58. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 27 Да се намерят петте учебни предмета с най-
висок общ брой лекции, както и общия брой на лекциите на
всички останали учебни предмети.
WITH SET Top5Subjects AS
'TOPCOUNT(Subjects.SubjectName.members, 5,
Measures.LecturesTotal)'
MEMBER Subjects.SubjectName.Others AS
'SUM(Subjects.SubjectName.members,
Measures.LecturesTotal) -
SUM(Top5Subjects, Measures.LecturesTotal)'
SELECT {Measures.LecturesTotal} ON COLUMNS,
{Top5Subjects, Subjects.SubjectName.Others}
ON ROWS
FROM StudentsCube
5858Цветанка Георгиева Информационни системи
59. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 27 Да се намерят петте учебни предмета с най-
висок общ брой лекции, както и общия брой на лекциите на
всички останали учебни предмети.
WITH SET Top5Subjects AS
'TOPCOUNT(Subjects.SubjectName.members, 5,
Measures.LecturesTotal)'
MEMBER Subjects.SubjectName.Others AS
'SUM(Subjects.SubjectName.members,
Measures.LecturesTotal) -
SUM(Top5Subjects, Measures.LecturesTotal)'
SELECT {Measures.LecturesTotal} ON COLUMNS,
{Top5Subjects, Subjects.SubjectName.Others}
ON ROWS
FROM StudentsCube
5959Цветанка Георгиева Информационни системи
60. ЕЗИКЪТ MDX – ПРИМЕРИ
Пример 28 Да се изведе общият брой упражнения на
учебните предмети, съдържащи дадени символни низове в
имената си (например „бази”, „системи”, др.).
WITH SET SearchSubjects AS
'FILTER(Subjects.SubjectName.members,
(InStr(1,
Subjects.SubjectName.CURRENTMEMBER.NAME,
"бази")<>0)
OR
(InStr(1,
Subjects.SubjectName.CURRENTMEMBER.NAME,
"системи")<>0))'
SELECT { SearchSubjects } ON COLUMNS,
{ Measures.ExercisesTotal } ON ROWS
FROM StudentsCube
6060Цветанка Георгиева Информационни системи
61. 6161Цветанка Георгиева Информационни системи
Цветанка Георгиева-Трифонова, 2017
Някои права запазени.
Презентацията е достъпна под лиценз Creative Commons,
Признание-Некомерсиално-Без производни,
https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode