SlideShare une entreprise Scribd logo
1  sur  61
Télécharger pour lire hors ligne
СИСТЕМИ ЗА ОНЛАЙН АНАЛИТИЧНА
ОБРАБОТКА НА ДАННИ (OLAP)
доц. д-р Цветанка Георгиева-Трифонова
СИСТЕМИ ЗА ОНЛАЙН АНАЛИТИЧНА ОБРАБОТКА НА ДАННИ
– СЪДЪРЖАНИЕ
 Онлайн аналитична обработка на данни (OnLine Analytical
Processing – OLAP)
 Видове OLAP системи
 OLAP кубове с данни
 Основни OLAP операции
 Езикът MDX (MultiDimensional eXpressions)
22Цветанка Георгиева Информационни системи
ОНЛАЙН АНАЛИТИЧНА ОБРАБОТКА НА ДАННИ
 Отнася се към определена категория софтуерни технологии,
предоставящи възможност на аналитици, мениджъри,
администратори да извлекат полза от проучването на
натрупаните данни;
 Бърз, удобен, интерактивен достъп до разнообразни изгледи
на информацията, която е била трансформирана от
първоначалните данни така, че да отразява реалните
потребителски изисквания;
 Извършване на динамичен многомерен анализ на
събраните данни, натрупани в резултат от дейността на
конкретната организация;
 Многопотребителски клиент/сървър режим на работа и
получаване на бърз отговор на заявките, независимо от
количеството на обработваните данни.
33Цветанка Георгиева Информационни системи
ОНЛАЙН АНАЛИТИЧНА ОБРАБОТКА НА ДАННИ (2)
 На крайните потребители е осигурена възможност за:
 пресмятане и моделиране, приложени за различните
размерности и йерархии;
 анализиране на тенденции за последователен период от
време;
 извличане на подмножества на данните за допълнително
преглеждане;
 извличане на данни от различните нива на обобщаване;
 получаване на нови размерности за сравняване на
преглежданите данни.
44Цветанка Георгиева Информационни системи
ВИДОВЕ OLAP СИСТЕМИ
 Релационна OLAP система (ROLAP)
 съхранява данните в релационна база от данни, чиято
структура се основава на схема “звезда” или схема
“снежинка”, но поддържа разширения на SQL като
например операторите ROLLUP, CUBE, PIVOT и методи
за ефективно реализиране на многомерния модел и
операции;
 Многомерна OLAP система (MOLAP)
 съхранява многомерни данни, включващи резултати от
обобщения, в специални структури от данни, наречени
кубове с данни (data cubes) и изпълнява OLAP
операциите върху тях.
55Цветанка Георгиева Информационни системи
OLAP КУБОВЕ С ДАННИ
 Структури, предназначени да осигуряват бърз достъп до
данните в складовете за данни;
 Съхраняват предварително изчислени обобщения на
данните;
 Отстраняват необходимостта от съединяването на таблици и
преизчисляването на стойностите, връщани от най-често
изпълняваните заявки.
66Цветанка Георгиева Информационни системи
OLAP КУБОВЕ С ДАННИ (2)
3-D куб с данни с
размерности A1, A2, A3
77Цветанка Георгиева
 Получаването на куба с данни от
дадена релация може да се представи
чрез добавяне на нов атрибут, който
съхранява обобщена стойност (брой,
сума, средна аритметична) при
групиране по стойностите на един от
атрибутите, по два от тях, т.н. и накрая
по всички атрибути на
първоначалната релация.
Информационни системи
КУБ С ДАННИ – ПРИМЕР
888Цветанка Георгиева Информационни системи
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Цветанка Георгиева Информационни системи
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
РЕШЕТКИ ЗА ПРЕДСТАВЯНЕ НА КУБА С ДАННИ
Решетка на куб с данни
1111Цветанка Георгиева
Решетка на йерархия на
размерности
Информационни системи
РЕШЕТКИ ЗА ПРЕДСТАВЯНЕ НА КУБА С ДАННИ (2)
1212Цветанка Георгиева
Комбинирана решетка
Информационни системи
ОСНОВНИ OLAP ОПЕРАЦИИ
 Обединяване (roll-up)
 увеличаване на нивото на обобщаване;
 Детайлизиране (drill-down)
 намаляване на нивото на обобщаване или увеличаване
на подробностите;
 Избиране и проектиране (slice-and-dice)
 намаляване на размерността на данните, т.е. извличане на
