DAI-C8-EC: Cubs OLAP amb Mondrian i JPivot II

De wikijoan
Salta a la navegació Salta a la cerca

Objectius

Unitat Didàctica: UD10. Eines ETL i Integració de Dades. Kettle

Amb Kettle (PDI, Spoon) tens ja el teu datawarehouse: les dades del cens de tots els municipis de l'estat. Ara és el moment de crear un cub OLAP (utilitzaràs l'eina gràfica del Schema Workbench) i el publicaràs a un servidor Mondrian (navegació de les dades del cub amb JPivot). Pots veure els resultats en els gràfics adjunts.

Desenvolupament

Cens workbench.png
Cens.png


La clau per obtenir un cub navegable amb la jerarquia comunitats-províncies-municipis ha estat crear una vista que faciliti la cerca de tota aquesta informació.

Vista municipis2:

create view municipis2 as 
select cod_mun,municipi,provincia,comunitat,numhab_h,numhab_d
from municipi m, provincia p, comunitat c
where m.cod_prov=p.cod_prov and p.cod_com=c.cod_com;

es crea un cub (Cens) que conté una dimensió (municipi), que conté una jerarquia (comunitat-provincia-municipi), dues mesures (cens_homes i cens_dones), i una mesura calculada (cens=cens_homes+cens_dones). El cub finalment queda:

Cens3.xml:

<Schema name="New Schema1">
  <Cube name="Cens" cache="true" enabled="true">
    <Table name="municipis2" schema="public">
    </Table>
    <Dimension type="StandardDimension" foreignKey="cod_mun" name="municipi">
      <Hierarchy name="municipi" hasAll="true" allMemberName="All municipi" primaryKey="cod_mun">
        <Table name="municipis2" schema="public">
        </Table>
        <Level name="comunitat" table="municipis2" column="comunitat" nameColumn="comunitat" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never">
        </Level>
        <Level name="provincia" table="municipis2" column="provincia" nameColumn="provincia" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never">
        </Level>
        <Level name="municipi" table="municipis2" column="municipi" nameColumn="municipi" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never">
        </Level>
      </Hierarchy>
    </Dimension>
    <Measure name="cens_homes" column="numhab_h" aggregator="sum" visible="true">
    </Measure>
    <Measure name="cens_dones" column="numhab_d" aggregator="sum" visible="true">
    </Measure>
    <CalculatedMember name="cens" caption="cens" formula="[Measures].[cens_homes] + [Measures].[cens_dones]" dimension="Measures" visible="true">
    </CalculatedMember>
  </Cube>
</Schema>

prova1.jsp:

<jp:mondrianQuery id="query01" jdbcDriver="org.postgresql.Driver" jdbcUrl="jdbc:postgresql://192.168.0.10/municipis?user=municipi&password=municipi" catalogUri="/WEB-INF/queries/Cens3.xml">

select {[Measures].[cens],[Measures].[cens_homes],[Measures].[cens_dones]} ON columns,
  {[municipi]} ON rows
from [Cens]
</jp:mondrianQuery>

<c:set var="title01" scope="session">Cens dels municipis de l'Estat</c:set>


La consulta MDX per desplegar tots els municipis de Barcelona és:

select {[Measures].[cens], [Measures].[cens_homes], [Measures].[cens_dones]} ON COLUMNS,
  Hierarchize(Union(Union(Union({[municipi].[All municipi]}, [municipi].[All municipi].Children), [municipi].[All municipi].[Catalunya].Children), [municipi].[All municipi].[Catalunya].[Barcelona].Children)) ON ROWS
from [Cens]

Pràctica per pujar nota. Nosaltres tenim les dades del cens del 2009. Es tracaria de cercar a www.ine.es les dades del cens d'anys anteriors, i afegir una dimensió temporal a la nostra aplicació.

La base de dades quedaria:

MUNICIPI (cod_com,municipi,cod_prov)
CENS (cod_com, any, homes, dones) PK: cod_com + any

Tindrem un cub (Cens), i dues dimensions (municipis i temps). Les mesures quedaran iguals.

Entrega

el professor comprovarà el bon funcionament de l'aplicació en l'ordinador dels alumnes.

Recursos

Moodle

Durarda

2 hores



creat per Joan Quintana Compte, abril 2010