Commit 294ab4fa1fcdbd60d3f5e27782cb21f148c3193e

Authored by Edmar Moretti
1 parent 113e9551

$1

admin/php/classe_metaestat.php
... ... @@ -529,7 +529,7 @@ class Metaestat{
529 529 }
530 530 }
531 531 function hierarquiaPath($node){
532   - $query="select codigo_tipo_regiao as parent from ".$this->esquemaadmin."i3geoestat_agregaregiao WHERE codigo_tipo_regiao_pai = $node";
  532 + $query="select codigo_tipo_regiao_pai as parent from ".$this->esquemaadmin."i3geoestat_agregaregiao WHERE codigo_tipo_regiao = $node";
533 533 $result=$this->execSQL($query,"",false);
534 534 $row = $result[0];
535 535 // save the path in this array
... ... @@ -544,7 +544,8 @@ class Metaestat{
544 544 // to the path
545 545 $path = array_merge($this->hierarquiaPath($row['parent']), $path);
546 546 }
547   - // return the path
  547 + // return the path
  548 + sort($path);
548 549 return $path;
549 550 }
550 551 /**
... ...
ferramentas/saiku/esquemaxml.php
... ... @@ -4,13 +4,23 @@ $m = new Metaestat();
4 4  
5 5 $regioes = $m->listaTipoRegiao();
6 6 $xml = "<Schema name='i3Geo Metaestat'>";
  7 +/*
  8 +echo "<pre>";
7 9 foreach($regioes as $regiao){
  10 + echo $regiao["codigo_tipo_regiao"]."<br>";
8 11 $caminho = $m->hierarquiaPath($regiao["codigo_tipo_regiao"]);
  12 + var_dump($caminho);
  13 +}
  14 +exit;
  15 +*/
  16 +foreach($regioes as $regiao){
  17 + $caminho = $m->hierarquiaPath($regiao["codigo_tipo_regiao"]);
  18 +
9 19 //
10 20 //verifica se a regiao tem hierarquia
11 21 if(empty($caminho)){
12 22 $xml .= "
13   - <Dimension name='codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."' caption='".converte($regiao["nome_tipo_regiao"])."'>
  23 + <Dimension name='codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."' caption='Onde: ".converte($regiao["nome_tipo_regiao"])."'>
14 24 <Hierarchy hasAll='true' primaryKey='".$regiao["identificador"]."'>
15 25 <Table name='".$regiao["tabela"]."' schema='".$regiao["esquemadb"]."' />
16 26 <Level name='Nome - ".converte($regiao["nome_tipo_regiao"])."' column='".$regiao["colunanomeregiao"]."' uniqueMembers='true'/>
... ... @@ -20,73 +30,141 @@ foreach($regioes as $regiao){
20 30 }
21 31 else{
22 32 $xml .= "
23   - <Dimension name='codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."' caption='".converte($regiao["nome_tipo_regiao"])."'>
24   - <Hierarchy hasAll='true' primaryKey='".$regiao["identificador"]."'>
  33 + <Dimension name='codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."' caption='Onde: ".converte($regiao["nome_tipo_regiao"])."'>
  34 + <Hierarchy hasAll='true' primaryKey='codigo'>
25 35 ";
26 36 //cria uma view juntando as tabelas da hierarquia de regioes
27 37 $n = count($caminho);
28   - $r = $m->listaTipoRegiao($caminho[0]);
29 38 $colunas = array();
30   - $sql = "SELECT __COLUNAS__ FROM {$r['esquemadb']}.{$r['tabela']} AS regiao ";
31   - $colunas[] = "regiao.".$r['identificador'];
32   - $colunas[] = "regiao.".$r['colunanomeregiao'];
  39 + $niveis = array();
  40 + $sql = "SELECT __COLUNAS__ FROM {$regiao['esquemadb']}.{$regiao['tabela']} AS regiao ";
  41 + $colunas[] = "regiao.{$regiao['identificador']} AS codigo ";
  42 + $colunas[] = "regiao.{$regiao['colunanomeregiao']} AS nome";
33 43 $tabelaAnt = "regiao";
34   - if($n > 1){
35   - for($i=1;$i<$n;$i++){
36   - $r = $m->listaTipoRegiao($caminho[$i]);
37   - $colunas[] = "j".$i.".".$r['colunanomeregiao'];
38   - $colunas[] = "j".$i.".".$r['identificador'];
39   - $sql .= "INNER JOIN {$r['esquemadb']}.{$r['tabela']}
40   - AS j$i ON j$i.{$r['identificador']}::text = {$tabelaAnt}.{$r['identificador']}::text
41   - ";
42   - $tabelaAnt = "j".$i;
  44 + for($i=0;$i<$n;$i++){
  45 + $r = $m->listaTipoRegiao($caminho[$i]);
  46 + $colunas[] = "j$i.{$r['colunanomeregiao']} AS j$i{$r['colunanomeregiao']}";
  47 + $colunas[] = "j$i.{$r['identificador']} AS j$i{$r['identificador']}";
  48 + $sql .= "INNER JOIN {$r['esquemadb']}.{$r['tabela']}
  49 + AS j$i ON j$i.{$r['identificador']}::text = {$tabelaAnt}.{$r['identificador']}::text
  50 + ";
  51 + $tabelaAnt = "j".$i;
  52 + $niveis[] = "
  53 + <Level name='".converte($r["nome_tipo_regiao"])."'
  54 + column='j$i{$r['identificador']}'
  55 + nameColumn='j$i{$r["colunanomeregiao"]}' uniqueMembers='false'/>
  56 + ";
  57 +
  58 + }
  59 + $niveis[] = "
  60 + <Level name='".converte($regiao["nome_tipo_regiao"])."'
  61 + column='codigo'
  62 + nameColumn='nome' uniqueMembers='true'>
  63 + ";
  64 +
  65 + //verifica outras colunas
  66 + $vis = $regiao['colunasvisiveis'];
  67 + if($vis != ""){
  68 + $vis = str_replace(";",",",$vis);
  69 + $vis = str_replace(",,",",",$vis);
  70 + $vis = explode(",",$vis);
  71 + foreach($vis as $v){
  72 + //if($v != $regiao['colunanomeregiao'] && $v != $regiao['identificador']){
  73 + $colunas[] = "regiao.".$v." as ".$v;
  74 + //}
43 75 }
  76 + $colunas = array_unique($colunas);
44 77 }
45   - $sql .= "INNER JOIN {$regiao['esquemadb']}.{$regiao['tabela']}
46   - AS j$i ON j$i.{$regiao['identificador']}::text = {$tabelaAnt}.{$regiao['identificador']}::text
47   - ";
48   - $colunas[] = "j".$i.".".$regiao['colunanomeregiao'];
49   - $colunas[] = "j".$i.".".$regiao['identificador'];
50 78 $colunas = implode($colunas,",");
51 79 $sql = str_replace("__COLUNAS__",$colunas,$sql);
52 80 $xml .= "
53   - <view><sql>$sql</sql></view>
  81 + <view alias='view_codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."' ><SQL dialect='generic' >$sql</SQL></view>
54 82 ";
55   - //<Level name='Nome - ".converte($regiao["nome_tipo_regiao"])."' column='".$regiao["colunanomeregiao"]."' uniqueMembers='true'/>
  83 + $xml .= implode(" ",$niveis);
  84 + //verifica se existem propriedades (colunas adicionais)
  85 + if($vis != ""){
  86 + //apelidos
  87 + $apelidos = $regiao['apelidos'];
  88 + if($apelidos != ""){
  89 + $apelidos = str_replace(";",",",$apelidos);
  90 + $apelidos = str_replace(",,",",",$apelidos);
  91 + $apelidos = converte($apelidos);
  92 + $apelidos = explode(",",$apelidos);
  93 + }
  94 + else{
  95 + $apelidos = $vis;
  96 + }
  97 + $nvis = count($vis);
  98 + for($i = 0; $i < $nvis; $i++){
  99 + $xml .= "
  100 + <Property name='{$apelidos[$i]}' column='{$vis[$i]}'/>
  101 + ";
  102 + }
  103 + }
  104 + //fecha os elementos. LEVEL deve ser fechado pois o ultimo recebe as propriedades
56 105 $xml .= "
  106 + </Level>
57 107 </Hierarchy>
58 108 </Dimension>
59 109 ";
60 110 }
61 111 }
62   -
63   -$xml .= "
64   - <Cube name='Vari&amp;aacute;veis'>";
  112 +//junta as medidas conforme o nome da tabela utilizada
65 113 $medidas = $m->listaMedidaVariavel();
66   -$tabela = "";
  114 +$tbs = array();
  115 +
67 116 foreach($medidas as $medida){
68   - $agregador = "sum";
69   - if($medida["permitesoma"] == 0 && $medida["permitemedia"] == 1){
70   - $agregador = "avg";
  117 + $k = $medida["esquemadb"].$medida["tabela"];
  118 + if(empty($tbs[$k])){
  119 + $tbs[$k] = array($medida);
71 120 }
72   - if($medida["permitesoma"] == 0 && $medida["permitemedia"] == 0){
73   - $agregador = "count";
  121 + else{
  122 + array_push($tbs[$k],$medida);
74 123 }
75   - if($tabela != $medida["esquemadb"].".".$medida["tabela"]){
  124 +}
  125 +
  126 +//monta os cubos para cada esquema.tabela diferente
  127 +$VirtualCubeDimension = array();
  128 +$VirtualCubeMeasure = array();
  129 +foreach($tbs as $tb){
  130 + //cabecalho de cada cubo obtido da primeira medida
  131 + $c = $tb[0];
  132 + $VirtualCubeDimension[] = "
  133 + <VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}' />
  134 + ";
  135 + $xml .= "
  136 + <Cube name='{$c["esquemadb"]}{$c["tabela"]}'>";
  137 + $xml .= "
  138 + <Table name='".$c["tabela"]."' schema='".$c["esquemadb"]."' />
  139 + <DimensionUsage foreignKey='".$c["colunaidgeo"]."' name='codigo_tipo_regiao_".$c["codigo_tipo_regiao"]."' source='codigo_tipo_regiao_".$c["codigo_tipo_regiao"]."'/>
  140 + ";
  141 + //inclui cada elemento em medida
  142 + foreach($tb as $medida){
  143 + $agregador = "sum";
  144 + if($medida["permitesoma"] == 0 && $medida["permitemedia"] == 1){
  145 + $agregador = "avg";
  146 + }
  147 + if($medida["permitesoma"] == 0 && $medida["permitemedia"] == 0){
  148 + $agregador = "count";
  149 + }
76 150 $xml .= "
77   - <Table name='".$medida["tabela"]."' schema='".$medida["esquemadb"]."' />
78   - <DimensionUsage foreignKey='".$medida["colunaidgeo"]."' name='codigo_tipo_regiao_".$medida["codigo_tipo_regiao"]."' source='codigo_tipo_regiao_".$medida["codigo_tipo_regiao"]."'/>
  151 + <Measure name='id_medida_variavel_".$medida["id_medida_variavel"]."' caption='".converte($medida["nomemedida"])."' column='".$medida["colunavalor"]."' aggregator='".$agregador."' />
  152 + ";
  153 + $VirtualCubeMeasure[] = "
  154 + <VirtualCubeMeasure cubeName='{$c["esquemadb"]}{$c["tabela"]}' name='[Measures].[id_medida_variavel_".$medida["id_medida_variavel"]."]'/>
79 155 ";
80 156 }
81 157 $xml .= "
82   - <Measure name='id_medida_variavel_".$medida["id_medida_variavel"]."' caption='".converte($medida["nomemedida"])."' column='".$medida["colunavalor"]."' aggregator='".$agregador."' />
83   - ";
84   -
85   - $tabela = $medida["esquemadb"].".".$medida["tabela"];
  158 + </Cube>
  159 + ";
86 160 }
87   -$xml .= "
88   - </Cube>
89   - </Schema>";
  161 +$xml .= '<VirtualCube name="i3Geo - Metaestat" >';
  162 +$VirtualCubeDimension = array_unique($VirtualCubeDimension);
  163 +$VirtualCubeMeasure = array_unique($VirtualCubeMeasure);
  164 +$xml .= implode(" ",$VirtualCubeDimension);
  165 +$xml .= implode(" ",$VirtualCubeMeasure);
  166 +$xml .= '</VirtualCube>';
  167 +$xml .= "</Schema>";
90 168 error_reporting(0);
91 169 ob_end_clean();
92 170 echo header("Content-type: application/xml");
... ...