проекция на данните върху подмножество от размерностите за
определени стойности на другите размерности;
 Филтриране (filtering)
 извеждане на данни, които отговарят на определено
условие, зададено за някоя размерност;
 Пренасочване (pivot)
 пренасочване на многомерния изглед на данните.
1313Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
ЕЗИКЪТ MDX – ОСНОВНИ ПОНЯТИЯ
 Член (member)
 стойност на дадено ниво (level) на размерност
(dimension); например размерността Dates.Semester
може да има стойности “летен” и “зимен”.
 Оси (axis)
 Една MDX конструкция може да има до 128 оси, въпреки
че рядко се използват повече от две.
 Първите пет имат имена:
0 COLUMNS
1 ROWS
2 PAGES
3 CHAPTERS
4 SECTIONS
1515Цветанка Георгиева Информационни системи
ЕЗИКЪТ MDX – ОСНОВНИ ПОНЯТИЯ (2)
 Размерност (dimensionality)
 характеристика на колекция от членове или нива, която
описва от кои размерности са те и реда им в тези
размерности;
 Кортеж (tuple)
 Един кортеж t е колекция от членове (m1, …, mi), в която
всички имат различни размерности (dimensionality).
 Загражда се с обикновени скоби ().
 Например:
(Dates.SchoolYear.[2009/2010],
Specialities.[Математика и информатика])
1616Цветанка Георгиева Информационни системи
ЕЗИКЪТ MDX – ОСНОВНИ ПОНЯТИЯ (3)
 Множество (set)
 колекция от кортежи {t1, …, tk}, в която всички имат
еднакви размерности в един и същи ред;
 загражда се с фигурни скоби {}.
 Например:
{ (Dates.SchoolYear.[2008/2009],
Specialities.[Математика и информатика]),
(Dates.SchoolYear.[2009/2010],
Specialities.[Математика и информатика]) }
 Разрез (slice)
 представя данните от куба за част от размерностите при
определени стойности на останалите размерности.
1717Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
ЕЗИКЪТ MDX – ПРИМЕРИ Състои се от три мерки и
четири размерности:
 обща сума на упражнения
(ExercisesTotal);
 обща сума на лекции
(LecturesTotal);
 брой редове
(TeachFactCount);
 време (Dates);
 специалности
(Specialities);
 учебни предмети
(Subjects);
 преподаватели (Teachers).
1919Цветанка Георгиева Информационни системи
ЕЗИКЪТ MDX – ПРИМЕРИ
Дефинираните йерархии в куба с данни StudentsCube
2020Цветанка Георгиева Информационни системи
ЕЗИКЪТ MDX – ПРИМЕРИ
 Пример 1 Да се намери общият брой лекции за учебните
предмети „Бази от данни” и „Информационни системи” по
специалности.
SELECT
{ ( Subjects.SubjectName.[Бази от данни] ),
( Subjects.SubjectName.[Информационни системи] ) }
ON COLUMNS,
{ Specialities.SpecialityName.members } ON ROWS
FROM StudentsCube
2121Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
ЕЗИКЪТ MDX – ПРИМЕРИ
 Пример 3 Да се извлече общият брой лекции за учебните
предмети по преподавателите във факултет „Математика и
информатика” и по специалности.
SELECT
NON EMPTY { Subjects.SubjectName.members }
ON COLUMNS,
NON EMPTY
{ { Teachers.[Математика и информатика].children }
* { Specialities.SpecialityName.members }
} ON ROWS
FROM StudentsCube
2323Цветанка Георгиева Моделиране на информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
 Пример 5 Да се извлече общият брой упражнения по учебни
предмети.
SELECT Subjects.SubjectName.members ON COLUMNS
FROM StudentsCube
WHERE (Measures.ExercisesTotal)
2525Цветанка Георгиева Информационни системи
ЕЗИКЪТ MDX – ПРИМЕРИ
 Пример 6 Да се изведе общият брой упражнения за учебната
2009/2010 година по специалности и преподаватели.
SELECT { Specialities.SpecialityName.members } ON
COLUMNS,
{ Teachers.TeacherName.members } ON ROWS
FROM StudentsCube
WHERE (Measures.ExercisesTotal, Dates.[2009/2010])
2626Цветанка Георгиева Информационни системи
ЕЗИКЪТ MDX – ПРИМЕРИ
 Пример 7 Следната конструкция връща обобщената стойност
