Commit 533a2553c34ff5725fcc8284208bb3f19d630014

Authored by Edmar Moretti
1 parent eb4eaf05

--no commit message

admin/php/classe_metaestat.php
... ... @@ -54,7 +54,7 @@ class Metaestat{
54 54 /**
55 55 * Indica se e necessario converter para UTF strings obtidas do banco de administracao
56 56 */
57   - protected $convUTF;
  57 + public $convUTF;
58 58 /**
59 59 * Pasta temporaria utilizada pelo mapserver
60 60 */
... ... @@ -513,7 +513,7 @@ class Metaestat{
513 513 * @param chegar na regiao
514 514 * @return array lista de ids de regioes sequenciais do filho ate chegar ao pai indicado
515 515 */
516   - function regiaoFilhaAoPai($codigo_tipo_regiao,$codigo_tipo_regiao_pai){
  516 + function regiaoFilhaAoPai($codigo_tipo_regiao,$codigo_tipo_regiao_pai=""){
517 517 //echo $codigo_tipo_regiao." ".$codigo_tipo_regiao_pai;
518 518 $pais = $this->listaAgregaRegiao($codigo_tipo_regiao);
519 519 $caminho = array($codigo_tipo_regiao);
... ... @@ -530,11 +530,15 @@ class Metaestat{
530 530 return array("caminho"=>$caminho,"colunas"=>$colunas);
531 531 }
532 532 $testaPai = $this->regiaoFilhaAoPai($pai["codigo_tipo_regiao_pai"],$codigo_tipo_regiao_pai);
  533 + if(count($testaPai) == 0 && $codigo_tipo_regiao_pai == ""){
  534 + return array("caminho"=>$caminho,"colunas"=>$colunas);
  535 + }
533 536 if(count($testaPai) == 0){
534 537 $caminho = array();
535 538 $colunas = array();
536 539 }
537 540 }
  541 +
538 542 }
539 543 /**
540 544 * Cria um arquivo mapfile para uma medida de variavel
... ...
ferramentas/saiku/esquemaxml.php 0 → 100644
... ... @@ -0,0 +1,97 @@
  1 +<?php
  2 +include(dirname(__FILE__)."/../../admin/php/classe_metaestat.php");
  3 +$m = new Metaestat();
  4 +
  5 +$regioes = $m->listaTipoRegiao();
  6 +$hierarquia = array();
  7 +//hierarquia de cada regiao
  8 +foreach($regioes as $regiao){
  9 + $hregioes = $m->listaHierarquiaRegioes($regiao["codigo_tipo_regiao"]);
  10 + $hierarquias[$regiao["codigo_tipo_regiao"]] = $hregioes;
  11 +}
  12 +echo "<pre>";var_dump($hierarquias);exit;
  13 +$xml = "<Schema name='i3Geo Metaestat'>";
  14 +foreach($regioes as $regiao){
  15 + //verifica se a regiao tem hierarquia
  16 + if(count($hierarquias[$regiao["codigo_tipo_regiao"]]) == 0){
  17 + $xml .= "
  18 + <Dimension name='codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."' caption='".converte($regiao["nome_tipo_regiao"])."'>
  19 + <Hierarchy hasAll='true' primaryKey='".$regiao["identificador"]."'>
  20 + <Table name='".$regiao["tabela"]."' schema='".$regiao["esquemadb"]."' />
  21 + <Level name='Nome - ".converte($regiao["nome_tipo_regiao"])."' column='".$regiao["colunanomeregiao"]."' uniqueMembers='true'/>
  22 + </Hierarchy>
  23 + </Dimension>
  24 + ";
  25 + }
  26 + else{
  27 + $caminho = $m->regiaoFilhaAoPai($regiao["codigo_tipo_regiao"]);
  28 + //echo "<pre>";var_dump($caminho);
  29 + $xml .= "
  30 + <Dimension name='codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."' caption='".converte($regiao["nome_tipo_regiao"])."'>
  31 + <Hierarchy hasAll='true' primaryKey='".$regiao["identificador"]."'>
  32 + ";
  33 + //cria uma view juntando as tabelas da hierarquia de regioes
  34 + $ri = $regioes[$caminho[0]];
  35 + $sql = "SELECT * FROM {$ri['esquemadb']}.{$ri['tabela']} AS regiao ";
  36 + $nc = count($caminho) - 1;
  37 + for($i=0;$i<$nc;$i++){
  38 + $r = $regioes[$caminho[$i]];
  39 + $sql .= "INNER JOIN {$r['esquemadb']}.{$r['tabela']}
  40 + AS j$i ON j$i.{$r['identificador']}::text = regiao.{$regiao['identificador']}::text
  41 + ";
  42 + }
  43 + $h = $hierarquias[$caminho[0]];
  44 + $h = $h[0];
  45 + $sql .= "INNER JOIN {$regiao['esquemadb']}.{$regiao['tabela']}
  46 + AS j ON j.{$regiao['identificador']}::text = regiao.{$h['colunaligacao_regiaopai']}::text
  47 + ";
  48 + $xml .= "
  49 + <view><sql>$sql</sql></view>
  50 + ";
  51 + //<Level name='Nome - ".converte($regiao["nome_tipo_regiao"])."' column='".$regiao["colunanomeregiao"]."' uniqueMembers='true'/>
  52 + $xml .= "
  53 + </Hierarchy>
  54 + </Dimension>
  55 + ";
  56 + }
  57 +}
  58 +
  59 +$xml .= "
  60 + <Cube name='Vari&amp;aacute;veis'>";
  61 +$medidas = $m->listaMedidaVariavel();
  62 +$tabela = "";
  63 +foreach($medidas as $medida){
  64 + $agregador = "sum";
  65 + if($medida["permitesoma"] == 0 && $medida["permitemedia"] == 1){
  66 + $agregador = "avg";
  67 + }
  68 + if($medida["permitesoma"] == 0 && $medida["permitemedia"] == 0){
  69 + $agregador = "count";
  70 + }
  71 + if($tabela != $medida["esquemadb"].".".$medida["tabela"]){
  72 + $xml .= "
  73 + <Table name='".$medida["tabela"]."' schema='".$medida["esquemadb"]."' />
  74 + <DimensionUsage foreignKey='".$medida["colunaidgeo"]."' name='codigo_tipo_regiao_".$medida["codigo_tipo_regiao"]."' source='codigo_tipo_regiao_".$medida["codigo_tipo_regiao"]."'/>
  75 + ";
  76 + }
  77 + $xml .= "
  78 + <Measure name='id_medida_variavel_".$medida["id_medida_variavel"]."' caption='".converte($medida["nomemedida"])."' column='".$medida["colunavalor"]."' aggregator='".$agregador."' />
  79 + ";
  80 +
  81 + $tabela = $medida["esquemadb"].".".$medida["tabela"];
  82 +}
  83 +$xml .= "
  84 + </Cube>
  85 + </Schema>";
  86 +error_reporting(0);
  87 +ob_end_clean();
  88 +echo header("Content-type: application/xml");
  89 +echo $xml;
  90 +exit;
  91 +function converte($texto)
  92 +{
  93 + //$texto = str_replace("Í","&amp;iacute",$texto);
  94 +$texto = str_replace("&","&amp;",htmlentities($texto));
  95 + return $texto;
  96 +}
  97 +?>
0 98 \ No newline at end of file
... ...
ferramentas/saiku/i3geo 0 → 100644
... ... @@ -0,0 +1,6 @@
  1 +type=OLAP
  2 +name=i3geo
  3 +driver=mondrian.olap4j.MondrianOlap4jDriver
  4 +location=jdbc:mondrian:Jdbc=jdbc:postgresql://localhost:5432/i3geosaude;Catalog=res:/var/www/i3geo/ferramentas/saiku/esquemaxml.php;JdbcDrivers=org.postgresql.Driver;
  5 +username=postgres
  6 +password=postgres
... ...
ferramentas/saiku/instal.txt 0 → 100644
... ... @@ -0,0 +1,51 @@
  1 +Roteiro para instalação e configuração do SAIKU para uso com o i3Geo.
  2 +
  3 +Para mais informações veja em: http://docs.analytical-labs.com/
  4 +
  5 +- Faça o download do SAIKU Server no endereço: http://meteorite.bi/saiku/download
  6 +
  7 +- Descompacte os arquivos em uma pasta em seu servidor, podendo ser a mesma pasta onde se encontra a pasta i3geo (no Linux /var/www por exemplo)
  8 +
  9 +- Edite o arquivo saiku-server/tomcat/conf/server.xml para definir a porta utilizada pelo SAIKU
  10 +
  11 + Procure por
  12 +
  13 + <Connector port="9090" protocol="HTTP/1.1"
  14 +
  15 + e modifique o valor da porta se achar necessário
  16 +
  17 +- Configure o arquivo de conexão com a fonte de dados
  18 +
  19 + Copie o arquivo "i3geo" localizado em
  20 +
  21 + /var/www/i3geo/ferramentas/saiku
  22 +
  23 + (c:\\ms4w\Apache\htdocs\i3geo\ferramentas\saiku no Windows)
  24 +
  25 + para a pasta:
  26 +
  27 + saiku-server/tomcat/webapps/saiku/WEB-INF/classes/saiku-datasources
  28 +
  29 + Esse arquivo indica qual a fonte de dados que será usada. Altere os valores conforme sua necessidade, por exemplo:
  30 +
  31 + No lugar de localhost coloque o endereço do banco de dados Postgres
  32 +
  33 + No lugar de i3geosaude coloque o nome do banco de dados onde estão as tabelas utilizadas pelo i3Geo
  34 +
  35 + No lugar de http://localhost/i3geo/ferramentas/saiku/esquemaxml.php coloque o endereço (URL) completo do arquivo i3geo/ferramentas/saiku/esquemaxml.php
  36 +
  37 + No lugar de postgres coloque os nomes de usuário e senha para conexão com o banco de dados
  38 +
  39 +- Inicialize o servidor para o SAIKU
  40 +
  41 + Procure na pasta saiku-server o programa start-saiku.bat (para Windows) ou start-saiku.sh para Linux.
  42 +
  43 + Execute esse programa. No caso do linux, digite no terminal:
  44 +
  45 + ./start-saiku.sh
  46 +
  47 + Abra o navegador e digite:
  48 +
  49 + http://localhost:9090/
  50 +
  51 + Se tudo estiver ok, deve aparecer ua tela de login. Utilize admin como usuário e admin como senha
... ...