24 hop edición español - introduccion a multidimensional expressions (mdx) en analysis services...

Post on 06-Jul-2015

107 Views

Category:

Data & Analytics

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Introducción a Multidimensional

Expressions (MDX)

Libera el poder total de Analysis Services Multidimensional

Alan Koo Labrín

Senior Consultant | Nagnoi, LLC.

MVP | MCSE Business Intelligence

www.alankoo.com | @alan_koo | Facebook.com/MicrosoftBIyMas

Gracias a nuestros auspiciadores

Database Security as Easy as A-B-C

http://www.greensql.com

Hardcore Developer and IT Training

http://www.pluralsight.com

SQL Server PerformanceTry PlanExplorer today!

http://www.sqlsentry.com

Próximos SQL Saturday

24 de Enero de 2015 https://www.sqlsaturday.com/346/register.aspx

18 de Abril de 2015 https://www.sqlsaturday.com/368/register.aspx

9 de Mayo de 2015 https://www.sqlsaturday.com/373/register.aspx

6 de Diciembre de 2014 https://www.sqlsaturday.com/351/register.aspx

4

Capítulo Global PASS en Español

4

Reuniones semanales todos los miércoles a

las 12PM UTC-5 (Hora de Colombia)

https://www.facebook.com/SpanishPASSVC

5

Asistencia Técnica

Si requiere asistenciadurante la sesión debe usar la sección de preguntas que esta en el menú de la derecha.

Use el botón de Zoom para ajustar su pantalla al tamaño deseado

Escriba sus preguntas en la sección de preguntas que esta en el menú de la derecha

6

Alan Koo

Alan Koo cuenta con más de 13 años de experiencia, diseñando y

desarrollando soluciones orientadas a incrementar el desempeño de los

negocios, tanto en sector público y privado. Debido sus contribuciones y

liderazgo en la comunidad técnica, fue reconocido como Microsoft MVP en el

2014 ya por 5ta vez. Actualmente se desempeña como Consultor Sénior y líder

técnico de la Práctica de Performance Management y Business Intelligence en

Nagnoi, LLC. Co-fundador de PRPASS y actual PASS LATAM Regional Mentor,

mantiene su blog "Microsoft Business Intelligence y más..."

(http://www.alankoo.com).

6

7

Agenda

Multidimensional Expressions (MDX)

Escenarios de uso

Fundamentos: ¿Dónde estamos?

Sintaxis y ejemplos

Demos, demos, demos,… y más demos!

7

8

Mi experiencia

Senior Consultant en Nagnoi, LLC.

14+ años en SQL Server

9+ years en BI & OLAP

Microsoft MVP (5th year)

Miembro del equipo Microsoft BI Advisors

MCT Regional Lead – Puerto Rico

MCT Alumni BI / SQL Server / .NET

Co-Founder de Puerto Rico PASS

PASS Regional Mentor - LATAM

Blogger: www.alankoo.com

8

9

Qué es MDX (Muldimensional Expressions)

• Una base de datos multidimensional (Cubos OLAP), es un método para almacenar datos de

forma multidimensional, generalmente para propósitos de reporte.

• MDX es un lenguaje de consultas para bases de datos OLAP, análogo a SQL como lenguaje

de consulta para bases de datos relacionales.

• Use consultas MDX para obtener datos almacenados en un cubo de SQL Server Analysis

Services.

• Devuelve un conjunto de resultados (dataset) multidimensional que consiste de data de

celdas y data de ejes.

• Originalmente desarrollado por Microsoft (finales de los 90’s).

• Adoptado por muchos otros fabricantes de bases de datos multidimensionales.

9

10

Escenarios de uso

• Herramientas de inteligencia de negocios

• Excel Pivot Tables

• Reporting Services

• PerformancePoint Services (Sharepoint)

• Power View

• Power Query

• Herramientas de terceros

• Tableau

• Business Objects

• Integración con aplicaciones Web o Windows

• ADOMD.NET

10

Conceptos FundamentalesIntroducción a MDX

11

12

Adventure Works Sample Database

13

Adventure Works Cube

• Dimensiones (dimensiones)

• Medidas (measures)

• Grupo de Medidas (measure groups)

• 11 Measure Groups

• 21Dimensions

13

14

¿Dónde estamos?

14

• Dimensiones• Date• Product• Customer

• Jerarquías• Calendar (Date)• Product Line (Product)• Country (Customer)

3 niveles:Year, Semester, Quarter

2 niveles:All, Country

2 niveles:All, Product Line

15

¿Dónde estamos? Members

15

• Los items contenidos dentro de cada jerarquía de una dimension

• Ej. Jerarquía Calendar:• 2004

• H1 CY 2004• Q1 CY 2004• Q2 CY 2004• Q3 CY 2004• Q4 CY 2004

• H2 CY 2004• Ej. Nivel Calendar Quarter:

• Q1 CY 2004• Q2 CY 2004• Q3 CY 2004• Q4 CY 2004

16

Identificadores

• El nombre de un objeto en Analysis Services

• Cubos, dimensiones, jerarquías (hierarchies), niveles (levels), etc.

• Por defecto:

• [Nombre de Dimensión].[Nombre de Jerarquía].[Nombre de Nivel].[Nombre de Miembro]

• Usando la llave (key) del miembro:

• [Nombre de Dimensión].[Nombre de Jerarquía].&[Llave del Miembro]

16

17

¿Dónde estamos? Members

17

• Ej. Jerarquía Calendar:• 2004

• H1 CY 2004• Q1 CY 2004• Q2 CY 2004• Q3 CY 2004• Q4 CY 2004

• H2 CY 2004

[Date].[Calendar].[Calendar Quarter].[Q1 CY 2004]

[Date].[Calendar].[CY 2004].[H1 CY 2004].][Q1 CY 2004]