за всички размерности:
SELECT
FROM StudentsCube
2727Цветанка Георгиева Информационни системи
ЕЗИКЪТ MDX – ПРИМЕРИ
ФУНКЦИИ В MDX
 Функции, връщащи множество (например функцията
CROSSJOIN());
 Функции, които връщат отделен член;
 Функции, които връщат кортеж;
 Числови функции, които извършват изчисления с мерките;
 Логически функции, които връщат булев резултат;
 Функции, които връщат като резултат масив;
 Функции, които връщат като резултат символен низ.
2828Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
ЕЗИКЪТ MDX – ПРИМЕРИ
 Пример 11 Да се намерят десетте учебни предмета с най-
голям общ брой упражнения.
SELECT { Measures.ExercisesTotal } ON COLUMNS,
TOPCOUNT(Subjects.SubjectName.members, 10,
Measures.ExercisesTotal) ON ROWS
FROM StudentsCube
3333Цветанка Георгиева Информационни системи
ЕЗИКЪТ MDX – ПРИМЕРИ
 Пример 12 Да се изведат стойностите на мерките на куба с
данни StudentsCube за дванадесетте специалности с най-
голям общ брой упражнения.
SELECT { Measures.members } ON COLUMNS,
TOPCOUNT(Specialities.SpecialityName.members, 12,
Measures.ExercisesTotal) ON ROWS
FROM StudentsCube
3434Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
ЕЗИКЪТ MDX – ПРИМЕРИ
 Пример 15 Следната MDX заявка е еквивалентна на
заявката от пример 12:
SELECT Measures.members ON COLUMNS,
HEAD(ORDER({Specialities.SpecialityName.members},
Measures.ExercisesTotal, BDESC), 12)
ON ROWS
FROM StudentsCube
3838Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
ЕЗИКЪТ MDX – ПРИМЕРИ
 Пример 20 Да се намери броят на специалностите във
факултет „Математика и информатика”.
WITH MEMBER Measures.[Count of specialities] AS
'COUNT(Specialities.[Математика и
информатика].children)'
SELECT { Measures.[Count of specialities] } ON
COLUMNS
FROM StudentsCube
4646Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
ЕЗИКЪТ MDX – ПРИМЕРИ
 Пример 25 Да се намери общият брой лекции за факултета,
в който е специалност „Информатика”.
SELECT
{ ANCESTOR( Specialities.[Информатика],
Specialities.[DepartmentName -
SpecialityName].DepartmentName ) } ON COLUMNS
FROM StudentsCube
5454Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
ЕЗИКЪТ 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Цветанка Георгиева Информационни системи
6161Цветанка Георгиева Информационни системи
Цветанка Георгиева-Трифонова, 2017
Някои права запазени.
Презентацията е достъпна под лиценз Creative Commons,
Признание-Некомерсиално-Без производни,
https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode

Contenu connexe

Similaire à Системи за онлайн аналитична обработка на данни (OLAP)

Полуструктурирани данни
Полуструктурирани данниПолуструктурирани данни
Полуструктурирани данниTsvetanka Georgieva
 
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLКурс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLDAVID Academy
 
Nakov - RDBMS Systems - Intro
Nakov - RDBMS Systems - IntroNakov - RDBMS Systems - Intro
Nakov - RDBMS Systems - IntroSvetlin Nakov
 
Introduction to-rdbms-systems
Introduction to-rdbms-systemsIntroduction to-rdbms-systems
Introduction to-rdbms-systemsRosen Spasov
 
18 operatori i funkcii
18 operatori i funkcii18 operatori i funkcii
18 operatori i funkciiIvan Peev
 
Information Technologies
Information TechnologiesInformation Technologies
Information TechnologiesBlagoy Petkov
 
Работа с XML данни в релационни бази от данни
Работа с XML данни в релационни бази от данниРабота с XML данни в релационни бази от данни
Работа с XML данни в релационни бази от данниTsvetanka Georgieva
 
22a sazdavane na bd i tablici v sql server upraznenie
22a sazdavane na bd i tablici v sql server   upraznenie22a sazdavane na bd i tablici v sql server   upraznenie
22a sazdavane na bd i tablici v sql server upraznenieIvan Peev
 
01 vavedenie v sql server 2000
01 vavedenie v sql server 200001 vavedenie v sql server 2000
01 vavedenie v sql server 2000Ivan Peev
 

Similaire à Системи за онлайн аналитична обработка на данни (OLAP) (20)

16 klauzi
16 klauzi16 klauzi
16 klauzi
 
