Mondrian - MDX



 Pentaho - Mondrian 


El núcleo de Mondrian es un JAR que actúa como "JDBC para OLAP": proporcionando conexiones y ejecutando consultas SQL contra la base de datos relacional que sirve los datos. Los binarios de Mondrian vienen empaquetados de diferentes maneras:
  1. Como un paquete WAR que contiene Jpivot, un framework para trabajo con aplicaciones web y tecnología OLAP, junto con un ejemplo de datos que pueden ser cargados en una base de datos de su elección.
  1. Como un paquete WAR que además de contener a Jpivot, incluye una base de datos Derby, con lo que no se requiere ninguna configuración extra, aparte del despliegue sobre el servidor de aplicaciones.
Ambas distribuciones contienen los fuentes de Mondrian. Además, todos los JARs necesarios para la ejecución de Mondrian están incluidos en la distribución, en el directorio WAR /WEB-INF/lib.

Mondrian viene incluido en la distribución de Pentaho, pero también puede ser instalado de forma independientemente como se explica en la siguiente dirección url:
http://mondrian.pentaho.com/documentation/installation_es.php

MDX

MDX es un acrónimo de Multidimensional Query eXpression. Este lenguaje fue creado en 1997 por Microsoft. No es un lenguaje estándar sin embargo diferentes fabricantes de herramientas OLAP(entre ellos Mondrian) lo han adoptado como estandard de hecho.
El MDX es en los sistemas OLAP el equivalente al SQL en los sistemas gestores de bases de datos relacionales. Eso significa que es el lenguaje a través del cual podemos explotar la información que reside en los motores OLAP y satisfacer las consultas analíticas de las que hemos hablado en el
La principal diferencia del mundo OLAP respecto al mundo relacional radica en que las estructuras dimensionales están jerarquizadas y se representan en forma de árbol y por lo tanto existen relaciones entre los diferentes miembros de las dimensiones.

Ejemplos

Si queremos obtener por ejemplo el importe de las ventas para el año 2016 para la familia de productos lácteos la consulta seria la siguiente:
SELECT
{ [Medidas].[importe ventas]}
on columns,
{ [Tiempo].[2016] }
on rows
FROM [cubo ventas]
WHERE ([Familia].[lacteos])

1. Ejemplos:
Creamos un Cubo a partir una tabla FAC_MPEM_UPMI  y tablas dimensionales DIM_GENL_UBIGEO_INEI,  DIM_MAE_CLASIFICACION_EDAD, DIM_GENL_IDIOMA, etc..



















en : \biserver-ce\pentaho-solutions\MPE\Conductor por ejemplo (pueden crear una carpeta de su solución)
Cubo_Conductor.mondrian.xml

<?xml version="1.0" encoding="iso-8859-1"?>
<Schema name="Cubo_Conductor">
    <Cube name="Cubo_Conductor" cache="false" enabled="true">
        <Table name="FAC_MPEM_UPMI"/>

        <Dimension name="REGION" foreignKey="ID_UBIGEO_INEI_DW">
            <Hierarchy name="REGIÓN" hasAll="true" allMemberName="Nivel Nacional" primaryKey="ID_UBIGEO_INEI_DW">
                <Table name="DIM_GENL_UBIGEO_INEI"/>
                <Level name="DEPARTAMENTO" table="DIM_GENL_UBIGEO_INEI" column="DEPARTAMENTO" uniqueMembers="false" />
                <Level name="PROVINCIA" table="DIM_GENL_UBIGEO_INEI" column="PROVINCIA" uniqueMembers="false"/>
                <Level name="DISTRITO" table="DIM_GENL_UBIGEO_INEI" column="DISTRITO" uniqueMembers="false"/>
            </Hierarchy>
        </Dimension>

        <Dimension name="Conductor">
            <Hierarchy name="Conductor" hasAll="true" allMemberName="Conductores">
                <Table name="FAC_MPEM_UPMI"/>
                <Level name="Conductor" table="FAC_MPEM_UPMI" column="COND_NOMBRES" uniqueMembers="true" />
            </Hierarchy>
        </Dimension>

        <Dimension name="Apellido Paterno">
            <Hierarchy name="Apellido Paterno" hasAll="true" allMemberName="Apellido P">
                <Table name="FAC_MPEM_UPMI"/>
                <Level name="Apellido Paterno" table="FAC_MPEM_UPMI" column="COND_APELLIDO_PATERNO" uniqueMembers="true" />
            </Hierarchy>
        </Dimension>

        <Dimension name="Apellido Materno">
            <Hierarchy name="Apellido Materno" hasAll="true" allMemberName="Apellido M">
                <Table name="FAC_MPEM_UPMI"/>
