Commit 043430dce85113ea14e761f4beb50981778f39b8

Authored by Edmar Moretti
1 parent bb13277c

-

Showing 1 changed file with 82 additions and 77 deletions   Show diff stats
ferramentas/saiku/esquemaxml.php
@@ -74,7 +74,7 @@ gravaDados(array($stringDatasource),$nomeDatasource); @@ -74,7 +74,7 @@ gravaDados(array($stringDatasource),$nomeDatasource);
74 74
75 if(empty($_GET["xmlesquema"])){ 75 if(empty($_GET["xmlesquema"])){
76 $m = new Metaestat(); 76 $m = new Metaestat();
77 - 77 +
78 // 78 //
79 //obtem do mapfile em uso os layers que sao do sistema metaestat, sao regioes e que possuem selecao 79 //obtem do mapfile em uso os layers que sao do sistema metaestat, sao regioes e que possuem selecao
80 // 80 //
@@ -138,7 +138,7 @@ if(empty($_GET["xmlesquema"])){ @@ -138,7 +138,7 @@ if(empty($_GET["xmlesquema"])){
138 $item = ""; 138 $item = "";
139 $registros = ""; 139 $registros = "";
140 //echo "<pre>";var_dump($regioes);exit; 140 //echo "<pre>";var_dump($regioes);exit;
141 - 141 +
142 $xml = "<Schema name='i3Geo Metaestat'>"; 142 $xml = "<Schema name='i3Geo Metaestat'>";
143 //cria as dimensoes de tipo temporal 143 //cria as dimensoes de tipo temporal
144 if(empty($saikuConfigDataSource['tabelaDimensaoTempo'])){ 144 if(empty($saikuConfigDataSource['tabelaDimensaoTempo'])){
@@ -172,7 +172,7 @@ if(empty($_GET[&quot;xmlesquema&quot;])){ @@ -172,7 +172,7 @@ if(empty($_GET[&quot;xmlesquema&quot;])){
172 //dimensoes geograficas 172 //dimensoes geograficas
173 //as dimensoes sao duplicadas 173 //as dimensoes sao duplicadas
174 //uma delas contem o geocodigo que permite a geracao do mapa 174 //uma delas contem o geocodigo que permite a geracao do mapa
175 - 175 +
176 //guarda as regioes filhas de uma determinada regiao (chave) 176 //guarda as regioes filhas de uma determinada regiao (chave)
177 $filhosDaRegiao = array(); 177 $filhosDaRegiao = array();
178 $VirtualCubeDimensionDaRegiao = array(); 178 $VirtualCubeDimensionDaRegiao = array();
@@ -184,87 +184,91 @@ if(empty($_GET[&quot;xmlesquema&quot;])){ @@ -184,87 +184,91 @@ if(empty($_GET[&quot;xmlesquema&quot;])){
184 } 184 }
185 $xml1 = ""; 185 $xml1 = "";
186 $xml2 = ""; 186 $xml2 = "";
  187 +
187 foreach($regioes as $regiao){ 188 foreach($regioes as $regiao){
188 - $caminho = $m->hierarquiaPath($regiao["codigo_tipo_regiao"]); 189 + $sqls = array();
189 $xml1 .= " 190 $xml1 .= "
190 <Dimension name='codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."' caption='Onde:".converte($regiao["nome_tipo_regiao"])."'> 191 <Dimension name='codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."' caption='Onde:".converte($regiao["nome_tipo_regiao"])."'>
191 - <Hierarchy hasAll='true' primaryKey='{$regiao['identificador']}'> 192 + <Hierarchy hasAll='true' primaryKey='codigo'>
192 "; 193 ";
193 $xml2 .= " 194 $xml2 .= "
194 <Dimension name='codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."_geocod' caption='GeoCod:".converte($regiao["nome_tipo_regiao"])."'> 195 <Dimension name='codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."_geocod' caption='GeoCod:".converte($regiao["nome_tipo_regiao"])."'>
195 - <Hierarchy hasAll='true' primaryKey='{$regiao['identificador']}'> 196 + <Hierarchy hasAll='true' primaryKey='codigo'>
196 "; 197 ";
197 //cria uma view juntando as tabelas da hierarquia de regioes 198 //cria uma view juntando as tabelas da hierarquia de regioes
  199 + $caminho = $m->hierarquiaPath($regiao["codigo_tipo_regiao"]);
  200 + //$caminho[] = $regiao["codigo_tipo_regiao"];
  201 +
198 $n = count($caminho); 202 $n = count($caminho);
199 - $colunas = array(); 203 + $regiaoAtual = $regiao;
200 $niveis1 = array(); 204 $niveis1 = array();
201 $niveis2 = array(); 205 $niveis2 = array();
202 - $sql = "SELECT __COLUNAS__ FROM {$regiao['esquemadb']}.{$regiao['tabela']} AS regiao ";  
203 - $colunas[] = "regiao.{$regiao['identificador']} as codigo ";  
204 - $colunas[] = "regiao.{$regiao['colunanomeregiao']} AS nome";  
205 - //$colunas[] = "regiao".$regiao['identificador'];  
206 - $tabelaAnt = "regiao";  
207 -  
208 - for($i=0;$i<$n;$i++){  
209 - $r = $m->listaTipoRegiao($caminho[$i]);  
210 -  
211 - array_push($filhosDaRegiao[$caminho[$i]],$regiao["codigo_tipo_regiao"]);  
212 -  
213 - $colunas[] = "j$i.{$r['colunanomeregiao']} AS j$i{$r['colunanomeregiao']}";  
214 - $colunas[] = "j$i.{$r['identificador']} AS j$i{$r['identificador']}";  
215 - $sql .= "INNER JOIN {$r['esquemadb']}.{$r['tabela']}  
216 - AS j$i ON j$i.{$r['identificador']}::text = {$tabelaAnt}.{$r['identificador']}::text  
217 - ";  
218 - $tabelaAnt = "j".$i; 206 + $unico = "true";
  207 + for($j=0;$j<=$n;$j++){
  208 + $colunas = array();
  209 + $sql = "SELECT __COLUNAS__ FROM {$regiaoAtual['esquemadb']}.{$regiaoAtual['tabela']} as a$j ";
  210 + $colunas[] = "a$j.{$regiaoAtual['identificador']}::text as codigo ";
  211 + //inclui campos vazios na sequencia de campos
  212 + for($k=0;$k<$j;$k++){
  213 + $colunas[] = "''";
  214 + $colunas[] = "''";
  215 + }
  216 +
  217 + $colunas[] = "a$j.{$regiaoAtual['identificador']}::text AS {$regiaoAtual['identificador']} ";
  218 + $colunas[] = "a$j.{$regiaoAtual['colunanomeregiao']}::text AS {$regiaoAtual['colunanomeregiao']} ";
  219 +
  220 + for($i=$j;$i<$n;$i++){
  221 + $r = $m->listaTipoRegiao($caminho[$i]);
  222 +
  223 + if(count($colunas) > ($j + 4)){
  224 + $colunas[] = "''::text AS {$r['identificador']} ";
  225 + $colunas[] = "''::text AS {$r['colunanomeregiao']} ";
  226 + }
  227 + else{
  228 + $colunas[] = "b$i.{$r['identificador']}::text AS {$r['identificador']} ";
  229 + $colunas[] = "b$i.{$r['colunanomeregiao']}::text AS {$r['colunanomeregiao']} ";
  230 + }
  231 + //descobre a coluna de ligacao da regiao
  232 + $agr = $m->listaAgregaRegiaoFilho($regiaoAtual['codigo_tipo_regiao'],$r['codigo_tipo_regiao']);
  233 +
  234 + $sql .= " JOIN {$r['esquemadb']}.{$r['tabela']} as b$i ON
  235 + a$j.{$agr['colunaligacao_regiaopai']}::text = b$i.{$r['identificador']}::text
  236 + ";
  237 + }
  238 +
  239 + $colunas = implode($colunas,",");
  240 + $sql = str_replace("__COLUNAS__",$colunas,$sql);
  241 + //inclui a selecao se houver
  242 + if(!empty($selecaoRegiao[$regiaoAtual["codigo_tipo_regiao"]])){
  243 + $rs = $selecaoRegiao[$regiaoAtual["codigo_tipo_regiao"]];
  244 + }
  245 + $pos = strpos($sql, "regiao.".$rs["item"]." ");
  246 + if($rs != "" || !$pos === false){
  247 + $sql .= " WHERE regiao.".$rs["sql"];
  248 + }
  249 + $sqls[] = $sql;
  250 +
219 $niveis1[] = " 251 $niveis1[] = "
220 - <Level name='".converte($r["nome_tipo_regiao"])."'  
221 - column='j$i{$r['identificador']}'  
222 - nameColumn='j$i{$r["colunanomeregiao"]}' uniqueMembers='false'/> 252 + <Level name='".converte($regiaoAtual["nome_tipo_regiao"])."' column='".$regiaoAtual["colunanomeregiao"]."' nameColumn='".$regiaoAtual["colunanomeregiao"]."'
  253 + uniqueMembers='".$unico."' />
223 "; 254 ";
224 - $niveis2[] = "  
225 - <Level name='".converte($r["nome_tipo_regiao"])." - GeoCod #{$caminho[$i]}'  
226 - column='j$i{$r['identificador']}'  
227 - nameColumn='j$i{$r["identificador"]}' uniqueMembers='false'/> 255 + $niveis2[] = "
  256 + <Level name='".$regiaoAtual["nome_tipo_regiao"]." - GeoCod #".$regiaoAtual["codigo_tipo_regiao"]."' column='".$regiaoAtual["identificador"]."' nameColumn='".$regiaoAtual["colunanomeregiao"]."'
  257 + uniqueMembers='".$unico."' />
228 "; 258 ";
  259 + $unico = "false";
  260 + $regiaoAtual = $m->listaTipoRegiao($caminho[$j]);
229 } 261 }
230 - $niveis1[] = "  
231 - <Level name='".converte($regiao["nome_tipo_regiao"])."'  
232 - column='codigo'  
233 - nameColumn='nome' uniqueMembers='true' >  
234 - </Level>  
235 - ";  
236 - $niveis2[] = "  
237 - <Level name='".converte($regiao["nome_tipo_regiao"])." - GeoCod #{$regiao["codigo_tipo_regiao"]}'  
238 - column='codigo'  
239 - nameColumn='codigo' uniqueMembers='true' />  
240 - ";  
241 - //verifica outras colunas  
242 - $vis = $regiao['colunasvisiveis'];  
243 - if($vis != ""){  
244 - $vis = str_replace(";",",",$vis);  
245 - $vis = str_replace(",,",",",$vis);  
246 - $vis = explode(",",$vis);  
247 - foreach($vis as $v){  
248 - $colunas[] = "regiao.".$v." as ".$v;  
249 - }  
250 - $colunas = array_unique($colunas);  
251 - }  
252 - $colunas = implode($colunas,",");  
253 - $sql = str_replace("__COLUNAS__",$colunas,$sql);  
254 - //inclui a selecao se houver  
255 - if(!empty($selecaoRegiao[$regiao["codigo_tipo_regiao"]]))  
256 - $rs = $selecaoRegiao[$regiao["codigo_tipo_regiao"]];  
257 - $pos = strpos($sql, "regiao.".$rs["item"]." ");  
258 - if($rs != "" || !$pos === false){  
259 - $sql .= " WHERE regiao.".$rs["sql"];  
260 - }  
261 - 262 + //echo "<pre>";echo implode("UNION\n\n",$sqls);exit;
  263 +
262 $xml1 .= " 264 $xml1 .= "
263 - <view alias='view_codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."' ><SQL dialect='generic' >$sql</SQL></view> 265 + <view alias='view_codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."' ><SQL dialect='generic' >".implode(" UNION ",$sqls)."</SQL></view>
264 "; 266 ";
265 $xml2 .= " 267 $xml2 .= "
266 - <view alias='view_codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."_GeoCod' ><SQL dialect='generic' >$sql</SQL></view> 268 + <view alias='view_codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."_GeoCod' ><SQL dialect='generic' >".implode(" UNION ",$sqls)."</SQL></view>
267 "; 269 ";
  270 + $niveis1 = array_reverse($niveis1);
  271 + $niveis2 = array_reverse($niveis2);
268 $xml1 .= implode(" ",$niveis1); 272 $xml1 .= implode(" ",$niveis1);
269 $xml2 .= implode(" ",$niveis2); 273 $xml2 .= implode(" ",$niveis2);
270 $xml1 .= " 274 $xml1 .= "
@@ -276,6 +280,8 @@ if(empty($_GET[&quot;xmlesquema&quot;])){ @@ -276,6 +280,8 @@ if(empty($_GET[&quot;xmlesquema&quot;])){
276 </Dimension> 280 </Dimension>
277 "; 281 ";
278 } 282 }
  283 + //echo header("Content-type: application/xml");
  284 + //echo $xml.$xml1.$xml2;exit;
279 //echo "<pre>";var_dump($filhosDaRegiao);exit; 285 //echo "<pre>";var_dump($filhosDaRegiao);exit;
280 //outras dimensoes definidas nos parametros e que nao sejam do tipo tempo 286 //outras dimensoes definidas nos parametros e que nao sejam do tipo tempo
281 $parametros = $m->listaTodosParametros(); 287 $parametros = $m->listaTodosParametros();
@@ -300,7 +306,7 @@ if(empty($_GET[&quot;xmlesquema&quot;])){ @@ -300,7 +306,7 @@ if(empty($_GET[&quot;xmlesquema&quot;])){
300 <Hierarchy hasAll='true' primaryKey='codigo'> 306 <Hierarchy hasAll='true' primaryKey='codigo'>
301 "; 307 ";
302 //cria uma view juntando as tabelas da hierarquia de regioes 308 //cria uma view juntando as tabelas da hierarquia de regioes
303 - $colunas = "dim.{$d['coluna']} as codigo, "; 309 + $colunas = "dim.{$d['coluna']}::text as codigo, ";
304 $colunas .= "dim.{$d['coluna']} AS nome"; 310 $colunas .= "dim.{$d['coluna']} AS nome";
305 $sql = "SELECT {$colunas} FROM ".$d['esquemadb'].".".$d['tabela']." as dim group by codigo"; 311 $sql = "SELECT {$colunas} FROM ".$d['esquemadb'].".".$d['tabela']." as dim group by codigo";
306 $xml3 .= "<view alias='".$k."' ><SQL dialect='generic' >$sql</SQL></view>"; 312 $xml3 .= "<view alias='".$k."' ><SQL dialect='generic' >$sql</SQL></view>";
@@ -382,7 +388,7 @@ if(empty($_GET[&quot;xmlesquema&quot;])){ @@ -382,7 +388,7 @@ if(empty($_GET[&quot;xmlesquema&quot;])){
382 if($parametro["tipo"] > 5 || $parametro["tipo"] == 0){ 388 if($parametro["tipo"] > 5 || $parametro["tipo"] == 0){
383 $outrosParametros[] = $k; 389 $outrosParametros[] = $k;
384 $VirtualCubeDimension[] = "<VirtualCubeDimension name='{$k}' />"; 390 $VirtualCubeDimension[] = "<VirtualCubeDimension name='{$k}' />";
385 - $u = "<DimensionUsage foreignKey='{$parametro["coluna"]}' name='nome' source='{$k}'/>"; 391 + $u = "<DimensionUsage foreignKey='codigo' name='nome' source='{$k}'/>";
386 $dimEnsoes[] = $u; 392 $dimEnsoes[] = $u;
387 array_push($VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]],"<VirtualCubeDimension name='{$k}' />"); 393 array_push($VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]],"<VirtualCubeDimension name='{$k}' />");
388 } 394 }
@@ -392,7 +398,7 @@ if(empty($_GET[&quot;xmlesquema&quot;])){ @@ -392,7 +398,7 @@ if(empty($_GET[&quot;xmlesquema&quot;])){
392 $xml .= " 398 $xml .= "
393 <Cube cache='false' name='Tabela: {$c["esquemadb"]}{$c["tabela"]}'>"; 399 <Cube cache='false' name='Tabela: {$c["esquemadb"]}{$c["tabela"]}'>";
394 $incluirChaves = array("*"); 400 $incluirChaves = array("*");
395 - 401 +
396 if(count($parComposto) > 0){ 402 if(count($parComposto) > 0){
397 //$sql = "select *,".implode("||'-'||",$parComposto)."::text as ".implode("_",$parComposto)."_ from {$c["esquemadb"]}.{$c["tabela"]}"; 403 //$sql = "select *,".implode("||'-'||",$parComposto)."::text as ".implode("_",$parComposto)."_ from {$c["esquemadb"]}.{$c["tabela"]}";
398 $incluirChaves[] = implode("||'-'||",$parComposto)."::text as ".implode("_",$parComposto)."_"; 404 $incluirChaves[] = implode("||'-'||",$parComposto)."::text as ".implode("_",$parComposto)."_";
@@ -402,17 +408,16 @@ if(empty($_GET[&quot;xmlesquema&quot;])){ @@ -402,17 +408,16 @@ if(empty($_GET[&quot;xmlesquema&quot;])){
402 //$incluirChaves[] = $o."::text as ".$o."_"; 408 //$incluirChaves[] = $o."::text as ".$o."_";
403 } 409 }
404 } 410 }
405 -  
406 - $sql = "select ".implode(",",$incluirChaves)." from {$c["esquemadb"]}.{$c["tabela"]}";  
407 - 411 +
  412 + $sql = "select ".implode(",",$incluirChaves).",{$c["colunaidgeo"]}::text as codigodim from {$c["esquemadb"]}.{$c["tabela"]}";
408 $xml .= " 413 $xml .= "
409 <view alias='view_{$c["esquemadb"]}{$c["tabela"]}' ><SQL dialect='generic' >$sql</SQL></view> 414 <view alias='view_{$c["esquemadb"]}{$c["tabela"]}' ><SQL dialect='generic' >$sql</SQL></view>
410 - <DimensionUsage foreignKey='".$c["colunaidgeo"]."' name='codigo_tipo_regiao_".$c["codigo_tipo_regiao"]."' source='codigo_tipo_regiao_".$c["codigo_tipo_regiao"]."'/>  
411 - <DimensionUsage foreignKey='".$c["colunaidgeo"]."' name='codigo_tipo_regiao_".$c["codigo_tipo_regiao"]."_geocod' source='codigo_tipo_regiao_".$c["codigo_tipo_regiao"]."_geocod'/> 415 + <DimensionUsage foreignKey='codigodim' name='codigo_tipo_regiao_".$c["codigo_tipo_regiao"]."' source='codigo_tipo_regiao_".$c["codigo_tipo_regiao"]."'/>
  416 + <DimensionUsage foreignKey='codigodim' name='codigo_tipo_regiao_".$c["codigo_tipo_regiao"]."_geocod' source='codigo_tipo_regiao_".$c["codigo_tipo_regiao"]."_geocod'/>
412 "; 417 ";
413 - 418 +
414 $xml .= implode(" ",array_unique($dimEnsoes)); 419 $xml .= implode(" ",array_unique($dimEnsoes));
415 - 420 +
416 //inclui cada elemento em medida 421 //inclui cada elemento em medida
417 foreach($tb as $medida){ 422 foreach($tb as $medida){
418 $agregador = "sum"; 423 $agregador = "sum";
@@ -447,7 +452,7 @@ if(empty($_GET[&quot;xmlesquema&quot;])){ @@ -447,7 +452,7 @@ if(empty($_GET[&quot;xmlesquema&quot;])){
447 //$filhosDaRegiao = array(); 452 //$filhosDaRegiao = array();
448 //$VirtualCubeDimensionDaRegiao = array(); 453 //$VirtualCubeDimensionDaRegiao = array();
449 //$VirtualCubeMeasureDaRegiao = array(); 454 //$VirtualCubeMeasureDaRegiao = array();
450 - 455 +
451 foreach($regioes as $regiao){ 456 foreach($regioes as $regiao){
452 //inclui os parametros para a regiao de acordo com os filhos que possui 457 //inclui os parametros para a regiao de acordo com os filhos que possui
453 $d = $VirtualCubeDimensionDaRegiao[$regiao["codigo_tipo_regiao"]]; 458 $d = $VirtualCubeDimensionDaRegiao[$regiao["codigo_tipo_regiao"]];
@@ -466,7 +471,7 @@ if(empty($_GET[&quot;xmlesquema&quot;])){ @@ -466,7 +471,7 @@ if(empty($_GET[&quot;xmlesquema&quot;])){
466 $xml .= "</Schema>"; 471 $xml .= "</Schema>";
467 error_reporting(0); 472 error_reporting(0);
468 ob_end_clean(); 473 ob_end_clean();
469 - 474 +
470 if($_GET["output"] == "xml"){ 475 if($_GET["output"] == "xml"){
471 echo header("Content-type: application/xml"); 476 echo header("Content-type: application/xml");
472 echo $xml;exit; 477 echo $xml;exit;