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,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["xmlesquema"])){ | @@ -172,7 +172,7 @@ if(empty($_GET["xmlesquema"])){ | ||
| 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["xmlesquema"])){ | @@ -184,87 +184,91 @@ if(empty($_GET["xmlesquema"])){ | ||
| 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["xmlesquema"])){ | @@ -276,6 +280,8 @@ if(empty($_GET["xmlesquema"])){ | ||
| 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["xmlesquema"])){ | @@ -300,7 +306,7 @@ if(empty($_GET["xmlesquema"])){ | ||
| 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["xmlesquema"])){ | @@ -382,7 +388,7 @@ if(empty($_GET["xmlesquema"])){ | ||
| 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["xmlesquema"])){ | @@ -392,7 +398,7 @@ if(empty($_GET["xmlesquema"])){ | ||
| 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["xmlesquema"])){ | @@ -402,17 +408,16 @@ if(empty($_GET["xmlesquema"])){ | ||
| 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["xmlesquema"])){ | @@ -447,7 +452,7 @@ if(empty($_GET["xmlesquema"])){ | ||
| 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["xmlesquema"])){ | @@ -466,7 +471,7 @@ if(empty($_GET["xmlesquema"])){ | ||
| 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; |