<Level name="Apellido Materno" table="FAC_MPEM_UPMI" column="COND_APELLIDO_MATERNO" uniqueMembers="true" />
            </Hierarchy>
        </Dimension>


        <Dimension name="Edad Conductor" foreignKey="ID_CLASIFICACION_EDAD_COND_DW">
            <Hierarchy name="Edad Conductor" hasAll="true" allMemberName="Edades" primaryKey="ID_CLASIFICACION_EDAD_DW">
                <Table name="DIM_MAE_CLASIFICACION_EDAD"/>
                <Level name="Edad Conductor" table="DIM_MAE_CLASIFICACION_EDAD" column="DESCRIPCION" uniqueMembers="false" ordinalColumn="ORDEN_CLASIFICACION_EDAD"/>
            </Hierarchy>
        </Dimension>

        <Dimension name="Lengua Materna" foreignKey="ID_IDIOMA_DW">
            <Hierarchy name="Lengua Materna" hasAll="true" allMemberName="Todos Idiomas" primaryKey="ID_IDIOMA_DW">
                <Table name="DIM_GENL_IDIOMA"/>
                <Level name="Lengua Materna" table="DIM_GENL_IDIOMA" column="DESCRIPCION" uniqueMembers="false" ordinalColumn="ORDEN_IDIOMA"/>
            </Hierarchy>
        </Dimension>

<!--
        <Dimension name="Conductor nacido en su labor minera">
            <Hierarchy name="Conductor nacido en el mismo distrito donde realiza sus labores mineras" hasAll="true" allMemberName="Todos Conductores">
                <Table name="FAC_MPEM_UPMI"/>
                <Level name="Conductor nacido en su labor minera" table="FAC_MPEM_UPMI" column="FLG_ARRAIGO_COND_NACI" uniqueMembers="false" ordinalColumn="FLG_ARRAIGO_COND_NACI"/>
            </Hierarchy>
        </Dimension>
-->

<Dimension name="Conductor nacido en su labor minera" foreignKey="FLG_ARRAIGO_COND_NACI">
            <Hierarchy name="Conductor nacido en el mismo distrito donde realiza sus labores mineras" hasAll="true" allMemberName="Todos Conductores" primaryKey="ID_CONDICIONAL_DW">
                <Table name="DIM_MAE_CONDICIONAL"/>
                <Level name="Conductor nacido en su labor minera" table="DIM_MAE_CONDICIONAL" column="DESCRIPCION" uniqueMembers="false" ordinalColumn="ID_ORDEN"/>
            </Hierarchy>
        </Dimension>

<Dimension name="Conductor nacido en la Región" foreignKey="FLG_ARRAIGO_COND_NACI_DEP">
            <Hierarchy name="Conductor nacido en la Región donde realiza sus labores mineras" hasAll="true" allMemberName="Todos Conductores" primaryKey="ID_CONDICIONAL_DW">
                <Table name="DIM_MAE_CONDICIONAL"/>
                <Level name="Conductor nacido en la Región" table="DIM_MAE_CONDICIONAL" column="DESCRIPCION" uniqueMembers="false" ordinalColumn="ID_ORDEN"/>
            </Hierarchy>
        </Dimension>
<!--
        <Dimension name="Conductor residente en su labor minera">
            <Hierarchy name="Conductor residente en el mismo distrito donde realiza sus labores mineras" hasAll="true" allMemberName="Todos Conductores">
                <Table name="FAC_MPEM_UPMI"/>
                <Level name="Conductor residente en su labor minera" table="FAC_MPEM_UPMI" column="FLG_ARRAIGO_COND_RESID" uniqueMembers="false"/>
            </Hierarchy>
        </Dimension>
-->

<Dimension name="Conductor residente en su labor minera" foreignKey="FLG_ARRAIGO_COND_RESID">
            <Hierarchy name="Conductor residente en el mismo distrito donde realiza sus labores mineras" hasAll="true" allMemberName="Todos Conductores" primaryKey="ID_CONDICIONAL_DW">
                <Table name="DIM_MAE_CONDICIONAL"/>
                <Level name="Conductor residente en su labor minera" table="DIM_MAE_CONDICIONAL" column="DESCRIPCION" uniqueMembers="false" ordinalColumn="ID_ORDEN"/>
            </Hierarchy>
        </Dimension>

