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 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[&quot;xmlesquema&quot;])){
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[&quot;xmlesquema&quot;])){
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[&quot;xmlesquema&quot;])){
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[&quot;xmlesquema&quot;])){
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[&quot;xmlesquema&quot;])){
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[&quot;xmlesquema&quot;])){
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[&quot;xmlesquema&quot;])){
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[&quot;xmlesquema&quot;])){
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[&quot;xmlesquema&quot;])){
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;
... ...