Введення в SQL Server Analysis Services для розробника. MDX і XMLA, Інші СУБД, Бази даних, статті

Пропоную на час відволіктися від Database Engine і поговорити для різноманітності про Analysis Services. Приблизно рік тому я підготував цикл заміток, об’єднаних загальною темою “Введення в SQL Server Analysis Services для розробника “, який публікувався на форумі Російського співтовариства користувачів SQL Server, але у зв’язку з втратою сайту в даний момент ніде не опублікований. Я витягнув цей матеріал з комори, здув пил, підновив і на правах автора видав самому собі люб’язне дозвіл опублікувати його в блозі для ISV. Отже, для початку прозвучить така легка імпровізація, я б сказав, фантазія, на тему MDX і XMLA. У рояля те саме.

MDX – Це мова запитів до сервера Analysis Services. Для аналітичного сервера MDX – приблизно те ж, що SQL для реляційного. MDX розшифровується як MultiDimensional eXpressions, іноді eXtensions; передбачається, що розширення до класичного SQL. Найбільш популярне про MDX можна прочитати тут , А найбільш точно тут , Тому що Михайло Пасуманскій є автором не тільки неї книги, а й самої мови. У 1990 р. він перемістився з пітерського Політеху до Ізраїлю, де зайнявся написанням аналітичного додатки під назвою “Панорама”, містить в собі аналітичний сервер, аналітичний клієнт і засіб їх спілкування між собою, теж як не дивно аналітичне. Як написано у введення до книжки “Microsoft SQL Server 2005 Analysis Services”, В 1995 р. вони випустили першу версію, а ще через рік OLAP-Технологію фірми Panorama Software разом з її ключовими розробниками вдало прикупила Microsoft, Якій якраз конче потрібно щось подібне для прийдешнього SQL Server 7.0. Клієнтську частину “Панорами” було визнано необхідним прибрати, а для серверної – формалізувати і стандартизувати протоколи обміну даними. Так з’явилася на світ специфікація OLE DB for OLAP (ODBO) і мова MDX, як її складова частина. Михайло до того часу вже звався Моша, що, мабуть, означає велика мошка, або Big Bug J. “Роки життя в Ізраїлі не пройшли для нього дарма: тепер він вважає за краще називатися Мошей, що нормальним єврейським ім’ям не є, але представляє цілком оригінальну компіляцію імен Міша і Моше” – http://home.sprintmail.com/~fva/pink_elephant/win/11.htm.