<Dimension name="Conductor residente en su region" foreignKey="FLG_ARRAIGO_COND_RESID_DEP">
            <Hierarchy name="Conductor residente en la región donde realiza sus labores mineras" hasAll="true" allMemberName="Todos Conductores" primaryKey="ID_CONDICIONAL_DW">
                <Table name="DIM_MAE_CONDICIONAL"/>
                <Level name="Conductor residente en su region" table="DIM_MAE_CONDICIONAL" column="DESCRIPCION" uniqueMembers="false" ordinalColumn="ID_ORDEN"/>
            </Hierarchy>
        </Dimension>


        <Dimension name="Nivel de Educación Conductor" foreignKey="ID_NIVEL_ACADEMICO_COND_DW">
            <Hierarchy name="Nivel de Educación Conductor" hasAll="true" allMemberName="Todos Nivel de Educación" primaryKey="ID_NIVEL_ACADEMICO_DW">
                <Table name="DIM_GENL_NIVEL_ACADEMICO"/>
                <Level name="Nivel de Educación Conductor" table="DIM_GENL_NIVEL_ACADEMICO" column="DESCRIPCION" uniqueMembers="false" ordinalColumn="ORDEN_NIVEL_ACADEMICO"/>
            </Hierarchy>
        </Dimension>

        <Dimension name="Especialidad del Conductor" foreignKey="ID_ESPECIALIDAD_CONDUCTOR_DW">
            <Hierarchy name="Especialidad del Conductor" hasAll="true" allMemberName="Todas Especialidades Conductor" primaryKey="ID_ESPECIALIDAD_DW">
                <Table name="DIM_GENL_ESPECIALIDAD"/>
                <Level name="Especialidad del Conductor" table="DIM_GENL_ESPECIALIDAD" column="DESCRIPCION" uniqueMembers="false" ordinalColumn="ID_ESPECIALIDAD_DW"/>
            </Hierarchy>
        </Dimension>

        <Dimension name="Especialidad de la Pareja" foreignKey="ID_ESPECIALIDAD_ESPOSA_DW">
            <Hierarchy name="Especialidad de la Pareja" hasAll="true" allMemberName="Todas Especialidades Conductor" primaryKey="ID_ESPECIALIDAD_DW">
                <Table name="DIM_GENL_ESPECIALIDAD"/>
                <Level name="Especialidad de la Pareja" table="DIM_GENL_ESPECIALIDAD" column="DESCRIPCION" uniqueMembers="false" ordinalColumn="ID_ESPECIALIDAD_DW"/>
            </Hierarchy>
        </Dimension>


        <Dimension name="Estado Civil del Conductor" foreignKey="ID_ESTADO_CIVIL_DW">
            <Hierarchy name="Estado Civil del Conductor" hasAll="true" allMemberName="Todos Estado Civil" primaryKey="ID_ESTADO_CIVIL_DW">
                <Table name="DIM_GENL_ESTADO_CIVIL"/>
                <Level name="Estado Civil del Conductor" table="DIM_GENL_ESTADO_CIVIL" column="DESCRIPCION" uniqueMembers="false" ordinalColumn="ID_ESTADO_CIVIL_DW"/>
            </Hierarchy>
        </Dimension>

        <Dimension name="Número de Hijos" foreignKey="ID_RANGO_HIJOS_DW">
            <Hierarchy name="Número de Hijos" hasAll="true" allMemberName="Total" primaryKey="ID_RANGO_HIJOS_DW">
                <Table name="DIM_MAE_RANGO_HIJOS"/>
                <Level name="Número de Hijos" table="DIM_MAE_RANGO_HIJOS" column="DESCRIPCION" uniqueMembers="false" ordinalColumn="ID_RANGO_HIJOS_DW"/>
            </Hierarchy>
        </Dimension>

        <Dimension name="Tiempo LLegada a Labor" foreignKey="ID_TIEMPO_LLEGADA_LABOR_DW">
            <Hierarchy name="Tiempo LLegada a Labor" hasAll="true" allMemberName="Todos Tiempo Llegada Labor" primaryKey="ID_TIEMPO_LLEGADA_LABOR_DW">
                <Table name="DIM_MAE_TIEMPO_LLEGADA_LABOR"/>
                <Level name="Tiempo LLegada a Labor" table="DIM_MAE_TIEMPO_LLEGADA_LABOR" column="DESCRIPCION" uniqueMembers="false" ordinalColumn="ID_TIEMPO_LLEGADA_LABOR_DW"/>
            </Hierarchy>
        </Dimension>

        <Dimension name="Actividad Principal del Conductor" foreignKey="ID_TIPO_ACT_TRABAJO_COND">
            <Hierarchy name="Actividad Principal del Conductor" hasAll="true" allMemberName="Todas Actividades" primaryKey="ID_TIPO_ACT_TRABAJO_DW">
                <Table name="DIM_MAE_TIPO_ACT_TRABAJO"/>
                <Level name="Actividad Principal del Conductor" table="DIM_MAE_TIPO_ACT_TRABAJO" column="DESCRIPCION" uniqueMembers="false" ordinalColumn="ID_TIPO_ACT_TRABAJO_DW"/>
            </Hierarchy>
        </Dimension>

        <Dimension name="Edad Esposa" foreignKey="ID_CLASIFICACI_EDAD_ESPOSA_DW">
            <Hierarchy name="Edad Pareja" hasAll="true" allMemberName="Todas Edades" primaryKey="ID_CLASIFICACION_EDAD_DW">
                <Table name="DIM_MAE_CLASIFICACION_EDAD"/>
                <Level name="Edad Pareja" table="DIM_MAE_CLASIFICACION_EDAD" column="DESCRIPCION" uniqueMembers="false" ordinalColumn="ORDEN_CLASIFICACION_EDAD"/>
            </Hierarchy>
        </Dimension>

        <Dimension name="Nivel de Educación Esposa" foreignKey="ID_NIVEL_ACADEMICO_ESPOSA_DW">
            <Hierarchy name="Nivel de Educación Pareja" hasAll="true" allMemberName="Todos Nivel de Educación Pareja" primaryKey="ID_NIVEL_ACADEMICO_DW">
                <Table name="DIM_GENL_NIVEL_ACADEMICO"/>
                <Level name="Nivel de Educación Pareja" table="DIM_GENL_NIVEL_ACADEMICO" column="DESCRIPCION" uniqueMembers="false" ordinalColumn="ORDEN_NIVEL_ACADEMICO"/>
            </Hierarchy>
        </Dimension>
        <!--
        <Dimension name="Trabaja Esposa">
            <Hierarchy name="Parejas de Conductores que trabajan" hasAll="true" allMemberName="Todas Parejas">
                <Table name="FAC_MPEM_UPMI"/>
                <Level name="Trabaja Pareja" table="FAC_MPEM_UPMI" column="FLG_TRABAJO_ESPOSA" uniqueMembers="false"/>
            </Hierarchy>
        </Dimension>
        -->

