Commit 043430dce85113ea14e761f4beb50981778f39b8
1 parent
bb13277c
Exists in
master
and in
7 other branches
-
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 | 74 | |
| 75 | 75 | if(empty($_GET["xmlesquema"])){ |
| 76 | 76 | $m = new Metaestat(); |
| 77 | - | |
| 77 | + | |
| 78 | 78 | // |
| 79 | 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 | 138 | $item = ""; |
| 139 | 139 | $registros = ""; |
| 140 | 140 | //echo "<pre>";var_dump($regioes);exit; |
| 141 | - | |
| 141 | + | |
| 142 | 142 | $xml = "<Schema name='i3Geo Metaestat'>"; |
| 143 | 143 | //cria as dimensoes de tipo temporal |
| 144 | 144 | if(empty($saikuConfigDataSource['tabelaDimensaoTempo'])){ |
| ... | ... | @@ -172,7 +172,7 @@ if(empty($_GET["xmlesquema"])){ |
| 172 | 172 | //dimensoes geograficas |
| 173 | 173 | //as dimensoes sao duplicadas |
| 174 | 174 | //uma delas contem o geocodigo que permite a geracao do mapa |
| 175 | - | |
| 175 | + | |
| 176 | 176 | //guarda as regioes filhas de uma determinada regiao (chave) |
| 177 | 177 | $filhosDaRegiao = array(); |
| 178 | 178 | $VirtualCubeDimensionDaRegiao = array(); |
| ... | ... | @@ -184,87 +184,91 @@ if(empty($_GET["xmlesquema"])){ |
| 184 | 184 | } |
| 185 | 185 | $xml1 = ""; |
| 186 | 186 | $xml2 = ""; |
| 187 | + | |
| 187 | 188 | foreach($regioes as $regiao){ |
| 188 | - $caminho = $m->hierarquiaPath($regiao["codigo_tipo_regiao"]); | |
| 189 | + $sqls = array(); | |
| 189 | 190 | $xml1 .= " |
| 190 | 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 | 194 | $xml2 .= " |
| 194 | 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 | 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 | 202 | $n = count($caminho); |
| 199 | - $colunas = array(); | |
| 203 | + $regiaoAtual = $regiao; | |
| 200 | 204 | $niveis1 = array(); |
| 201 | 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 | 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 | 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 | 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 | 272 | $xml1 .= implode(" ",$niveis1); |
| 269 | 273 | $xml2 .= implode(" ",$niveis2); |
| 270 | 274 | $xml1 .= " |
| ... | ... | @@ -276,6 +280,8 @@ if(empty($_GET["xmlesquema"])){ |
| 276 | 280 | </Dimension> |
| 277 | 281 | "; |
| 278 | 282 | } |
| 283 | + //echo header("Content-type: application/xml"); | |
| 284 | + //echo $xml.$xml1.$xml2;exit; | |
| 279 | 285 | //echo "<pre>";var_dump($filhosDaRegiao);exit; |
| 280 | 286 | //outras dimensoes definidas nos parametros e que nao sejam do tipo tempo |
| 281 | 287 | $parametros = $m->listaTodosParametros(); |
| ... | ... | @@ -300,7 +306,7 @@ if(empty($_GET["xmlesquema"])){ |
| 300 | 306 | <Hierarchy hasAll='true' primaryKey='codigo'> |
| 301 | 307 | "; |
| 302 | 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 | 310 | $colunas .= "dim.{$d['coluna']} AS nome"; |
| 305 | 311 | $sql = "SELECT {$colunas} FROM ".$d['esquemadb'].".".$d['tabela']." as dim group by codigo"; |
| 306 | 312 | $xml3 .= "<view alias='".$k."' ><SQL dialect='generic' >$sql</SQL></view>"; |
| ... | ... | @@ -382,7 +388,7 @@ if(empty($_GET["xmlesquema"])){ |
| 382 | 388 | if($parametro["tipo"] > 5 || $parametro["tipo"] == 0){ |
| 383 | 389 | $outrosParametros[] = $k; |
| 384 | 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 | 392 | $dimEnsoes[] = $u; |
| 387 | 393 | array_push($VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]],"<VirtualCubeDimension name='{$k}' />"); |
| 388 | 394 | } |
| ... | ... | @@ -392,7 +398,7 @@ if(empty($_GET["xmlesquema"])){ |
| 392 | 398 | $xml .= " |
| 393 | 399 | <Cube cache='false' name='Tabela: {$c["esquemadb"]}{$c["tabela"]}'>"; |
| 394 | 400 | $incluirChaves = array("*"); |
| 395 | - | |
| 401 | + | |
| 396 | 402 | if(count($parComposto) > 0){ |
| 397 | 403 | //$sql = "select *,".implode("||'-'||",$parComposto)."::text as ".implode("_",$parComposto)."_ from {$c["esquemadb"]}.{$c["tabela"]}"; |
| 398 | 404 | $incluirChaves[] = implode("||'-'||",$parComposto)."::text as ".implode("_",$parComposto)."_"; |
| ... | ... | @@ -402,17 +408,16 @@ if(empty($_GET["xmlesquema"])){ |
| 402 | 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 | 413 | $xml .= " |
| 409 | 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 | 419 | $xml .= implode(" ",array_unique($dimEnsoes)); |
| 415 | - | |
| 420 | + | |
| 416 | 421 | //inclui cada elemento em medida |
| 417 | 422 | foreach($tb as $medida){ |
| 418 | 423 | $agregador = "sum"; |
| ... | ... | @@ -447,7 +452,7 @@ if(empty($_GET["xmlesquema"])){ |
| 447 | 452 | //$filhosDaRegiao = array(); |
| 448 | 453 | //$VirtualCubeDimensionDaRegiao = array(); |
| 449 | 454 | //$VirtualCubeMeasureDaRegiao = array(); |
| 450 | - | |
| 455 | + | |
| 451 | 456 | foreach($regioes as $regiao){ |
| 452 | 457 | //inclui os parametros para a regiao de acordo com os filhos que possui |
| 453 | 458 | $d = $VirtualCubeDimensionDaRegiao[$regiao["codigo_tipo_regiao"]]; |
| ... | ... | @@ -466,7 +471,7 @@ if(empty($_GET["xmlesquema"])){ |
| 466 | 471 | $xml .= "</Schema>"; |
| 467 | 472 | error_reporting(0); |
| 468 | 473 | ob_end_clean(); |
| 469 | - | |
| 474 | + | |
| 470 | 475 | if($_GET["output"] == "xml"){ |
| 471 | 476 | echo header("Content-type: application/xml"); |
| 472 | 477 | echo $xml;exit; | ... | ... |