DAI-C8-EC: Cubs OLAP amb Mondrian i JPivot II
Contingut
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
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