<Dimension name="Trabaja Esposa" foreignKey="FLG_TRABAJO_ESPOSA">
            <Hierarchy name="Parejas de Conductores que trabajan" hasAll="true" allMemberName="Todas Parejas" primaryKey="ID_CONDICIONAL_DW">
                <Table name="DIM_MAE_CONDICIONAL"/>
                <Level name="Trabaja Pareja" table="DIM_MAE_CONDICIONAL" column="DESCRIPCION" uniqueMembers="false" ordinalColumn="ID_ORDEN"/>
            </Hierarchy>
        </Dimension>


        <Dimension name="Sector de Desempeño Esposa" foreignKey="ID_TIPO_ACT_TRABAJO_ESPOSA">
            <Hierarchy name="Sector de Desempeño Pareja" hasAll="true" allMemberName="Todas Actividades" primaryKey="ID_TIPO_ACT_TRABAJO_DW">
                <Table name="DIM_MAE_TIPO_ACT_TRABAJO"/>
                <Level name="Sector de Desempeño Pareja" table="DIM_MAE_TIPO_ACT_TRABAJO" column="DESCRIPCION" uniqueMembers="false" ordinalColumn="DESCRIPCION"/>
            </Hierarchy>
        </Dimension>


        <Dimension name="Tiempo de Trabajo Mineria" foreignKey="ID_TIEMPO_TRABAJA_MIN_DW">
            <Hierarchy name="Tiempo que Trabajo en Minería (Años)" hasAll="true" allMemberName="Total" primaryKey="ID_TIEMPO_TRABAJA_MIN_DW">
                <Table name="DIM_MAE_RANGO_TIEMPO_TRAB_MIN"/>
                <Level name="Tiempo de Trabajo Mineria" table="DIM_MAE_RANGO_TIEMPO_TRAB_MIN" column="DESCRIPCION" uniqueMembers="false" ordinalColumn="ID_TIEMPO_TRABAJA_MIN_DW"/>
            </Hierarchy>
        </Dimension>

        <Dimension name="Tiempo de Trabajo en el lugar de Minero" foreignKey="ID_TIEMPO_LUGAR_MIN_DW">
            <Hierarchy name="Tiempo que Trabaja en la Zona Actual (Años)" hasAll="true" allMemberName="Total" primaryKey="ID_TIEMPO_LUGAR_MIN_DW">
                <Table name="DIM_MAE_RANGO_TIEMPO_LUG_MIN"/>
                <Level name="Tiempo de Trabajo en el lugar de Minero" table="DIM_MAE_RANGO_TIEMPO_LUG_MIN" column="DESCRIPCION" uniqueMembers="false" ordinalColumn="ID_TIEMPO_LUGAR_MIN_DW"/>
            </Hierarchy>
        </Dimension>


        <Dimension name="Conductor">
            <Hierarchy name="Conductor" hasAll="true" allMemberName="Todos Conductores">
                <Table name="FAC_MPEM_UPMI"/>
                <Level name="Conductor" table="FAC_MPEM_UPMI" column="ID_UPMI_DW" uniqueMembers="true" />
            </Hierarchy>
        </Dimension>


        <Dimension name="Nombre del Conductor">
            <Hierarchy name="Nombre del Conductor" hasAll="true" allMemberName="Todos Conductores">
                <Table name="FAC_MPEM_UPMI"/>
                <Level name="Nombre" table="FAC_MPEM_UPMI" column="COND_NOMBRES" uniqueMembers="false"/>
