Issuu on Google+

Prueba Base Datos 3 Análisis Services y Consultas MDX. 1.-Definiciones.Cubo.- Unidad básico de almacenamiento y análisis para SQL Análisis Services. Tabla de Dimensión.- Contiene la jerarquía de los datos que nosotros necesitemos agregar. Dimensión.- Puede tener una o más dimensiones. Nivel.-Cada tipo de agregación se puede hacer en una dimensión. Tabla de Hechos.- Información básica que se desea agregar Medida.- Cada cubo contiene una o más medidas, y se basa en columna de la tabla de hecho Esquema.- Indica las relaciones de dimensiones según su jerarquía. Expresiones MDX (Expresiones Multidimensionales) consultan los datos de los cubos OLAP Un Query MDX devuelve un conjunto de datos, o celdas, como resultado de tomar un subconjunto de celdas del cubo. 1.-Se empieza por definir la estructura del Cubo.

2.-Ahora interesa filtrar las ventas de manzanas vendidas en el último trimestre de un año, vendidas en sucursales del supermercado de la ciudad de Atlanta. (Intentamos seleccionar un subconjunto de celdas del cubo)

3.-En este ejemplo fecha divida en un nivel año, en este caso 1999,2000,2001, o se puede dividir por trimestres un año consta de 4 pero como son 3 en este ejemplo seria 12 en total o 36 meses, o navegar incluso por calendario fiscal o normal.


2.-Armar un cubo de 3 dimensiones: Ruta, Servicio y Tiempo, el cubo tiene 2 medidas: Paquetes y Fecha Ultima, donde ruta se divide en hemisferios (Oriental>> (África, Asia, Australia y Europa) y Occidental(Norte América y Sur América)), otra especifica la fuente que se descompone en (Terrestre >>>>>(Carretera, Tren) y No terrestre >>>(Aire, Agua)) , y el tiempo establecido en dos semestres (1er Cuarto, 2do, 3ero, 4to)

Primer Ejemplo de Consulta.

[ ] Sirve para encerrar el nombre de un miembro cuando contiene un espacio en blanco o un número, asi como una palabra como time, otra alternativa es usar & para identificar la clave identificadora del miembro en vez de usar su nombre. [Time].[2nd half].[3rd quarter] [Time].[2nd half].&[Q3] Sintaxis Básica. SELECT <especificación de eje> [ , … ] FROM <especificación de cubo> WHERE <especificación de slicer> Sintaxis básica a manera de Ejemplo. SELECT >>> Especifica subconjuto datos multidimencionales {[Store Type].[Store Type].MEMBERS} ON COLUMNS, {[Store].[Store State].MEMBERS} ON ROWS FROM [Sales] WHERE (Measures.[Sales Average])

Las consultas MDX deben tener: Cantidad de Ejes dimensionales es hasta 128 Miembros de cada dimensión a ser incluidos en cada eje. Nombre del cubo que define el contexto de datos a consultar. Miembros que restringen los datos a considerar basados en las dimensiones (denominan slicer)

SELECT Las 5 primeras dimensiones usan los alias COLUMNS, ROWS, PAGES, SECTIONS, CHAPTERS. Pero en general se usa AXIS(n), donde n=0 corresponde al alias COLUMNS; AXIS(1) al alias ROWS y así sucesivamente.


FROM especifica el contexto o cubo de donde se consultarán los datos. WHERE es la cláusula opcional que determina qué dimensión o miembro usaremos para restringir los datos a extraer.

Ejemplos Prácticos.1.-Estructura Básica de una sentencia MDX de consulta. SELECT <colExpresion> ON COLUMNS, <rowExpresion> ON ROWS FROM <cubeName> WHERE <filterExpresion>

2.-Estructura de una dimensión en O3 es: <dimension name> <main root> <level name> ... <alternative root1> <level name> ... <alternative root2> <level name> ... 3.- Caso Práctico.Permite el análisis de ventas de una empresa hipotética que vende bicicletas (valores de la dimensión Products). Dichas ventas (medidas por cantidades de unidades vendidas, ganancias, costos, etc.) se pueden analizar por las dimensiones fecha (Date), clientes (Customers), vendedores (Salesmen) y lugares geográficos (Location).


Dimensión con raíces alternativas Ejemplo de dimensión: dimensión Date Ejemplo de raíz principal: Date Ejemplos de raices alternativas:  

