From e8d6bbe27dfedc4dc2de8ac7c50837e4c6db054c Mon Sep 17 00:00:00 2001 From: Edmar Moretti Date: Thu, 23 Apr 2015 02:12:16 +0000 Subject: [PATCH] inclusão de cubos virtuais para cada variável --- ferramentas/saiku/esquemaxml.php | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------ ferramentas/saiku/testemondrian.xml | 729 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 2 files changed, 357 insertions(+), 496 deletions(-) diff --git a/ferramentas/saiku/esquemaxml.php b/ferramentas/saiku/esquemaxml.php index 1382980..16f45b5 100644 --- a/ferramentas/saiku/esquemaxml.php +++ b/ferramentas/saiku/esquemaxml.php @@ -7,9 +7,9 @@ //utilize $regiao para obter o xml de uma so regiao // /** -http://localhost/i3geo/ferramentas/saiku/esquemaxml.php?output=&xmlesquema=http://localhost/i3geo/ferramentas/saiku/testemondrian.xml&output=xml -http://localhost/i3geo/ferramentas/saiku/esquemaxml.php?xmlesquema=&output=xml®iao=1 -*/ + http://localhost/i3geo/ferramentas/saiku/esquemaxml.php?output=xml + http://localhost/i3geo/ferramentas/saiku/esquemaxml.php?xmlesquema=&output=xml®iao=1 + */ // //quando o saiku e iniciado de fora do i3geo, e necessario inicializar um mapfile para uso como base dos mapas @@ -90,9 +90,14 @@ $VirtualCubeDimensionDaRegiao = array(); $VirtualCubeMeasureDaRegiao = array(); $nivelDaDimensao = array(); +$VirtualCubeDimensionDaMedida = array(); +$CubosPorMedida = array(); + $dimRegioes = dimensoesGeo(); -$xmlRegioes = array_map(function($element){return $element['xml'];}, $dimRegioes); +$xmlRegioes = array_map(function($element){ + return $element['xml']; +}, $dimRegioes); $xmlRegioes = implode(" ",$xmlRegioes); // @@ -116,8 +121,10 @@ $xmlCuboTodas = cuboTodas(); // $xmlCuboRegioes = cuboRegioes(); +$xmlCuboVariaveis = cuboVariaveis(); + $xml = ""; -$xml .= $xmlTempo.$xmlRegioes.$xmlOutrasDim.$xmlDimensoesTabelas.$xmlCuboRegioes.$xmlCuboTodas; +$xml .= $xmlTempo.$xmlRegioes.$xmlOutrasDim.$xmlDimensoesTabelas.$xmlCuboRegioes.$xmlCuboTodas.$xmlCuboVariaveis; $xml .= ""; //xml pronto!!!!! @@ -298,8 +305,8 @@ function pegaSelecaoRegioes(){ } } return array( - "selecaoRegiao"=>$selecaoRegiao, - "codigo_tipo_regiao"=>$codigo_tipo_regiao + "selecaoRegiao"=>$selecaoRegiao, + "codigo_tipo_regiao"=>$codigo_tipo_regiao ); } } @@ -360,7 +367,7 @@ function sqlDasRegioes($regiao,$caminho,$chavesRegiao){ $nomesColunas[] = " nome".$regiaoJoin["codigo_tipo_regiao"]; $juncoes .= " JOIN {$regiaoJoin['esquemadb']}.{$regiaoJoin['tabela']} as $tabelaAtual ON - $tabelaAtual.$colunaLigacaoAtual::text = $tabelaAnterior.$colunaLigacaoAnterior::text + $tabelaAtual.$colunaLigacaoAtual::text = $tabelaAnterior.$colunaLigacaoAnterior::text "; $codRegioes[] = $regiaoJoin["codigo_tipo_regiao"]; } @@ -403,12 +410,12 @@ function dimensoesGeo(){ $sqls = array(); $temp = converte($regiao["nome_tipo_regiao"]); $xml1 = " - - + + "; $xml2 = " - - + + "; // //cria uma view juntando as tabelas da hierarquia de regioes @@ -433,13 +440,13 @@ function dimensoesGeo(){ $temp = converte($regiao["nome_tipo_regiao"]); $niveisXml1[] = " - - "; + + "; $niveisXml2[] = " - - "; + + "; //juncoes while($caminho){ $a = array_shift($caminho); @@ -482,14 +489,14 @@ function dimensoesGeo(){ $sqlreg = " WHERE tabela{$regiao["codigo_tipo_regiao"]}.".$rs["sql"]; } $xml1 .= " - - ".$dadosSelect["select"].$sqlreg." - + + ".$dadosSelect["select"].$sqlreg." + "; $xml2 .= " - - ".$dadosSelect["select"].$sqlreg." - + + ".$dadosSelect["select"].$sqlreg." + "; $niveisXml1 = array_reverse($niveisXml1); $niveisXml2 = array_reverse($niveisXml2); @@ -553,7 +560,7 @@ function dimensoesOutras(){ return $xml3; } function dimensoesTabelas(){ - global $nivelDaDimensao,$dimRegioes, $filhosDaRegiao, $m, $VirtualCubeDimension, $VirtualCubeMeasure, $chavesRegiao, $medidas, $codigo_tipo_regiao, $VirtualCubeDimensionDaRegiao, $VirtualCubeMeasureDaRegiao; + global $VirtualCubeDimensionDaMedida, $CubosPorMedida, $nivelDaDimensao, $dimRegioes, $filhosDaRegiao, $m, $VirtualCubeDimension, $VirtualCubeMeasure, $chavesRegiao, $medidas, $codigo_tipo_regiao, $VirtualCubeDimensionDaRegiao, $VirtualCubeMeasureDaRegiao; $xml = ""; $tbs = array(); @@ -567,6 +574,8 @@ function dimensoesTabelas(){ else{ array_push($tbs[$k],$medida); } + $CubosPorMedida[$medida["nome_variavel"]] = array(); + $VirtualCubeDimensionDaMedida[$medida["nome_variavel"]] = array(); } } //monta os cubos para cada esquema.tabela diferente @@ -581,13 +590,24 @@ function dimensoesTabelas(){ "; array_push( - $VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]], - "" - ); + $VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]], + "" + ); array_push( - $VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]], - "" - ); + $VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]], + "" + ); + + array_push( + $VirtualCubeDimensionDaMedida[$c["nome_variavel"]], + "" + ); + array_push( + $VirtualCubeDimensionDaMedida[$c["nome_variavel"]], + "" + ); + + //verifica as dimensoes do tipo tempo $dimEnsoes = array(); @@ -629,6 +649,7 @@ function dimensoesTabelas(){ //$dimEnsoes[] = ''; $xml .= ""; + $incluirChaves = array("tabelamedida{$c["id_medida_variavel"]}.*"); //colunas quando o nome da coluna com os valores for vazia foreach($tb as $mdd){ @@ -651,7 +672,7 @@ function dimensoesTabelas(){ } $r = $chavesRegiao[$c["codigo_tipo_regiao"]]; $sql = " - select ".implode(",",$incluirChaves).", tabelamedida{$c["id_medida_variavel"]}.{$c["colunaidgeo"]}::text as codigoreg + select ".implode(",",$incluirChaves).", tabelamedida{$c["id_medida_variavel"]}.{$c["colunaidgeo"]}::text as codigoreg "; if(count($dimRegioes[$c["codigo_tipo_regiao"]]["colunas"]) > 0){ $sql .= ",".implode(",",$dimRegioes[$c["codigo_tipo_regiao"]]["colunas"]); @@ -659,38 +680,38 @@ function dimensoesTabelas(){ } $sql .= " - from {$c["esquemadb"]}.{$c["tabela"]} as tabelamedida{$c["id_medida_variavel"]} - JOIN {$r["esquemadb"]}.{$r["tabela"]} as tabela{$r["codigo_tipo_regiao"]} - ON tabela{$r["codigo_tipo_regiao"]}.{$r["identificador"]}::text = tabelamedida{$c["id_medida_variavel"]}.{$c["colunaidgeo"]}::text - "; + from {$c["esquemadb"]}.{$c["tabela"]} as tabelamedida{$c["id_medida_variavel"]} + JOIN {$r["esquemadb"]}.{$r["tabela"]} as tabela{$r["codigo_tipo_regiao"]} + ON tabela{$r["codigo_tipo_regiao"]}.{$r["identificador"]}::text = tabelamedida{$c["id_medida_variavel"]}.{$c["colunaidgeo"]}::text + "; $sql .= $dimRegioes[$c["codigo_tipo_regiao"]]["juncoes"]; $f = array(); foreach($tb as $mdd){ if($mdd["filtro"] != ""){ $f[] = str_replace('"',"'",$mdd["filtro"]); } - } + } if(count($f) > 0){ $sql .= " WHERE ".implode(" OR ",$f); } $xml .= " - $sql + $sql "; //dimensoes vinculadas $temp = $dimRegioes[$c["codigo_tipo_regiao"]]["codRegioes"]; $temp[] = $c["codigo_tipo_regiao"]; foreach($temp as $cod){ $xml .= " - - + + "; } //inclui as dimensoes filhas foreach($filhosDaRegiao[$c["codigo_tipo_regiao"]] as $fr){ $xml .= " - - + + "; } @@ -719,6 +740,10 @@ function dimensoesTabelas(){ "; $VirtualCubeMeasure[] = $u; array_push($VirtualCubeMeasureDaRegiao[$c["codigo_tipo_regiao"]],$u); + //verifica em qual variavel entra + // + $u = ""; + array_push($CubosPorMedida[$c["nome_variavel"]],$u); } $xml .= " @@ -755,4 +780,19 @@ function cuboRegioes(){ } return $xml; } + +function cuboVariaveis(){ + global $CubosPorMedida, $VirtualCubeDimensionDaMedida; + //var_dump($VirtualCubeDimensionDaMedida);exit; + $xml = ""; + $chaves = array_keys($CubosPorMedida); + foreach ($chaves as $c){ + $xml .= ''; + $xml .= ''; + $xml .= implode(" ",$VirtualCubeDimensionDaMedida[$c]); + $xml .= implode(" ",$CubosPorMedida[$c]); + $xml .= ''; + } + return $xml; +} ?> diff --git a/ferramentas/saiku/testemondrian.xml b/ferramentas/saiku/testemondrian.xml index 1842720..4d855c2 100644 --- a/ferramentas/saiku/testemondrian.xml +++ b/ferramentas/saiku/testemondrian.xml @@ -1,481 +1,302 @@ - - - select nu_ano from - i3geo_metaestat.dim_tempo group - by nu_ano order by nu_ano - - - - + + select nu_ano from i3geo_metaestat.dim_tempo group by nu_ano order by nu_ano + + - - - select - nu_ano::text,nu_mes::text,ds_mes_abreviado as - mes,COALESCE - (nu_ano::text||'-'||nu_mes::text,nu_ano::text) as - nu_anomes from - i3geo_metaestat.dim_tempo group by - nu_ano,nu_mes,mes,nu_anomes - order by nu_ano,nu_mes - - - - - + + select nu_ano::text,nu_mes::text,ds_mes_abreviado as mes,COALESCE (nu_ano::text||'-'||nu_mes::text,nu_ano::text) as nu_anomes from i3geo_metaestat.dim_tempo group by nu_ano,nu_mes,mes,nu_anomes order by nu_ano,nu_mes + + + - - - select - nu_ano::text,nu_mes::text,ds_mes_abreviado as - mes,COALESCE - (nu_ano::text||'-'||nu_mes::text,nu_ano::text) as - nu_anomes from - i3geo_metaestat.dim_tempo group by - nu_ano,nu_mes,mes,nu_anomes - order by nu_ano,nu_mes - + + select nu_ano::text,nu_mes::text,ds_mes_abreviado as mes,COALESCE (nu_ano::text||'-'||nu_mes::text,nu_ano::text) as nu_anomes from i3geo_metaestat.dim_tempo group by nu_ano,nu_mes,mes,nu_anomes order by nu_ano,nu_mes + + + + + + + + + + SELECT tabela1.co_bairro::text as codigo, tabela1.co_bairro::text AS codigo1,tabela1.no_bairro::text AS nome1,tabela2.co_municipio::text AS codigo2,tabela2.no_cidade::text AS nome2,tabela3.co_uf::text AS codigo3,tabela3.no_uf::text AS nome3 FROM i3geo_metaestat.bairros as tabela1 + JOIN i3geo_metaestat.municipios as tabela2 ON + tabela2.co_municipio::text = tabela1.co_municipio::text + JOIN i3geo_metaestat.uf as tabela3 ON + tabela3.co_uf::text = tabela2.co_uf::text + - - + + + + + + + - - - - - - - SELECT regiao.co_bairro as codigo - ,regiao.no_bairro - AS nome,j0.no_cidade AS - j0no_cidade,j0.co_municipio AS - j0co_municipio,j1.no_uf AS - j1no_uf,j1.co_uf AS - j1co_uf,regiao.co_bairro as - co_bairro,regiao.no_bairro as - no_bairro,regiao.no_distr as - no_distr,regiao.no_municip as - no_municip FROM - i3geo_metaestat.bairros AS regiao INNER JOIN - i3geo_metaestat.municipios - AS j0 ON j0.co_municipio::text = - regiao.co_municipio::text - INNER JOIN i3geo_metaestat.uf - AS j1 ON - j1.co_uf::text = j0.co_uf::text - + + + + + + + SELECT tabela1.co_bairro::text as codigo, tabela1.co_bairro::text AS codigo1,tabela1.no_bairro::text AS nome1,tabela2.co_municipio::text AS codigo2,tabela2.no_cidade::text AS nome2,tabela3.co_uf::text AS codigo3,tabela3.no_uf::text AS nome3 FROM i3geo_metaestat.bairros as tabela1 + JOIN i3geo_metaestat.municipios as tabela2 ON + tabela2.co_municipio::text = tabela1.co_municipio::text + JOIN i3geo_metaestat.uf as tabela3 ON + tabela3.co_uf::text = tabela2.co_uf::text + - - + + + + - - - - - - + - - - - - - - SELECT regiao.co_colegiado as codigo - ,regiao.no_colegiado AS nome FROM i3geo_metaestat.colegiado_gestao - AS regiao - + + + + + + + SELECT tabela47.co_colegiado::text as codigo, tabela47.co_colegiado::text AS codigo47,tabela47.no_colegiado::text AS nome47 FROM i3geo_metaestat.colegiado_gestao as tabela47 + - - - - + + + - - - - - - - SELECT - co_uf::text as codigo, - co_uf::text as co_uf, - no_uf::text - FROM - i3geo_metaestat.uf - - + + + + + + + SELECT tabela47.co_colegiado::text as codigo, tabela47.co_colegiado::text AS codigo47,tabela47.no_colegiado::text AS nome47 FROM i3geo_metaestat.colegiado_gestao as tabela47 + - + + + - - - /////////////////////////////////////////////////////////////////////////// - - - - - SELECT a0.co_municipio::text as codigo ,a0.co_municipio::text AS co_municipio , - a0.no_cidade::text AS no_cidade ,b0.co_uf::text AS co_uf ,b0.no_uf::text AS no_uf - FROM i3geo_metaestat.municipios as a0 JOIN i3geo_metaestat.uf as b0 ON -a0.co_uf::text = b0.co_uf::text -UNION -SELECT a1.co_uf::text as codigo ,'','',a1.co_uf::text AS co_uf ,a1.no_uf::text AS no_uf FROM i3geo_metaestat.uf as a1 - + + + + + + + SELECT tabela3.co_uf::text as codigo, tabela3.co_uf::text AS codigo3,tabela3.no_uf::text AS nome3 FROM i3geo_metaestat.uf as tabela3 + - - + + + - - - - - - - SELECT regiao.co_bairro as codigo - ,regiao.no_bairro - AS nome,j0.no_cidade AS - j0no_cidade,j0.co_municipio AS - j0co_municipio,j1.no_uf AS - j1no_uf,j1.co_uf AS - j1co_uf,regiao.co_bairro as - co_bairro,regiao.no_bairro as - no_bairro,regiao.no_distr as - no_distr,regiao.no_municip as - no_municip FROM - i3geo_metaestat.bairros AS regiao INNER JOIN - i3geo_metaestat.municipios - AS j0 ON j0.co_municipio::text = - regiao.co_municipio::text - INNER JOIN i3geo_metaestat.uf - AS j1 ON - j1.co_uf::text = j0.co_uf::text - + + + + + + + SELECT tabela3.co_uf::text as codigo, tabela3.co_uf::text AS codigo3,tabela3.no_uf::text AS nome3 FROM i3geo_metaestat.uf as tabela3 + - - - - - - - - - - - - - - - SELECT regiao.co_colegiado as codigo - ,regiao.no_colegiado AS nome FROM i3geo_metaestat.colegiado_gestao - AS regiao - - - - - + - - - - - - - SELECT regiao.co_uf as codigo - ,regiao.no_uf AS - nome,regiao.co_uf as co_uf,regiao.sg_uf as - sg_uf,regiao.no_uf as - no_uf,regiao.no_regiao as no_regiao FROM - i3geo_metaestat.uf AS - regiao - + + + + + + + SELECT tabela2.co_municipio::text as codigo, tabela2.co_municipio::text AS codigo2,tabela2.no_cidade::text AS nome2,tabela3.co_uf::text AS codigo3,tabela3.no_uf::text AS nome3 FROM i3geo_metaestat.municipios as tabela2 + JOIN i3geo_metaestat.uf as tabela3 ON + tabela3.co_uf::text = tabela2.co_uf::text + - - - + + + + + - - - - - - - SELECT regiao.co_municipio as codigo - ,regiao.no_cidade AS nome,j0.no_uf AS j0no_uf,j0.co_uf AS - j0co_uf,regiao.co_municipio as co_municipio,regiao.no_cidade as - no_cidade,regiao.co_uf as co_uf,regiao.sg_uf as - sg_uf,regiao.area_territorial as - area_territorial,regiao.nu_ano_instalacao as nu_ano_instalacao FROM - i3geo_metaestat.municipios AS regiao INNER JOIN i3geo_metaestat.uf - AS j0 ON j0.co_uf::text = regiao.co_uf::text - + + + + + + + SELECT tabela2.co_municipio::text as codigo, tabela2.co_municipio::text AS codigo2,tabela2.no_cidade::text AS nome2,tabela3.co_uf::text AS codigo3,tabela3.no_uf::text AS nome3 FROM i3geo_metaestat.municipios as tabela2 + JOIN i3geo_metaestat.uf as tabela3 ON + tabela3.co_uf::text = tabela2.co_uf::text + - - + + - - - - - - - - - - SELECT dim.descncm as codigo, dim.descncm - AS nome - FROM public.sfb_teste as dim group by codigo - - - + - - - - - select tb_indicador.*,ibge::text as codigodim,uf.co_uf::text as co_uf, ano::text as ano_ from - idsus.tb_indicador - JOIN i3geo_metaestat.municipios as municipio ON ibge::text = co_municipio::text - JOIN i3geo_metaestat.uf as uf ON municipio.co_uf::text = uf.co_uf::text - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - select a.*,a.co_municipio::text as codigo,uf.co_uf::text as co_uf, ano::text as ano_ - from - ibge.populacao_residente as a - JOIN i3geo_metaestat.municipios AS municipio ON municipio.co_municipio::text = a.co_municipio::text - JOIN i3geo_metaestat.uf as uf ON municipio.co_uf::text = uf.co_uf::text - - - - - - - - - - - - - - - - select *,ano_farm||'-'||mes_farm_pop::text - as - ano_farm_mes_farm_pop_ from dbacoes_saude.tb_farmacia_pop - - - - - - - - - - - - - - - select *,coduf::text as codigo,ano::text as ano_ from - public.sfb_teste - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + select tabelamedida12.*,ano::text as ano_, tabelamedida12.ibge::text as codigoreg + ,tabela2.co_municipio::text AS codigo2,tabela2.no_cidade::text AS nome2,tabela3.co_uf::text AS codigo3,tabela3.no_uf::text AS nome3 + from idsus.tb_indicador as tabelamedida12 + JOIN i3geo_metaestat.municipios as tabela2 + ON tabela2.co_municipio::text = tabelamedida12.ibge::text + JOIN i3geo_metaestat.uf as tabela3 ON + tabela3.co_uf::text = tabela2.co_uf::text + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select tabelamedida40.*,'1'::numeric as contagem40,ano_farm||'-'||mes_farm_pop::text as ano_farm_mes_farm_pop_, tabelamedida40.co_ibge::text as codigoreg + ,tabela2.co_municipio::text AS codigo2,tabela2.no_cidade::text AS nome2,tabela3.co_uf::text AS codigo3,tabela3.no_uf::text AS nome3 + from dbacoes_saude.tb_farmacia_pop as tabelamedida40 + JOIN i3geo_metaestat.municipios as tabela2 + ON tabela2.co_municipio::text = tabelamedida40.co_ibge::text + JOIN i3geo_metaestat.uf as tabela3 ON + tabela3.co_uf::text = tabela2.co_uf::text + + + + + + + + + + + + + + + + select tabelamedida25.*,ano::text as ano_, tabelamedida25.munic::text as codigoreg + ,tabela2.co_municipio::text AS codigo2,tabela2.no_cidade::text AS nome2,tabela3.co_uf::text AS codigo3,tabela3.no_uf::text AS nome3 + from ibge.populacao_residente as tabelamedida25 + JOIN i3geo_metaestat.municipios as tabela2 + ON tabela2.co_municipio::text = tabelamedida25.munic::text + JOIN i3geo_metaestat.uf as tabela3 ON + tabela3.co_uf::text = tabela2.co_uf::text + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file -- libgit2 0.21.2