Незважаючи на всенародну підтримку з боку SAS, SAP, NCR, Microstrategy та ін формально ODBO залишався пропрієтарним майкрософтовські протоколом, і в 2001-му йому на зміну прийшла специфікація XML for Analysis (XMLA), Заснована на відкритих стандартах HTTP, XML, SOAP. Хоча SOAP стандартно реалізується через заголовки HTTP (і AS можна сконфігуріть на роботу по HTTP) в сценаріях локальної роботи XMLA відбувається безпосередньо поверх TCP / IP. На тему SOAP безпосередньо по TCP / IP в стандартах нічого не говориться, тому як воно виглядає і що передається в цьому випадку по мотузці, розбирається в блозі у Моші в. Поточною версією XMLA є 1.1 (http://www.xmlforanalysis.com/xmla1.1.doc), Прийнята в листопаді 2002 р. на раді в складі Microsoft, SAS і Hyperion. Анонс з цієї нагоди опублікований тут . Версія 1.1 використовується всіма значимими OLAP-вендорами. включаючи Oracle і IBM, найдовше верне носа через підозри, що незважаючи на незалежність стандарту XMLA він грає на руку Microsoft. Однак за фактом IBM DB2 OLAP Server є те ж саме, що Hyperion Essbase, з точністю до ребрендінгу, а 22 травня 2008 Hyperion взагалі був куплений оракла з усім, що в ньому було, включаючи підтримку XMLA, і увійшов до складу ораклового Business Intelligence product suite. Так що тепер наші кращі друзі волею неволею теж підтримують XMLA.

З 2003 р. ніяких модифікацій і удосконалень в XMLA не спостерігалося. Через це окремі опортуністичні елементи почали говорити, що пацієнт, скоріше, мертвий, ніж живий. Моша палко заперечив у своєму блозі, Що раз не вносилося, значить, не потрібно. Значить, по крайней мере, конче ще не закортіло. Значить, того, що є, поки вистачає. А все разом це означає, що вони свого часу дуже добре і далекоглядно пропрацювали стандарт. Коротше, Моша молодець, а XMLA рулез і живіший за всіх живих.

XMLA базується на двох SOAP-методах: Discover і Execute. Перший використовується для запиту метаданих, другий – для виконання запитів. Таким чином, коли ви робите MDX-запит з SQL Server Management Studio (SSMS)

Рис.1

або виконуєте AdomdCommand з програми

Рис.2

на сервер AS відлітає небудь типу

<soap:Envelope xmlns:soap=”http://schemas.xmlsoap.org/soap/envelope/”>

  <soap:Body>

    <Execute xmlns=”urn:schemas-microsoft-com:xml-analysis”>

      <Command>

        <Statement>SELECT Measures.MEMBERS ON COLUMNS FROM [Adventure Works]</Statement>

      </Command>

      <Properties>

        <PropertyList>

          <DataSourceInfo/>

          <Catalog>Adventure Works DW 2008R2</Catalog>

          <Format>Multidimensional</Format>

          <AxisFormat>TupleFormat</AxisFormat>

        </PropertyList>

      </Properties>

    </Execute>

  </soap:Body>

</soap:Envelope>

Скрипт 1

Відкрийте SSMS і скажіть новий запит. Виберіть XMLA Query. Вставте скрипт 1 в вікно запиту і виконайте його.

Рис.3

Результат XMLA-запиту повертається у вигляді XML Row-або Cellset “a. В даному випадку ми зверталися до кубику, відповідно, отримали у відповідь його шматок, тобто набір осередків.

рис.4

Спочатку йде XSD-опис результату

          <xs:schema targetNamespace=”urn:schemas-microsoft-com:xml-analysis:mddataset” elementFormDefault=”qualified” xmlns=”urn:schemas-microsoft-com:xml-analysis:mddataset” xmlns:xs=”http://www.w3.org/2001/XMLSchema” xmlns:msxmla=”http://schemas.microsoft.com/analysisservices/2003/xmla”>

            <!– The schema is defined in the publicly available documentation for MSXLA (Microsoft Extension to XMLA Schema)–>

            <xs:import namespace=”http://schemas.microsoft.com/analysisservices/2003/xmla” />

            <xs:complexType name=”MemberType”>

              <xs:sequence>

                <xs:any namespace=”##targetNamespace” minOccurs=”0″ maxOccurs=”unbounded” processContents=”skip” />

              </xs:sequence>

              <xs:attribute name=”Hierarchy” type=”xs:string” />

            </xs:complexType>

Потім опис осей

<AxesInfo>

              <AxisInfo name=”Axis0″>

                <HierarchyInfo name=”[Measures]”>

<UName name=”[Measures].[MEMBER_UNIQUE_NAME]” type=”xsd:string” />

<Caption name=”[Measures].[MEMBER_CAPTION]” type=”xsd:string” />

<LName name=”[Measures].[LEVEL_UNIQUE_NAME]” type=”xsd:string” />

<LNum name=”[Measures].[LEVEL_NUMBER]” type=”xsd:int” />

<DisplayInfo name=”[Measures].[DISPLAY_INFO]” type=”xsd:unsignedInt” />

                </HierarchyInfo>

              </AxisInfo>

Потім структура селлсета

<Axes>

            <Axis name=”Axis0″>

              <Tuples>

                <Tuple>

                  <Member Hierarchy=”[Measures]”>

<UName>[Measures].[Internet Sales Amount]</UName>

                    <Caption>Internet Sales Amount</Caption>

                    <LName>[Measures].[MeasuresLevel]</LName>

                    <LNum>0</LNum>

                    <DisplayInfo>0</DisplayInfo>

                  </Member>

                </Tuple>

                <Tuple>

                  <Member Hierarchy=”[Measures]”>

<UName>[Measures].[Internet Order Quantity]</UName>

                    <Caption>Internet Order Quantity</Caption>

                    <LName>[Measures].[MeasuresLevel]</LName>

                    <LNum>0</LNum>

                    <DisplayInfo>131072</DisplayInfo>

                  </Member>

                </Tuple>

Потім дані

<CellData>

            <Cell CellOrdinal=”0″>

              <Value xsi:type=”xsd:decimal”>29358677.2207</Value>

              <FmtValue>29,358,677.22$</FmtValue>

            </Cell>

            <Cell CellOrdinal=”1″>

              <Value xsi:type=”xsd:int”>60398</Value>

              <FmtValue>60,398</FmtValue>

            </Cell>

Упаковку запиту в soap:Envelope можна опускати:

<Execute xmlns=”urn:schemas-microsoft-com:xml-analysis”>

  <Command>

    <Statement>SELECT Measures.MEMBERS ON COLUMNS FROM [Adventure Works]</Statement>

  </Command>

  <Properties>

    <PropertyList>

      <Catalog>Adventure Works DW 2008R2</Catalog>

      <Format>Multidimensional</Format>

      <AxisFormat>TupleFormat</AxisFormat>

    </PropertyList>

  </Properties>

</Execute>

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*