[Date].[Calendar].[Calendar Quarter].&[2004]&[1]

[Date].[Calendar].[Q1 CY 2004]

18

¿Dónde estamos? Celdas

18

Un lugar en el cubo

Data pertinente a una intersección

de miembros

Contiene medidas

Identificada por los miembros de

una dimensión

Celda

Cantidad 1,134

4 * 4 * 6 = 96 celdas

X * Y * ZProduct * Quarter * Country

19

¿Dónde estamos? Tuplas

19

Identifica una cela o sección

de un cubo

Representada por un miembro

de cada dimensión

Separados por comas,

delimitados por paréntesis

Celda

Cantidad 1,134

([Product].[Product Line].[Accesories], [Date].[Calendar].[Calendar Quarter].&[2003].&[4],[Customer].[Country].[Australia])

20

¿Dónde estamos? Tuplas

20

No tiene tener que

explícitamente tener miembros

de todas las dimensiones

Tuple

1. ([Customer].[Country].[Australia])

2. ([Date].[Calendar].[2004].[H1 CY 2004].[Q1 CY 2004], [Customer].[Country].[Australia])

3. ([Date].[Calendar].[2004].[H1 CY 2004].[Q1 CY 2004],([Product].[Product Line].[Mountain],[Customer].[Country].[Australia])

Tuple

Tuple

21

¿Dónde estamos? Conjuntos (Sets)

21

• Colección de tuplasdefinidas usando las misma dimensiones (en tipo y número)

• Delimitada por llaves {}

{(Customer.Country.Australia), (Customer.Country.Canada)}

{([Date].[Calendar].[2004].[H1 CY 2004]. [Q1 CY 2002], [Product].[Product Line].[Mountain],[Customer].[Country].[Australia]),

([Customer].[Country].[Australia],[Date].[Calendar].[2004].[H1 CY 2004]. [Q1 CY 2003], [Product].[Product Line].[Mountain]),

([Customer].[Country].[Australia],[Date].[Calendar].[2004].[H1 CY 2004]. [Q1 CY 2004], [Product].[Product Line].[Mountain])}

{ }

{Customer.Country.Australia, [Product].[Product Line].[Mountain]}{Customer.Country.Australia, [Product].[Product Line].[Mountain]}

Consultas MDXMás allá de los Pivot Tables

22

23

Sintaxis básica de una consulta

• Se usa para devolver un subconjunto de la data multidimensional de un

servidor OLAP

[ WITH <formula_expression> [ , <formula_expression> ... ] ]

SELECT [<axis_expression>, [<axis_expression> ... ]]

FROM [<cube_expression>]

[WHERE [slicer_expression]]

• Ejes (Axis): Hasta 128 ejes, los 5 primeros tienen alias (COLUMN, ROWS,

PAGES, SECTIONS, CHAPTERS)

23

24

Miembros Calculados

• Cálculos especificados por expresiones MDX

• Resuelto después de la evaluación de la expresión (en lugar de traer la data

original de las tablas de hechos)

24

WITH MEMBER [Measures].[Profit] AS'[Measures].[Internet Sales Amount] - [Measures].[Internet Total Product Cost]'SELECT …

WITH MEMBER Measures.[Cumulative Sales] AS'SUM(YTD(), [Measures].[Internet Sales Amount]) 'SELECT …

25

Expresiones

• Sentencias parciales de MDX que se evalúan a un valor

• Combinación de identificadores, valores y operadores que Analysis Services

puede evaluar para obtener un resultado

• Usamos las expresiones como parte de los datos a ser devueltos por una

consulta o como una condición de búsqueda de acuerdo a un criterio

25

26

Expresiones a nivel de Dimensión

Typically used when passing parameters to functions in Multidimensional

Expressions (MDX) to return members, sets, or tuples from a hierarchy.

26

WITH MEMBER [Measures].[MeasureCount] AS

COUNT([Measures].MEMBERS) …

27

Expresiones a nivel de Jerarquía (dimensión)

hierarchy expression contains either a hierarchy identifier or a hierarchy function

• WITH MEMBER [Measures].[CalendarLevelCount] AS [Date].[Calendar].Levels.Count

SELECT [Measures].[CalendarLevelCount] ON 0

FROM [Adventure Works]

• SELECT [Measures].[Internet Sales Amount] ON 0, [Date].[Calendar].MEMBERS ON 1

FROM [Adventure Works]

27

28

Expresiones a nivel de Tupla (1/2)

• Made up of one member from every dimension that is contained within a cube

• Uniquely identifies a single cell within the cube

(Member_expression [ ,Member_expression ... ] )

• Can be fully qualified, can contain implicit members, or can contain a single member

• Any dimension not explicitly referenced within a tuple is implicitly referenced

• Tuplas de un solo miembro

• [Measures].[TestMeasure] Miembro

• ( [Measures].[TestMeasure] ) Tupla

28

29

Expresiones a nivel de Tupla (2/2)

• Conjuntos (Sets): Lista ordenada de cero o más tuplas

• Conjuntos vacios (Empty Set): No contiene tuplas

{ [ { Tuple_expression | Member_expression } [ , { Tuple_expression | Member_expression } ] ... ] }

• SELECT {[Measures].[Internet Sales Amount], [Measures].[Internet Tax Amount]}

ON COLUMNS,

{

([Product].[Product Categories].[Category].&[4], [Date].[Calendar].[Calendar Year].&[2004]),

([Product].[Product Categories].[Category].&[1], [Date].[Calendar].[Calendar Year].&[2003]),

([Product].[Product Categories].[Category].&[3], [Date].[Calendar].[Calendar Year].&[2004])

} ON ROWS

FROM [Adventure Works]

29

30

Expresiones a nivel de Sub-Cubo

Puede contener un identificador de sub-cubo o una sentencia MDX que

devuelva un sub-cubo.

30

SELECT [Measures].MEMBERS ON COLUMNS, [Date].[Calendar Year].MEMBERS ON ROWS

FROM (SELECT [Measures].[Internet Sales Amount] ON COLUMNS, [Date].[Calendar Year].&[2012] ON ROWSFROM [Adventure Works])

31

Funciones

• Usadas para operar programáticamente sobre bases de datos

multidimensionales

31

WITH MEMBER Measures.LocationName AS

[Customer].[Country].CurrentMember.Name…

WITH MEMBER Measures.User AS USERNAME…

CROSSJOIN ([Product].[Product Line].[Product Line].MEMBERS,Customer.Country.Members) ON ROWS…

32

Trabajando con valores Vacíos (empty)

32

WITHMEMBER [Product].[Category].[All Products].ReturnZero AS 0 MEMBER MEASURES.ISEMPTYDemo AS

ISEMPTY([Measures].[Internet Tax Amount]) //Will true for any null or zero value MEMBER MEASURES.IsZero AS

[Measures].[Internet Tax Amount]=0 SELECT {[Measures].[Internet Tax Amount],

MEASURES.ISEMPTYDemo, MEASURES.IsZero} ON COLUMNS, [Product].[Category].[Category].ALLMEMBERS ON ROWS

FROM [Adventure Works] WHERE [Date].[Calendar].[Calendar Year].&[2012]

33

NON EMPTY

33

SELECT {[Measures].[Internet Tax Amount]} ON COLUMNS, NON EMPTY [Product].[Category].[Category].MEMBERS ON ROWSFROM [Adventure Works] WHERE([Date].[Calendar].[Calendar Year].&[2012])

34

Fundamentos: NonEmpty

34

WITH MEMBER MEASURES.CategoryCount ASCOUNT([Product].[Category].[Category].MEMBERS) MEMBER MEASURES.NonEmptyCategoryCountFor2012 ASCOUNT(

NONEMPTY( [Product].[Category].[Category].MEMBERS ,([Date].[Calendar].[Calendar Year].&[2012], [Measures].[Internet Tax Amount]) )

) SELECT {MEASURES.CategoryCount, MEASURES.NonEmptyCategoryCountFor2012 } ON COLUMNSFROM [Adventure Works];

Funciones y más funcionesMás allá de los Pivot Tables

35

36

Funciones (Sintaxis MDX)

36

Categoría Descripción

Array functions Provide arrays for use in stored procedures

Dimension functions Return a reference to a dimension from a hierarchy, level, or member.

Hierarchy functions Return a reference to a hierarchy from a level or member.

Level functions Return a reference to a level from a member, dimension, hierarchy, or from a string expression.

Logical functions Perform logical operations and comparisons on objects and expressions.

Member functions Return a reference to a member from other objects or from a string expression.

Numeric functions Perform mathematical and statistical functions on objects and expressions.

Set functions Return a reference to a set from other objects or from a string expression.

String functions Return string values from other objects or from the server.

Tuple functions Return a reference to a tuple from a set or from a string expression.

37

Funciones de Cadena (String)

37

WITHMEMBER [Measures].[ProductName] AS

[Product].[Product].CurrentMember.NameMEMBER [Measures].[ProductUniqueName] AS

[Product].[Product].CurrentMember.UniquenameMEMBER [Measures].[ProductDimensionName] AS

[Product].NameSELECT {[Measures].[ProductName], [Measures].[ProductUniqueName],

[Measures].[ProductDimensionName]} ON COLUMNS, [Product].[Product].MEMBERS ON ROWS

FROM [Adventure Works] ;

38

Funciones de Cadena (String)

38

SELECT {STRTOMEMBER("[Measures].[Inter" + "net Sales Amount]")} ON COLUMNS, STRTOSET("{

[Product].[Product Categories].[Category].&[3], [Product].[Product Categories].[Product].&[477], [Product].[Product Categories].[Product].&[788], [Product].[Product Categories].[Product].&[708], [Product].[Product Categories].[Product].&[711] }") ON ROWS

FROM [Adventure Works];

39

Funciones Lógicas

39

WITHMEMBER MEASURES.[IsLeafDemo] AS

IsLeaf([Date].[Calendar].CurrentMember)

MEMBER MEASURES.[IsAncestorDemo] ASIsAncestor([Date].[Calendar].CurrentMember, [Date].[Calendar].[Date].&[1])

SELECT {MEASURES.[IsLeafDemo], MEASURES.[IsAncestorDemo] } ON 0, [Date].[Calendar].MEMBERS ON 1

FROM [Adventure Works];

40

Funciones a nivel de Miembro

40

WITHMEMBER MEASURES.[CurrentMemberDemo] AS

[Date].[Calendar].CurrentMember.NameMEMBER MEASURES.[ParentDemo] AS

[Date].[Calendar].CurrentMember.Parent.NameMEMBER MEASURES.[AncestorDemo] AS

ANCESTOR([Date].[Calendar].CurrentMember, [Date].[Calendar].[Calendar Year]).NameMEMBER MEASURES.[PrevMemberDemo] AS

[Date].[Calendar].CurrentMember.Prevmember.NameSELECT {MEASURES.[CurrentMemberDemo], MEASURES.[ParentDemo],

MEASURES.[AncestorDemo], MEASURES.[PrevMemberDemo] } ON 0, [Date].[Calendar].MEMBERS ON 1

FROM [Adventure Works];

41

Funciones a nivel de Miembro: ParallelPeriod

41

january

february

march

april

may

june

july

august

september

october

november

december

Quarter 1

Quarter 2

Quarter 3

Quarter 4

Semester 1

Semester 2

ParallelPeriod([Quarter, 1, April])

ParallelPeriod([Quarter, -2, April])

42

Funciones a nivel de Conjunto (Set): Descendants

42

SELECT [Measures].[Internet Sales Amount] ON Columns, DESCENDANTS( [Date].[Calendar].[Calendar Year].&[2011] ,

[Date].[Calendar].[Date]) ON RowsFROM [Adventure Works];

43

Funciones a nivel de Conjunto (Set): Order

43

SELECT [Measures].[Internet Sales Amount] ON Columns, ORDER(

DESCENDANTS( [Date].[Calendar].[Calendar Year].&[2012] ,

[Date].[Calendar].[Date]) , [Measures].[Internet Sales Amount], BDESC

) ON ROWSFROM [Adventure Works] ;

44

Funciones a nivel de Conjunto (Set): Filter

44

SELECT [Measures].[Internet Sales Amount] ON Columns, FILTER(

DESCENDANTS( [Date].[Calendar].[Calendar Year].&[2010] , [Date].[Calendar].[Date])

, [Measures].[Internet Sales Amount]>10000) ON Rows

FROM [Adventure Works]

Preguntas?

Referencias

¡Gracias!

Alan KooSenior Consultant | Nagnoi, LLC.

Blog: www.alankoo.com

Twitter: @alan_koo

facebook.com/MicrosofBIyMas

Gracias por participar

top related