Tema13
Tema13Tema13
Tema13
 
Полуструктурирани данни
Полуструктурирани данниПолуструктурирани данни
Полуструктурирани данни
 
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLКурс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
 
Nakov - RDBMS Systems - Intro
Nakov - RDBMS Systems - IntroNakov - RDBMS Systems - Intro
Nakov - RDBMS Systems - Intro
 
Introduction to-RDBMS-systems
Introduction to-RDBMS-systemsIntroduction to-RDBMS-systems
Introduction to-RDBMS-systems
 
Introduction to-rdbms-systems
Introduction to-rdbms-systemsIntroduction to-rdbms-systems
Introduction to-rdbms-systems
 
18 operatori i funkcii
18 operatori i funkcii18 operatori i funkcii
18 operatori i funkcii
 
Excel Formula and Functions
Excel Formula and FunctionsExcel Formula and Functions
Excel Formula and Functions
 
Information Technologies
Information TechnologiesInformation Technologies
Information Technologies
 
Работа с XML данни в релационни бази от данни
Работа с XML данни в релационни бази от данниРабота с XML данни в релационни бази от данни
Работа с XML данни в релационни бази от данни
 
22a sazdavane na bd i tablici v sql server upraznenie
22a sazdavane na bd i tablici v sql server   upraznenie22a sazdavane na bd i tablici v sql server   upraznenie
22a sazdavane na bd i tablici v sql server upraznenie
 
6 Plus4u Excel Func Intro
6 Plus4u Excel Func Intro6 Plus4u Excel Func Intro
6 Plus4u Excel Func Intro
 
01 vavedenie v sql server 2000
01 vavedenie v sql server 200001 vavedenie v sql server 2000
01 vavedenie v sql server 2000
 
Sample IT Test 13
Sample IT Test 13Sample IT Test 13
Sample IT Test 13
 
6plus4u Pivot Consolidate
6plus4u Pivot Consolidate6plus4u Pivot Consolidate
6plus4u Pivot Consolidate
 
6plus4u Pivot and Consolidate
6plus4u Pivot and Consolidate6plus4u Pivot and Consolidate
6plus4u Pivot and Consolidate
 
R
RR
R
 
2 bd project
2 bd project2 bd project
2 bd project
 
Uroc10 7klas
Uroc10 7klasUroc10 7klas
Uroc10 7klas
 

Plus de Tsvetanka Georgieva

Визуализиране на данни с Power BI
Визуализиране на данни с Power BIВизуализиране на данни с Power BI
Визуализиране на данни с Power BITsvetanka Georgieva
 
Въведение в анализирането и визуализирането на данни
Въведение в анализирането и визуализирането на данни Въведение в анализирането и визуализирането на данни
Въведение в анализирането и визуализирането на данни Tsvetanka Georgieva
 
Добиване на данни от текст (text mining) с RapidMiner. Класифициране на текс...
Добиване на данни от текст (text mining) с RapidMiner.  Класифициране на текс...Добиване на данни от текст (text mining) с RapidMiner.  Класифициране на текс...
Добиване на данни от текст (text mining) с RapidMiner. Класифициране на текс...Tsvetanka Georgieva
 
Онлайн инструменти за научни изследвания
Онлайн инструменти за научни изследвания Онлайн инструменти за научни изследвания
Онлайн инструменти за научни изследвания Tsvetanka Georgieva
 
Модели и методи за анализ на текстови данни
Модели и методи за анализ на текстови данниМодели и методи за анализ на текстови данни
Модели и методи за анализ на текстови данниTsvetanka Georgieva
 
Поддържане на стандарта SQL/MM Still Image в Oracle Multimedia
Поддържане на стандарта SQL/MM Still Image в Oracle MultimediaПоддържане на стандарта SQL/MM Still Image в Oracle Multimedia
Поддържане на стандарта SQL/MM Still Image в Oracle MultimediaTsvetanka Georgieva
 
Добиване на асоциативни правила (association rule mining)
Добиване на асоциативни правила (association rule mining)Добиване на асоциативни правила (association rule mining)
Добиване на асоциативни правила (association rule mining)Tsvetanka Georgieva
 
Модифициране на XML данни с XQuery Update
Модифициране на XML данни с XQuery UpdateМодифициране на XML данни с XQuery Update
Модифициране на XML данни с XQuery UpdateTsvetanka Georgieva
 