Last 12 months: agrupa los últimos 12 meses, Year-to-date: agrupa las fechas desde comienzo del año hasta el día

actual, 

Previous month: contiene el mes anterior con respecto a la fecha actual

Dimensión "común" A diferencia del caso anterior, las dimensiones comunes tienen una sola raíz que es omitida ya que tiene el mismo nombre que la dimensión. Bajo el nombre de la dimensión, se muestran directamente los elementos del nivel de más arriba. Ejemplo: dimensión Products Se muestran los elementos del nivel Family (familias por las que están clasificadas las bicicletas Dimensión medidas. Esta dimensión al igual que en el caso anterior tiene una sola raíz que es omitida. Bajo el nombre de la dimensión (siempre Measures) aparecen los nombres de las medidas.

Supongamos que se desean ver las unidades vendidas en France sólo para los tipos de clientes Major Accounts y Minor Accounts. SELECT {Customers.[Major Accounts], Customers.[Minor Accounts]} ON COLUMNS, {Location.[France]} ON ROWS Demo (Measures.[Units Sold])

FROM WHERE

Para ello se indicaron por enumeración los elementos deseados en el eje correspondiente a las columnas. 

Supongamos que se quiere una visión global del comportamiento de cada uno de los vendedores con respecto a las unidades vendidas y sus comisiones del modelo de ventas independientemente del resto de las dimensiones de análisis. SELECT

FROM

{Measures.[Units Sold], Measures.[Commissions]} ON COLUMNS, {Salesmen.Seller.members} ON ROWS Demo

En esta consulta, para referirnos a todos los vendedores se hace uso del operador .Members que devuelve todos los elementos de un nivel.


Supongamos que se desea ver los ingresos (Revenue) por la venta de bicicletas Mountain bikes profesionales en los años 2002 y 2003 en US, La siguiente consulta MDX nos provee dicha información. SELECT {Date.Date.[2002], Date.Date.[2003]} ON COLUMNS, {Location.[US]} ON ROWS FROM Demo WHERE (Products.[Mountain Bikes].[Professional], Measures.[Revenue]

En esta consulta podemos ver el uso del WHERE. Esta parte de la consulta se utiliza para "filtrar" (slice) las dimensiones. En este caso, de la dimensión conteniendo las medidas se elige la medida Revenue. Además, se filtra la dimensión productos, por lo que el resultado mostrará para US los ingresos en 2002 y 2003 teniendo sólo en cuenta esa línea de bicicleta. Por otro lado, puede verse el uso de la expresión Date.Date.[2003] para hacer referencia al año 2003. La dimensión Date del cubo Demo es una dimensión con raíces alternativas. La expresión anterior está diciendo explícitamente a que elemento dentro de que raíz. Entrando en más detalle, la raíz que se está utilizando Date es la raíz principal. Por lo tanto, la expresión Date.[2003] es también correcta y es interpretada como se desea, es decir se referencia al elemento 2003 de la raíz por defecto que es la raíz principal. Supongamos ahora que se desea ver los ingresos también por la venta de la misma línea de bicicletas en US pero en lo que va del año 2004 (suponiendo un momento que estamos en una fecha actual del 2004). La consulta MDX en este caso debe explicitamente referirse a la raíz alternativa de manera de obtener el resultado deseado SELECT {Date.[Year-to-date].[2004]} ON COLUMNS, {Location.[US]} ON ROWS FROM Demo WHERE (Products.[Mountain Bikes].[Professional], Measures.[Revenue])

Lista de elementos según jerarquía Supongamos que se quiere conocer las unidades vendidas en las distintas ciudades de France por parte de los clientes bajo el tipo denominado Major Accounts. La siguiente consulta MDX nos provee dicha información. SELECT {Customers.[Major Accounts].children} ON COLUMNS, {Location.[France].children} ON ROWS FROM Demo WHERE (Measures.[Units Sold])

En esta consulta se aprovecha las jerarquías de niveles definidas para la dimensiones clientes y ubicaciones geográficas. Para referirse a las ciudades de France e imaginándose la jerarquía como una relación familiar, se hace mención a los hijos del país France (Location.[France].children). Análogamente, a los clientes clasificados como Major Accounts se hace mención usando Customers.[Major Accounts].children.

Combinando formas de listar elementos Supongamos que se quiere visualizar el comportamiento de cada uno de los vendedores con respecto a todas las medidas del modelo de ventas independientemente del resto de las dimensiones de análisis. Esta consulta es similar al caso 2, sólo que ahora no nos interesa estudiar por tal o cual medida sino por todas aquellas que se tengan definidas en el modelo de análisis.


SELECT {Measures.children} ON COLUMNS, {Salesmen.Seller.members} ON ROWS FROM Demo

Esta consulta hace uso del operador .children para obtener los hijos de la raíz de todas las medidas y del operador .members para hacer referencia a todos los elementos del nivel vendedor.

Combinación de varias dimensiones en ejes (anidamiento de dimensiones) Supongamos que se desea visualizar las unidades vendidas de bicicletas Mountain Bikes profesionales y de recreación en Brasil y España en los años 2001 y 2002. Esta consulta involucra 3 dimensiones: productos, ubicaciones y fechas. La visualización usando 3 ejes es algo complejo y lo que en general se quiere es presentar esta información siguiendo el formato bi-dimensional y encapsular las 3 dimensiones. La siguiente consulta MDX presenta la información requerida combinando 2 de las dimensiones en un eje. SELECT {Date.[2001], Date.[2002]} ON COLUMNS, { (Location.[Brazil], Products.[Mountain Bikes].[Professional]), (Location.[Brazil], Products.[Mountain Bikes].[Recreational]), (Location.[Spain], Products.[Mountain Bikes].[Professional]), (Location.[Spain], Products.[Mountain Bikes].[Recreational]) } ON ROWS FROM Demo WHERE (Measures.[Units Sold])

En esta consulta, se plantea por enumeración las combinaciones que nos interesan. El eje de las filas contiene 2 dimensiones, ubicación (Location) y productos (Products). Se puede decir que la dimensión producto está anidada en la dimensión ubicación y se tienen todas las combinaciones de los 2 elementos de interes de cada una de las 2 dimensiones, lo que hace que se tengan 4 tuplas en el eje de las filas. Una tupla en MDX es una combinación de miembros de dimensiones originados de dimensiones diferentes. Con seguridad que la pregunta que surge aqui es, ¿qué pasa si lo que se quiere visualizar es algo análogo pero considerando todas las líneas de bicicletas Mountain Bikes contra todos los países?. Es decir, ¿qué brinda MDX, nuevamente, como alternativa a la enumeración?. MDX brinda la función CrossJoin(). Esta función produce todas las combinaciones de 2 conjuntos (es decir, un "producto cartesiano"). Su uso común es para situaciones como la presentada arriba combinando 2 o mas dimensiones en un único eje a los efectos de visualizar los datos bajo la forma de una matriz bi-dimensional (valga la redundancia), La siguiente consulta permite visualizar la información que surge de la pregunta anterior. SELECT {Date.[2001], Date.[2002]} ON COLUMNS, CrossJoin( {Location.children}, {Products.[Mountain Bikes].children}) ON ROWS FROM Demo WHERE (Measures.[Units Sold])


CrossJoin() espera como parámetros 2 conjuntos, de manera que si se necesita realizar un anidamiento de más de dos conjuntos, se debe anidar la invocación a dicha función. Por otro lado, hay que tener en cuenta que los 2 conjuntos sobre los cuales se quiere hacer el producto cartesiano deben originarse a partir de dimensiones diferentes. Esta función ofrece una combinación interesante de conjuntos obtenibles a partir de las diferentes dimensiones pero su uso debe tener en cuenta que se trata de una función que tiene un impacto potencial importante en la performance de la consulta MDX. Ocultar elementos en Ejes Supongamos que se desea ver la evolución en el tiempo salvo en el año 2002 de los costos por la venta de todas las líneas de bicicletas. La siguiente consulta MDX permite obtener la información. SELECT except(Date.Year.Members, {Date.[2002]}) on COLUMNS, {Products.Line.Members} on ROWS FROM Demo WHERE (Measures.[Cost])

Para ocultar el año 2002 se utiliza la función MDX except(). Esta función devuelve un conjunto que es la diferencia entre 2 conjuntos provistos como argumentos. El comportamiento por defecto de esta función es de eliminar los duplicados antes de determinar la diferencia. Este comportamiento puede ser alterado invocando a la función except con un tercer argumento con valor ALL. Por último, se hace notar que los 2 conjuntos provistos como argumentos a esta función debe ser originados desde la misma dimensión y debe estra definidos al mismo nivel dentro de la dimensión. Consulta MDX de metadata. Supongamos que se desea consultar cuales son las ciudades de Francia sin importar que valores tengan en sus medidas. SELECT {Location.[France].children} ON COLUMNS, {} ON ROWS FROM Demo

Ejemplo Práctico de MSDN. Especificar un conjunto de resultados

En el siguiente ejemplo se muestra una consulta de MDX básica que utiliza la instrucción SELECT . Esta consulta devuelve un conjunto de resultados que contiene las cifras de ventas e impuestos de 2002 y 2003 de la zona de ventas sudoeste. SELECT { [Measures].[Sales Amount], [Measures].[Tax Amount] } ON COLUMNS, { [Date].[Fiscal].[Fiscal Year].&[2002], [Date].[Fiscal].[Fiscal Year].&[2003] } ON ROWS FROM [Adventure Works] WHERE ( [Sales Territory].[Southwest] )

En este ejemplo, la consulta define la siguiente información del conjunto de resultados:


  

La cláusula SELECT establece los ejes de la consulta en los miembros Sales Amount y Tax Amount de la dimensión Measures, y los miembros 2002 y 2003 de la dimensión Date. La cláusula FROM indica que el origen de datos es el cubo Adventure Works. La cláusula WHERE define el eje segmentador como el miembro Southwest de la dimensión Sales Territory.

Observe que el ejemplo de consulta utiliza también los alias de los ejes COLUMNS y ROWS. Las posiciones ordinales para estos ejes también podrían haberse utilizado. En el siguiente ejemplo se muestra cómo podría haberse escrito la consulta de MDX para que utilizara la posición ordinal de cada eje: SELECT { [Measures].[Sales Amount], [Measures].[Tax Amount] } ON 0, { [Date].[Fiscal].[Fiscal Year].&[2002], [Date].[Fiscal].[Fiscal Year].&[2003] } ON 1 FROM [Adventure Works] WHERE ( [Sales Territory].[Southwest] ) La consulta siguiente devuelve el valor de la celda a la que se hace referencia en la tupla especificada en el ejemplo anterior ($80.450,596,98). SELECT Measures.[Reseller Sales Amount] ON COLUMNS FROM [Adventure Works] La dimensionalidad de una tupla hace referencia a la secuencia o el orden de los miembros de la tupla. Debido a que los miembros implícitos siempre aparecen en el mismo orden, se piensa en la dimensionalidad generalmente en relación con los miembros explícitamente definidos de la tupla. El orden de los miembros de la tupla es importante al definir un conjunto de tuplas. El ejemplo siguiente incluye dos miembros de una tupla en el eje de columna. SELECT ([Measures].[Reseller Sales Amount],[Date].[Calendar Year].[CY 2004]) ON COLUMNS FROM [Adventure Works] Conjuntos Un conjunto es un conjunto ordenado de tuplas con la misma dimensionalidad. A continuación se muestra un ejemplo de un conjunto. SELECT { ([Measures].[Reseller Sales Amount], [Date].[Calendar Year].[CY 2003]), ([Measures].[Reseller Sales Amount], [Date].[Calendar Year].[CY 2004]) } ON COLUMNS FROM [Adventure Works] Al consultar las celdas que no existen, las celdas no existentes devuelven valores nulos; es decir, no pueden contener cálculos y no se puede definir un cálculo que escriba en este espacio. Por ejemplo, la siguiente instrucción incluye celdas que no existen. SELECT [Customer].[Gender].[Gender].Members ON COLUMNS, {[Customer].[Customer].[Aaron A. Allen] ,[Customer].[Customer].[Abigail Clark]} ON ROWS FROM [Adventure Works] WHERE Measures.[Internet Sales Amount]


Cuando se utiliza la función Crossjoin (MDX) para devolver el producto cruzado de los miembros de la jerarquía de atributo de las jerarquías de atributo de la misma dimensión, Autoexist limita las tuplas devueltas al conjunto de tuplas que realmente existen, en lugar de devolver un producto cartesiano completo. Por ejemplo, ejecute y examine los resultados de la ejecución de la siguiente consulta. SELECT CROSSJOIN ( {[Customer].[Country].[United States]}, [Customer].[State-Province].Members ) ON 0 FROM [Adventure Works] WHERE Measures.[Internet Sales Amount]


Presentacion Base