Commit 294ab4fa1fcdbd60d3f5e27782cb21f148c3193e
1 parent
113e9551
Exists in
master
and in
7 other branches
$1
Showing
2 changed files
with
123 additions
and
44 deletions
Show diff stats
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&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"); | ... | ... |