Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Combinación de varias dimensiones en ejes

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. .

Let's say that a group of FoodMart information consumers, whose data is housed within the Warehouse cube, wish to see the total Units Shipped by U.S. Warehouse-State for each quarter of 1998. Furthermore, the consumers wish to see the Units Shipped in a single column in the report, and the Quarter / Warehouse-State information in the row axis of the presentation.

The general purpose of the CrossJoin() function is to allow us to produce all combinations of two sets. and cited its common use to "collapse" two or more dimensions onto a single axis for purposes of presenting multidimensional data in a two-dimensional matrix.

the CrossJoin() function "returns the cross product of two sets." CrossJoin() is particularly handy as it allows us to prepare data for presentation in a matrix format - the need to return "all possible combinations" of the members / tuples of two or more sets is common.

he result of the use of such a cross product is the placement of two dimensions on the same axis, be it columns or rows, where CrossJoin() creates a new set made up of all possible combinations (after the manner of a "Cartesian product") of the original sets' members.

CrossJoin() handles only two dimensions at a time, so if we need to perform a cross product across more than two dimensions, we must nest the functions to realize our aims

Furthermore, the two sets upon which we are performing a cross join must exist in separate dimensions

Uses of the CrossJoin() function can be quite sophisticated, and, as we shall learn, its use should be tempered with an understanding of its potential impact upon performanceLa siguiente consulta MDX presenta la información requerida combinando 2 de las dimensiones en un eje.

Code Block

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, que brinda MDX 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.

Code Block

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 abre 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.