diff --git a/admin/php/classe_metaestat.php b/admin/php/classe_metaestat.php index 27a28ea..d4d421e 100755 --- a/admin/php/classe_metaestat.php +++ b/admin/php/classe_metaestat.php @@ -529,7 +529,7 @@ class Metaestat{ } } function hierarquiaPath($node){ - $query="select codigo_tipo_regiao as parent from ".$this->esquemaadmin."i3geoestat_agregaregiao WHERE codigo_tipo_regiao_pai = $node"; + $query="select codigo_tipo_regiao_pai as parent from ".$this->esquemaadmin."i3geoestat_agregaregiao WHERE codigo_tipo_regiao = $node"; $result=$this->execSQL($query,"",false); $row = $result[0]; // save the path in this array @@ -544,7 +544,8 @@ class Metaestat{ // to the path $path = array_merge($this->hierarquiaPath($row['parent']), $path); } - // return the path + // return the path + sort($path); return $path; } /** diff --git a/ferramentas/saiku/esquemaxml.php b/ferramentas/saiku/esquemaxml.php index 549322e..d7bf459 100644 --- a/ferramentas/saiku/esquemaxml.php +++ b/ferramentas/saiku/esquemaxml.php @@ -4,13 +4,23 @@ $m = new Metaestat(); $regioes = $m->listaTipoRegiao(); $xml = ""; +/* +echo "
";
 foreach($regioes as $regiao){
+	echo $regiao["codigo_tipo_regiao"]."
"; $caminho = $m->hierarquiaPath($regiao["codigo_tipo_regiao"]); + var_dump($caminho); +} +exit; +*/ +foreach($regioes as $regiao){ + $caminho = $m->hierarquiaPath($regiao["codigo_tipo_regiao"]); + // //verifica se a regiao tem hierarquia if(empty($caminho)){ $xml .= " - + @@ -20,73 +30,141 @@ foreach($regioes as $regiao){ } else{ $xml .= " - - + + "; //cria uma view juntando as tabelas da hierarquia de regioes $n = count($caminho); - $r = $m->listaTipoRegiao($caminho[0]); $colunas = array(); - $sql = "SELECT __COLUNAS__ FROM {$r['esquemadb']}.{$r['tabela']} AS regiao "; - $colunas[] = "regiao.".$r['identificador']; - $colunas[] = "regiao.".$r['colunanomeregiao']; + $niveis = array(); + $sql = "SELECT __COLUNAS__ FROM {$regiao['esquemadb']}.{$regiao['tabela']} AS regiao "; + $colunas[] = "regiao.{$regiao['identificador']} AS codigo "; + $colunas[] = "regiao.{$regiao['colunanomeregiao']} AS nome"; $tabelaAnt = "regiao"; - if($n > 1){ - for($i=1;$i<$n;$i++){ - $r = $m->listaTipoRegiao($caminho[$i]); - $colunas[] = "j".$i.".".$r['colunanomeregiao']; - $colunas[] = "j".$i.".".$r['identificador']; - $sql .= "INNER JOIN {$r['esquemadb']}.{$r['tabela']} - AS j$i ON j$i.{$r['identificador']}::text = {$tabelaAnt}.{$r['identificador']}::text - "; - $tabelaAnt = "j".$i; + for($i=0;$i<$n;$i++){ + $r = $m->listaTipoRegiao($caminho[$i]); + $colunas[] = "j$i.{$r['colunanomeregiao']} AS j$i{$r['colunanomeregiao']}"; + $colunas[] = "j$i.{$r['identificador']} AS j$i{$r['identificador']}"; + $sql .= "INNER JOIN {$r['esquemadb']}.{$r['tabela']} + AS j$i ON j$i.{$r['identificador']}::text = {$tabelaAnt}.{$r['identificador']}::text + "; + $tabelaAnt = "j".$i; + $niveis[] = " + + "; + + } + $niveis[] = " + + "; + + //verifica outras colunas + $vis = $regiao['colunasvisiveis']; + if($vis != ""){ + $vis = str_replace(";",",",$vis); + $vis = str_replace(",,",",",$vis); + $vis = explode(",",$vis); + foreach($vis as $v){ + //if($v != $regiao['colunanomeregiao'] && $v != $regiao['identificador']){ + $colunas[] = "regiao.".$v." as ".$v; + //} } + $colunas = array_unique($colunas); } - $sql .= "INNER JOIN {$regiao['esquemadb']}.{$regiao['tabela']} - AS j$i ON j$i.{$regiao['identificador']}::text = {$tabelaAnt}.{$regiao['identificador']}::text - "; - $colunas[] = "j".$i.".".$regiao['colunanomeregiao']; - $colunas[] = "j".$i.".".$regiao['identificador']; $colunas = implode($colunas,","); $sql = str_replace("__COLUNAS__",$colunas,$sql); $xml .= " - $sql + $sql "; - // + $xml .= implode(" ",$niveis); + //verifica se existem propriedades (colunas adicionais) + if($vis != ""){ + //apelidos + $apelidos = $regiao['apelidos']; + if($apelidos != ""){ + $apelidos = str_replace(";",",",$apelidos); + $apelidos = str_replace(",,",",",$apelidos); + $apelidos = converte($apelidos); + $apelidos = explode(",",$apelidos); + } + else{ + $apelidos = $vis; + } + $nvis = count($vis); + for($i = 0; $i < $nvis; $i++){ + $xml .= " + + "; + } + } + //fecha os elementos. LEVEL deve ser fechado pois o ultimo recebe as propriedades $xml .= " + "; } } - -$xml .= " - "; +//junta as medidas conforme o nome da tabela utilizada $medidas = $m->listaMedidaVariavel(); -$tabela = ""; +$tbs = array(); + foreach($medidas as $medida){ - $agregador = "sum"; - if($medida["permitesoma"] == 0 && $medida["permitemedia"] == 1){ - $agregador = "avg"; + $k = $medida["esquemadb"].$medida["tabela"]; + if(empty($tbs[$k])){ + $tbs[$k] = array($medida); } - if($medida["permitesoma"] == 0 && $medida["permitemedia"] == 0){ - $agregador = "count"; + else{ + array_push($tbs[$k],$medida); } - if($tabela != $medida["esquemadb"].".".$medida["tabela"]){ +} + +//monta os cubos para cada esquema.tabela diferente +$VirtualCubeDimension = array(); +$VirtualCubeMeasure = array(); +foreach($tbs as $tb){ + //cabecalho de cada cubo obtido da primeira medida + $c = $tb[0]; + $VirtualCubeDimension[] = " + + "; + $xml .= " + "; + $xml .= " +
+ + "; + //inclui cada elemento em medida + foreach($tb as $medida){ + $agregador = "sum"; + if($medida["permitesoma"] == 0 && $medida["permitemedia"] == 1){ + $agregador = "avg"; + } + if($medida["permitesoma"] == 0 && $medida["permitemedia"] == 0){ + $agregador = "count"; + } $xml .= " -
- + + "; + $VirtualCubeMeasure[] = " + "; } $xml .= " - - "; - - $tabela = $medida["esquemadb"].".".$medida["tabela"]; + + "; } -$xml .= " - - "; +$xml .= ''; +$VirtualCubeDimension = array_unique($VirtualCubeDimension); +$VirtualCubeMeasure = array_unique($VirtualCubeMeasure); +$xml .= implode(" ",$VirtualCubeDimension); +$xml .= implode(" ",$VirtualCubeMeasure); +$xml .= ''; +$xml .= ""; error_reporting(0); ob_end_clean(); echo header("Content-type: application/xml"); -- libgit2 0.21.2