Заявки за намиране на пермутации, вариации и комбинации
Заявки за намиране на пермутации, вариации и комбинацииЗаявки за намиране на пермутации, вариации и комбинации
Заявки за намиране на пермутации, вариации и комбинацииTsvetanka Georgieva
 
Описание на методите за сравняване на изображения evaluateScore и isSimilar в...
Описание на методите за сравняване на изображения evaluateScore и isSimilar в...Описание на методите за сравняване на изображения evaluateScore и isSimilar в...
Описание на методите за сравняване на изображения evaluateScore и isSimilar в...Tsvetanka Georgieva
 
Работа с йерархични данни в релационни бази от данни чрез използване на рекур...
Работа с йерархични данни в релационни бази от данни чрез използване на рекур...Работа с йерархични данни в релационни бази от данни чрез използване на рекур...
Работа с йерархични данни в релационни бази от данни чрез използване на рекур...Tsvetanka Georgieva
 
Модел на вложените множества (Nested Set Model)
Модел на вложените множества (Nested Set Model)Модел на вложените множества (Nested Set Model)
Модел на вложените множества (Nested Set Model)Tsvetanka Georgieva
 
Примери за RDF/XML представяне
Примери за RDF/XML представяне Примери за RDF/XML представяне
Примери за RDF/XML представяне Tsvetanka Georgieva
 

Plus de Tsvetanka Georgieva (14)

Визуализиране на данни с Power BI
Визуализиране на данни с Power BIВизуализиране на данни с Power BI
Визуализиране на данни с Power BI
 
Въведение в анализирането и визуализирането на данни
Въведение в анализирането и визуализирането на данни Въведение в анализирането и визуализирането на данни
Въведение в анализирането и визуализирането на данни
 
Добиване на данни от текст (text mining) с RapidMiner. Класифициране на текс...
Добиване на данни от текст (text mining) с RapidMiner.  Класифициране на текс...Добиване на данни от текст (text mining) с RapidMiner.  Класифициране на текс...
Добиване на данни от текст (text mining) с RapidMiner. Класифициране на текс...
 
Онлайн инструменти за научни изследвания
Онлайн инструменти за научни изследвания Онлайн инструменти за научни изследвания
Онлайн инструменти за научни изследвания
 
Модели и методи за анализ на текстови данни
Модели и методи за анализ на текстови данниМодели и методи за анализ на текстови данни
Модели и методи за анализ на текстови данни
 
Поддържане на стандарта SQL/MM Still Image в Oracle Multimedia
Поддържане на стандарта SQL/MM Still Image в Oracle MultimediaПоддържане на стандарта SQL/MM Still Image в Oracle Multimedia
Поддържане на стандарта SQL/MM Still Image в Oracle Multimedia
 
Добиване на асоциативни правила (association rule mining)
Добиване на асоциативни правила (association rule mining)Добиване на асоциативни правила (association rule mining)
Добиване на асоциативни правила (association rule mining)
 
Модифициране на XML данни с XQuery Update
Модифициране на XML данни с XQuery UpdateМодифициране на XML данни с XQuery Update
Модифициране на XML данни с XQuery Update
 
Заявки за намиране на пермутации, вариации и комбинации
Заявки за намиране на пермутации, вариации и комбинацииЗаявки за намиране на пермутации, вариации и комбинации
Заявки за намиране на пермутации, вариации и комбинации
 
Описание на методите за сравняване на изображения evaluateScore и isSimilar в...
Описание на методите за сравняване на изображения evaluateScore и isSimilar в...Описание на методите за сравняване на изображения evaluateScore и isSimilar в...
Описание на методите за сравняване на изображения evaluateScore и isSimilar в...
 
Работа с йерархични данни в релационни бази от данни чрез използване на рекур...
Работа с йерархични данни в релационни бази от данни чрез използване на рекур...Работа с йерархични данни в релационни бази от данни чрез използване на рекур...
Работа с йерархични данни в релационни бази от данни чрез използване на рекур...
 
Модел на вложените множества (Nested Set Model)
Модел на вложените множества (Nested Set Model)Модел на вложените множества (Nested Set Model)
Модел на вложените множества (Nested Set Model)
 
RDF бази от данни
RDF бази от данниRDF бази от данни
RDF бази от данни
 
Примери за RDF/XML представяне
Примери за RDF/XML представяне Примери за RDF/XML представяне
Примери за RDF/XML представяне
 

Системи за онлайн аналитична обработка на данни (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