<Level name="Apellido Paterno" table="FAC_MPEM_UPMI" column="COND_APELLIDO_PATERNO" uniqueMembers="false"/>
<Level name="Apellido Materno" table="FAC_MPEM_UPMI" column="COND_APELLIDO_MATERNO" uniqueMembers="false"/>
            </Hierarchy>
        </Dimension>


        <Dimension name="Genero Conductor" foreignKey="ID_SEXO_DW">
            <Hierarchy name="Genero Conductor" hasAll="true" allMemberName="Todos" primaryKey="ID_SEXO_DW">
                <Table name="DIM_GENL_SEXO"/>
                <Level name="Genero Conductor" table="DIM_GENL_SEXO" column="DESCRIPCION" uniqueMembers="false" ordinalColumn="ID_SEXO_DW"/>
            </Hierarchy>
        </Dimension>
        <Measure name="Número de Conductores" column="ID_UPMI_DW" aggregator="distinct-count" datatype="Numeric" formatString="Standard"/>

    </Cube>
</Schema>

Se muestra el cubo a través de Mondrian












Consulta MDX

select NON EMPTY Crossjoin({[Measures].[Número de Conductores]},
 {[Lengua Materna].[Todos Idiomas],
 [Lengua Materna].[Todos Idiomas].[Español (o castellano)], 
 [Lengua Materna].[Todos Idiomas].[Quechua], 
 [Lengua Materna].[Todos Idiomas].[Aimara], 
[Lengua Materna].[Todos Idiomas].[Sin Información]}) ON COLUMNS,
  NON EMPTY Crossjoin(Hierarchize({[REGION.REGIÓN].[Nivel Nacional]}),
            {[Edad Conductor].[Edades], [Edad Conductor].[Edades].[18 - 20], 
             [Edad Conductor].[Edades].[21 - 25], [Edad Conductor].[Edades].[26 - 30],
             [Edad Conductor].[Edades].[31 - 35], [Edad Conductor].[Edades].[36 - 40],
             [Edad Conductor].[Edades].[41 - 45], [Edad Conductor].[Edades].[46 - 50], 
            [Edad Conductor].[Edades].[51 - 55], [Edad Conductor].[Edades].[56 - 60],
 [Edad Conductor].[Edades].[60 - +], [Edad Conductor].[Edades].[Sin Información]}) ON ROWS
from [Cubo_Conductor]


Descargar Mondrian

Comentarios

Entradas populares