Commit 2cadc60adda1b50c3f54021139390b335bc2537c

Authored by Edmar Moretti
1 parent b4dee948

Correção na geração do xml esquema para SAIKU

Showing 1 changed file with 656 additions and 650 deletions   Show diff stats
ferramentas/saiku/esquemaxml.php
@@ -2,24 +2,24 @@ @@ -2,24 +2,24 @@
2 include(dirname(__FILE__)."/../../classesphp/funcoes_gerais.php"); 2 include(dirname(__FILE__)."/../../classesphp/funcoes_gerais.php");
3 include(dirname(__FILE__)."/../../classesphp/classe_metaestatinfo.php"); 3 include(dirname(__FILE__)."/../../classesphp/classe_metaestatinfo.php");
4 if(!isset($dir_tmp)){ 4 if(!isset($dir_tmp)){
5 - include(dirname(__FILE__)."/../../ms_configura.php"); 5 + include(dirname(__FILE__)."/../../ms_configura.php");
6 } 6 }
7 if(isset($statusFerramentas) && $statusFerramentas["saiku"] != true){ 7 if(isset($statusFerramentas) && $statusFerramentas["saiku"] != true){
8 - exit; 8 + exit;
9 } 9 }
10 //testa pra ver se a requisicao esta vindo de um local autorizado 10 //testa pra ver se a requisicao esta vindo de um local autorizado
11 if(parse_url($saikuUrl)["host"] != gethostbyaddr($_SERVER['REMOTE_ADDR'])){ 11 if(parse_url($saikuUrl)["host"] != gethostbyaddr($_SERVER['REMOTE_ADDR'])){
12 - echo "Servidor requisitante nao permitido"; 12 + echo "Servidor requisitante nao permitido";
13 } 13 }
14 $urlXmlEsquema = ""; 14 $urlXmlEsquema = "";
15 /* 15 /*
16 if(empty($_GET["output"])){ 16 if(empty($_GET["output"])){
17 - $map_file = $_SESSION["map_file"];  
18 - $arquivoXmlEsquema = dirname($map_file)."/".str_replace(".txt","",$nomeConexao).".xml"; 17 + $map_file = $_SESSION["map_file"];
  18 + $arquivoXmlEsquema = dirname($map_file)."/".str_replace(".txt","",$nomeConexao).".xml";
19 } 19 }
20 gravaDataSource(); 20 gravaDataSource();
21 if(!empty($_GET["output"])){ 21 if(!empty($_GET["output"])){
22 - imprimeEsquema(); 22 + imprimeEsquema();
23 } 23 }
24 */ 24 */
25 $m = new MetaestatInfo(); 25 $m = new MetaestatInfo();
@@ -27,23 +27,23 @@ $m = new MetaestatInfo(); @@ -27,23 +27,23 @@ $m = new MetaestatInfo();
27 // 27 //
28 //obtem do mapfile em uso os layers que sao do sistema metaestat, sao regioes e que possuem selecao 28 //obtem do mapfile em uso os layers que sao do sistema metaestat, sao regioes e que possuem selecao
29 // 29 //
30 -/* 30 +
31 if(empty($_GET["regiao"])){ 31 if(empty($_GET["regiao"])){
32 - $s = pegaSelecaoRegioes();  
33 - $selecaoRegiao = $s["selecaoRegiao"];  
34 - $codigo_tipo_regiao = $s["codigo_tipo_regiao"]; 32 + $s = pegaSelecaoRegioes();
  33 + $selecaoRegiao = $s["selecaoRegiao"];
  34 + $codigo_tipo_regiao = $s["codigo_tipo_regiao"];
35 } 35 }
36 else{ 36 else{
37 - $codigo_tipo_regiao = $_GET["regiao"]; 37 + $codigo_tipo_regiao = $_GET["regiao"];
38 } 38 }
39 if($codigo_tipo_regiao == ""){ 39 if($codigo_tipo_regiao == ""){
40 - $regioes = $m->listaTipoRegiao(); 40 + $regioes = $m->listaTipoRegiao();
41 } 41 }
42 else{ 42 else{
43 - $regioes = array($m->listaTipoRegiao($codigo_tipo_regiao)); 43 + $regioes = array($m->listaTipoRegiao($codigo_tipo_regiao));
44 } 44 }
45 $s = ""; 45 $s = "";
46 -*/ 46 +
47 47
48 $medidas = $m->listaMedidaVariavel(); 48 $medidas = $m->listaMedidaVariavel();
49 49
@@ -53,7 +53,7 @@ $medidas = $m->listaMedidaVariavel(); @@ -53,7 +53,7 @@ $medidas = $m->listaMedidaVariavel();
53 $chavesRegiao = array(); 53 $chavesRegiao = array();
54 $todasAsRegioes = $m->listaTipoRegiao(); 54 $todasAsRegioes = $m->listaTipoRegiao();
55 foreach($todasAsRegioes as $R){ 55 foreach($todasAsRegioes as $R){
56 - $chavesRegiao[$R["codigo_tipo_regiao"]] = $R; 56 + $chavesRegiao[$R["codigo_tipo_regiao"]] = $R;
57 } 57 }
58 //inicia montagem do XML 58 //inicia montagem do XML
59 // 59 //
@@ -78,10 +78,9 @@ $CubosPorMedida = array(); @@ -78,10 +78,9 @@ $CubosPorMedida = array();
78 $dimRegioes = dimensoesGeo(); 78 $dimRegioes = dimensoesGeo();
79 79
80 $xmlRegioes = array_map(function($element){ 80 $xmlRegioes = array_map(function($element){
81 - return $element['xml']; 81 + return $element['xml'];
82 }, $dimRegioes); 82 }, $dimRegioes);
83 $xmlRegioes = implode(" ",$xmlRegioes); 83 $xmlRegioes = implode(" ",$xmlRegioes);
84 -  
85 // 84 //
86 //outras dimensoes definidas nos parametros e que nao sejam do tipo tempo 85 //outras dimensoes definidas nos parametros e que nao sejam do tipo tempo
87 // 86 //
@@ -93,7 +92,6 @@ $xmlOutrasDim = dimensoesOutras(); @@ -93,7 +92,6 @@ $xmlOutrasDim = dimensoesOutras();
93 $VirtualCubeDimension = array(); 92 $VirtualCubeDimension = array();
94 $VirtualCubeMeasure = array(); 93 $VirtualCubeMeasure = array();
95 $xmlDimensoesTabelas = dimensoesTabelas(); 94 $xmlDimensoesTabelas = dimensoesTabelas();
96 -  
97 // 95 //
98 //cubo geral, com todas as dimensoes e medidas 96 //cubo geral, com todas as dimensoes e medidas
99 // 97 //
@@ -101,7 +99,7 @@ $xmlCuboTodas = cuboTodas(); @@ -101,7 +99,7 @@ $xmlCuboTodas = cuboTodas();
101 // 99 //
102 //cubos por regiao 100 //cubos por regiao
103 // 101 //
104 -$xmlCuboRegioes = cuboRegioes(); 102 +$xmlCuboRegioes = cuboRegioes();//$VirtualCubeDimensionDaRegiao, $VirtualCubeMeasureDaRegiao
105 103
106 $xmlCuboVariaveis = cuboVariaveis(); 104 $xmlCuboVariaveis = cuboVariaveis();
107 105
@@ -119,7 +117,7 @@ ob_end_clean(); @@ -119,7 +117,7 @@ ob_end_clean();
119 // 117 //
120 /* 118 /*
121 if(empty($_GET["output"]) || (!empty($_GET["output"]) && $_GET["output"] != "xml")){ 119 if(empty($_GET["output"]) || (!empty($_GET["output"]) && $_GET["output"] != "xml")){
122 - gravaDados(array($xml),$arquivoXmlEsquema); 120 + gravaDados(array($xml),$arquivoXmlEsquema);
123 } 121 }
124 */ 122 */
125 imprimeEsquema(); 123 imprimeEsquema();
@@ -128,664 +126,672 @@ imprimeEsquema(); @@ -128,664 +126,672 @@ imprimeEsquema();
128 ////////////////////////////////////////////////////////////////////////////////////////// 126 //////////////////////////////////////////////////////////////////////////////////////////
129 function caminhoRegiao($hs,$chavesRegiao,$h,$regiaoInicial,$caminho=array()) 127 function caminhoRegiao($hs,$chavesRegiao,$h,$regiaoInicial,$caminho=array())
130 { 128 {
131 - foreach($hs as $n){  
132 - if($n["codigo_tipo_regiao"] == $regiaoInicial){  
133 - $caminho[] = array("a"=>$regiaoInicial,"join"=>$n["codigo_tipo_regiao_pai"],"ligacao"=>$n["colunaligacao_regiaopai"]);  
134 - $caminho = caminhoRegiao($hs,$chavesRegiao,$h, $n["codigo_tipo_regiao_pai"],$caminho);  
135 - }  
136 - else{  
137 - //$caminho = caminhoRegiao($hs,$chavesRegiao,$h, $n["codigo_tipo_regiao_pai"],$caminho);  
138 - }  
139 - }  
140 - return $caminho; 129 + foreach($hs as $n){
  130 + if($n["codigo_tipo_regiao"] == $regiaoInicial){
  131 + $caminho[] = array("a"=>$regiaoInicial,"join"=>$n["codigo_tipo_regiao_pai"],"ligacao"=>$n["colunaligacao_regiaopai"]);
  132 + $caminho = caminhoRegiao($hs,$chavesRegiao,$h, $n["codigo_tipo_regiao_pai"],$caminho);
  133 + }
  134 + else{
  135 + //$caminho = caminhoRegiao($hs,$chavesRegiao,$h, $n["codigo_tipo_regiao_pai"],$caminho);
  136 + }
  137 + }
  138 + return $caminho;
141 } 139 }
142 function converte($texto){ 140 function converte($texto){
143 - $texto = str_replace("&","&",htmlentities($texto,ENT_NOQUOTES,'UTF-8'));  
144 - return $texto; 141 + $texto = str_replace("&","&",htmlentities($texto,ENT_NOQUOTES,'UTF-8'));
  142 + return $texto;
145 } 143 }
146 function imprimeEsquema(){ 144 function imprimeEsquema(){
147 - global $saikuUrl,$nomeConexao,$xml;  
148 - @ob_end_clean();  
149 - header("Content-type: application/xml");  
150 - if(!empty($_GET["xmlesquema"])){  
151 - header("Location:".$_GET["xmlesquema"]);  
152 - }  
153 - else{  
154 - echo $xml;  
155 - } 145 + global $saikuUrl,$nomeConexao,$xml;
  146 + @ob_end_clean();
  147 + header("Content-type: application/xml");
  148 + if(!empty($_GET["xmlesquema"])){
  149 + header("Location:".$_GET["xmlesquema"]);
  150 + }
  151 + else{
  152 + echo $xml;
  153 + }
156 } 154 }
157 function criaMapfileInicial(){ 155 function criaMapfileInicial(){
158 - global $mapext;  
159 - if(empty($_GET["g_sid"])){  
160 - include(dirname(__FILE__)."/../../ms_configura.php");  
161 - $interface = "mashup";  
162 - include(dirname(__FILE__)."/../../ms_criamapa.php");  
163 -  
164 - //reinicia a url  
165 - $urln = "?g_sid=".session_id()."&locaplic=".$_GET["locaplic"]."&mapext=".$mapext."&origem=".$_GET["origem"]."&output=".$_GET["output"]."&xmlesquema=".$_GET["xmlesquema"]."&regiao=".$_GET["regiao"];  
166 - header("Location:".$urln);  
167 - exit;  
168 - } 156 + global $mapext;
  157 + if(empty($_GET["g_sid"])){
  158 + include(dirname(__FILE__)."/../../ms_configura.php");
  159 + $interface = "mashup";
  160 + include(dirname(__FILE__)."/../../ms_criamapa.php");
  161 +
  162 + //reinicia a url
  163 + $urln = "?g_sid=".session_id()."&locaplic=".$_GET["locaplic"]."&mapext=".$mapext."&origem=".$_GET["origem"]."&output=".$_GET["output"]."&xmlesquema=".$_GET["xmlesquema"]."&regiao=".$_GET["regiao"];
  164 + header("Location:".$urln);
  165 + exit;
  166 + }
169 } 167 }
170 function criaConexaoEsquema(){ 168 function criaConexaoEsquema(){
171 - global $dir_tmp, $urlXmlEsquema;  
172 - $nomeConexao = nomeRandomico();  
173 - //pega a sessao PHP aberta pelo i3Geo ou ms_criamapa.php  
174 - if(!empty($_GET["g_sid"])){  
175 - session_name("i3GeoPHP");  
176 - session_id($_GET["g_sid"]);  
177 - session_start();  
178 - $map_file = $_SESSION["map_file"];  
179 - if(empty($_GET["xmlesquema"])){  
180 - $urlXmlEsquema = $_SESSION["tmpurl"].basename(dirname($map_file))."/".$nomeConexao.".xml";  
181 - }  
182 - else{  
183 - $urlXmlEsquema = $_GET["xmlesquema"];  
184 - //cria um nome de arquivo reaproveitável  
185 - $nomeConexao = md5($_GET["xmlesquema"]);  
186 - }  
187 - }  
188 - //$arquivoXmlEsquema = dirname($map_file)."/".$nomeConexao.".xml";  
189 - return $nomeConexao.".txt"; 169 + global $dir_tmp, $urlXmlEsquema;
  170 + $nomeConexao = nomeRandomico();
  171 + //pega a sessao PHP aberta pelo i3Geo ou ms_criamapa.php
  172 + if(!empty($_GET["g_sid"])){
  173 + session_name("i3GeoPHP");
  174 + session_id($_GET["g_sid"]);
  175 + session_start();
  176 + $map_file = $_SESSION["map_file"];
  177 + if(empty($_GET["xmlesquema"])){
  178 + $urlXmlEsquema = $_SESSION["tmpurl"].basename(dirname($map_file))."/".$nomeConexao.".xml";
  179 + }
  180 + else{
  181 + $urlXmlEsquema = $_GET["xmlesquema"];
  182 + //cria um nome de arquivo reaproveitável
  183 + $nomeConexao = md5($_GET["xmlesquema"]);
  184 + }
  185 + }
  186 + //$arquivoXmlEsquema = dirname($map_file)."/".$nomeConexao.".xml";
  187 + return $nomeConexao.".txt";
190 } 188 }
191 function gravaDataSource(){ 189 function gravaDataSource(){
192 - /*  
193 - $saikuConfigDataSource vem do ms_configura.php  
194 -  
195 - Exemplo de arquivo de fonte:  
196 - type=OLAP  
197 - name=i3geo  
198 - driver=mondrian.olap4j.MondrianOlap4jDriver  
199 - location=jdbc:mondrian:Jdbc=jdbc:postgresql://localhost:5432/i3geosaude;Catalog=http://localhost/i3geo/ferramentas/saiku/esquemaxml.php;JdbcDrivers=org.postgresql.Driver;  
200 - username=postgres  
201 - password=postgres  
202 -  
203 - Array com os parametros definidos em ms_configura:  
204 -  
205 - $saikuConfigDataSource = array(  
206 - "type"=>"OLAP",  
207 - "driver"=>"mondrian.olap4j.MondrianOlap4jDriver",  
208 - "location"=>"jdbc:mondrian:Jdbc=jdbc:postgresql",  
209 - "serverdb"=>"localhost",  
210 - "port"=>"5432",  
211 - "database"=>"i3geosaude",  
212 - "JdbcDrivers"=>"org.postgresql.Driver",  
213 - "username"=>"postgres",  
214 - "password"=>"postgres"  
215 - );  
216 - */  
217 - global $arquivoXmlEsquema,$saikuConfigDataSource,$nomeConexao,$urlXmlEsquema,$dir_tmp;  
218 -  
219 - $nomeDatasource = $dir_tmp."/saiku-datasources/".$nomeConexao;  
220 - //nao funciona como url  
221 - //error_reporting(E_ALL);  
222 - $urlXmlEsquema = "http//localhost/i3geo/ferramentas/saiku/esquemaxml.php?output=xml";  
223 - if(!file_exists($arquivoXmlEsquema)){  
224 - $stringDatasource = "  
225 - type={$saikuConfigDataSource["type"]}  
226 - name={$nomeConexao}  
227 - driver={$saikuConfigDataSource["driver"]}  
228 - location={$saikuConfigDataSource["location"]}://{$saikuConfigDataSource["serverdb"]}:{$saikuConfigDataSource["port"]}/{$saikuConfigDataSource["database"]};Catalog={$urlXmlEsquema};JdbcDrivers={$saikuConfigDataSource["JdbcDrivers"]};  
229 - username={$saikuConfigDataSource["username"]}  
230 - password={$saikuConfigDataSource["password"]}  
231 - ";  
232 - //salva o arquivo com a fonte  
233 - gravaDados(array($stringDatasource),$nomeDatasource);  
234 - } 190 + /*
  191 + $saikuConfigDataSource vem do ms_configura.php
  192 +
  193 + Exemplo de arquivo de fonte:
  194 + type=OLAP
  195 + name=i3geo
  196 + driver=mondrian.olap4j.MondrianOlap4jDriver
  197 + location=jdbc:mondrian:Jdbc=jdbc:postgresql://localhost:5432/i3geosaude;Catalog=http://localhost/i3geo/ferramentas/saiku/esquemaxml.php;JdbcDrivers=org.postgresql.Driver;
  198 + username=postgres
  199 + password=postgres
  200 +
  201 + Array com os parametros definidos em ms_configura:
  202 +
  203 + $saikuConfigDataSource = array(
  204 + "type"=>"OLAP",
  205 + "driver"=>"mondrian.olap4j.MondrianOlap4jDriver",
  206 + "location"=>"jdbc:mondrian:Jdbc=jdbc:postgresql",
  207 + "serverdb"=>"localhost",
  208 + "port"=>"5432",
  209 + "database"=>"i3geosaude",
  210 + "JdbcDrivers"=>"org.postgresql.Driver",
  211 + "username"=>"postgres",
  212 + "password"=>"postgres"
  213 + );
  214 + */
  215 + global $arquivoXmlEsquema,$saikuConfigDataSource,$nomeConexao,$urlXmlEsquema,$dir_tmp;
  216 +
  217 + $nomeDatasource = $dir_tmp."/saiku-datasources/".$nomeConexao;
  218 + //nao funciona como url
  219 + //error_reporting(E_ALL);
  220 + $urlXmlEsquema = "http//localhost/i3geo/ferramentas/saiku/esquemaxml.php?output=xml";
  221 + if(!file_exists($arquivoXmlEsquema)){
  222 + $stringDatasource = "
  223 + type={$saikuConfigDataSource["type"]}
  224 + name={$nomeConexao}
  225 + driver={$saikuConfigDataSource["driver"]}
  226 + location={$saikuConfigDataSource["location"]}://{$saikuConfigDataSource["serverdb"]}:{$saikuConfigDataSource["port"]}/{$saikuConfigDataSource["database"]};Catalog={$urlXmlEsquema};JdbcDrivers={$saikuConfigDataSource["JdbcDrivers"]};
  227 + username={$saikuConfigDataSource["username"]}
  228 + password={$saikuConfigDataSource["password"]}
  229 + ";
  230 + //salva o arquivo com a fonte
  231 + gravaDados(array($stringDatasource),$nomeDatasource);
  232 + }
235 } 233 }
236 function pegaSelecaoRegioes(){ 234 function pegaSelecaoRegioes(){
237 - global $m,$map_file,$postgis_mapa;  
238 - $codigo_tipo_regiao = "";  
239 - $selecaoRegiao = array();  
240 - $regiao = "";  
241 - $item = "";  
242 - $registros = "";  
243 - if($map_file != ""){  
244 - $mapa = ms_newMapObj($map_file);  
245 - $c = $mapa->numlayers;  
246 - for ($i=0;$i < $c;++$i){  
247 - $l = $mapa->getlayer($i);  
248 - //verifica o alias na conexao  
249 - if (!empty($postgis_mapa)){  
250 - if ($l->connectiontype == MS_POSTGIS){  
251 - $lcon = $l->connection;  
252 - if (($lcon == " ") || ($lcon == "") || (in_array($lcon,array_keys($postgis_mapa)))){  
253 - if(($lcon == " ") || ($lcon == "")) //para efeitos de compatibilidade  
254 - {$l->set("connection",$postgis_mapa);  
255 - }  
256 - else{  
257 - $l->set("connection",$postgis_mapa[$lcon]);  
258 - }  
259 - }  
260 - }  
261 - }  
262 - //  
263 - $registros = array();  
264 - if($l->status == MS_DEFAULT && $l->getmetadata("METAESTAT_CODIGO_TIPO_REGIAO") != ""){  
265 - //verifica se tem selecao  
266 - $qyfile = dirname($map_file)."/".$l->name.".php";  
267 - if(file_exists($qyfile)){  
268 - $codigo_tipo_regiao = $l->getmetadata("METAESTAT_CODIGO_TIPO_REGIAO");  
269 - //pega os registros  
270 - $shapes = retornaShapesSelecionados($l,$map_file,$mapa);  
271 - //pega o nome da coluna que identifica cada registro  
272 - $regiao = $m->listaTipoRegiao($codigo_tipo_regiao);  
273 - $item = $regiao["identificador"];  
274 - foreach($shapes as $shape){  
275 - $registros[] = $shape->values[$item];  
276 - }  
277 - $reg = $item." IN ('".implode("','",$registros)."') ";  
278 - $selecaoRegiao[$codigo_tipo_regiao] = array(  
279 - "item" => $item,  
280 - "sql" => $reg  
281 - );  
282 - break; //mantem a primeira ocorrencia de regiao que possui selecao  
283 - }  
284 - else{  
285 - $selecaoRegiao[$codigo_tipo_regiao] = "";  
286 - }  
287 - }  
288 - }  
289 - return array(  
290 - "selecaoRegiao"=>$selecaoRegiao,  
291 - "codigo_tipo_regiao"=>$codigo_tipo_regiao  
292 - );  
293 - } 235 + global $m,$map_file,$postgis_mapa;
  236 + $codigo_tipo_regiao = "";
  237 + $selecaoRegiao = array();
  238 + $regiao = "";
  239 + $item = "";
  240 + $registros = "";
  241 + if($map_file != ""){
  242 + $mapa = ms_newMapObj($map_file);
  243 + $c = $mapa->numlayers;
  244 + for ($i=0;$i < $c;++$i){
  245 + $l = $mapa->getlayer($i);
  246 + //verifica o alias na conexao
  247 + if (!empty($postgis_mapa)){
  248 + if ($l->connectiontype == MS_POSTGIS){
  249 + $lcon = $l->connection;
  250 + if (($lcon == " ") || ($lcon == "") || (in_array($lcon,array_keys($postgis_mapa)))){
  251 + if(($lcon == " ") || ($lcon == "")) //para efeitos de compatibilidade
  252 + {$l->set("connection",$postgis_mapa);
  253 + }
  254 + else{
  255 + $l->set("connection",$postgis_mapa[$lcon]);
  256 + }
  257 + }
  258 + }
  259 + }
  260 + //
  261 + $registros = array();
  262 + if($l->status == MS_DEFAULT && $l->getmetadata("METAESTAT_CODIGO_TIPO_REGIAO") != ""){
  263 + //verifica se tem selecao
  264 + $qyfile = dirname($map_file)."/".$l->name.".php";
  265 + if(file_exists($qyfile)){
  266 + $codigo_tipo_regiao = $l->getmetadata("METAESTAT_CODIGO_TIPO_REGIAO");
  267 + //pega os registros
  268 + $shapes = retornaShapesSelecionados($l,$map_file,$mapa);
  269 + //pega o nome da coluna que identifica cada registro
  270 + $regiao = $m->listaTipoRegiao($codigo_tipo_regiao);
  271 + $item = $regiao["identificador"];
  272 + foreach($shapes as $shape){
  273 + $registros[] = $shape->values[$item];
  274 + }
  275 + $reg = $item." IN ('".implode("','",$registros)."') ";
  276 + $selecaoRegiao[$codigo_tipo_regiao] = array(
  277 + "item" => $item,
  278 + "sql" => $reg
  279 + );
  280 + break; //mantem a primeira ocorrencia de regiao que possui selecao
  281 + }
  282 + else{
  283 + $selecaoRegiao[$codigo_tipo_regiao] = "";
  284 + }
  285 + }
  286 + }
  287 + return array(
  288 + "selecaoRegiao"=>$selecaoRegiao,
  289 + "codigo_tipo_regiao"=>$codigo_tipo_regiao
  290 + );
  291 + }
294 } 292 }
295 function dimensoesTemporais(){ 293 function dimensoesTemporais(){
296 - global $saikuConfigDataSource;  
297 - $sqlAno = "select nu_ano from ".$saikuConfigDataSource['tabelaDimensaoTempo']." group by nu_ano order by nu_ano";  
298 - $sqlMes = "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 ".$saikuConfigDataSource['tabelaDimensaoTempo']." group by nu_ano,nu_mes,mes,nu_anomes order by nu_ano,nu_mes";  
299 - //dimensoes temporais  
300 - $xml = "  
301 - <Dimension name='Anual' type='TimeDimension' caption='Tempo: Anual'>  
302 - <Hierarchy hasAll='true' primaryKey='nu_ano'>  
303 - <view alias='tempo_ano' ><SQL dialect='generic' >$sqlAno</SQL></view>  
304 - <Level name='Ano' column='nu_ano' type='Numeric' uniqueMembers='true' levelType='TimeYears'/>  
305 - </Hierarchy>  
306 - </Dimension>  
307 - <Dimension name='Mensal' type='TimeDimension' caption='Tempo: Mensal'>  
308 - <Hierarchy hasAll='true' primaryKey='nu_anomes'>  
309 - <view alias='tempo_ano' ><SQL dialect='generic' >$sqlMes</SQL></view>  
310 - <Level name='Ano' column='nu_ano' type='Numeric' uniqueMembers='true' levelType='TimeYears'/>  
311 - <Level nameColumn='mes' name='Mes' column='nu_mes' type='Numeric' uniqueMembers='false' levelType='TimeMonths'/>  
312 - </Hierarchy>  
313 - </Dimension>  
314 - <Dimension name='Tempo' type='TimeDimension' caption='Tempo'>  
315 - <Hierarchy hasAll='true' primaryKey='nu_anomes'>  
316 - <view alias='tempo' ><SQL dialect='generic' >$sqlMes</SQL></view>  
317 - <Level name='Ano' column='nu_ano' type='String' uniqueMembers='true' levelType='TimeYears'/>  
318 - <Level nameColumn='mes' name='Mes' column='nu_mes' type='String' uniqueMembers='false' levelType='TimeMonths'/>  
319 - </Hierarchy>  
320 - </Dimension>  
321 - ";  
322 - return $xml; 294 + global $saikuConfigDataSource;
  295 + $sqlAno = "select nu_ano from ".$saikuConfigDataSource['tabelaDimensaoTempo']." group by nu_ano order by nu_ano";
  296 + $sqlMes = "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 ".$saikuConfigDataSource['tabelaDimensaoTempo']." group by nu_ano,nu_mes,mes,nu_anomes order by nu_ano,nu_mes";
  297 + //dimensoes temporais
  298 + $xml = "
  299 + <Dimension name='Anual' type='TimeDimension' caption='Tempo: Anual'>
  300 + <Hierarchy hasAll='true' primaryKey='nu_ano'>
  301 + <view alias='tempo_ano' ><SQL dialect='generic' >$sqlAno</SQL></view>
  302 + <Level name='Ano' column='nu_ano' type='Numeric' uniqueMembers='true' levelType='TimeYears'/>
  303 + </Hierarchy>
  304 + </Dimension>
  305 + <Dimension name='Mensal' type='TimeDimension' caption='Tempo: Mensal'>
  306 + <Hierarchy hasAll='true' primaryKey='nu_anomes'>
  307 + <view alias='tempo_ano' ><SQL dialect='generic' >$sqlMes</SQL></view>
  308 + <Level name='Ano' column='nu_ano' type='Numeric' uniqueMembers='true' levelType='TimeYears'/>
  309 + <Level nameColumn='mes' name='Mes' column='nu_mes' type='Numeric' uniqueMembers='false' levelType='TimeMonths'/>
  310 + </Hierarchy>
  311 + </Dimension>
  312 + <Dimension name='Tempo' type='TimeDimension' caption='Tempo'>
  313 + <Hierarchy hasAll='true' primaryKey='nu_anomes'>
  314 + <view alias='tempo' ><SQL dialect='generic' >$sqlMes</SQL></view>
  315 + <Level name='Ano' column='nu_ano' type='String' uniqueMembers='true' levelType='TimeYears'/>
  316 + <Level nameColumn='mes' name='Mes' column='nu_mes' type='String' uniqueMembers='false' levelType='TimeMonths'/>
  317 + </Hierarchy>
  318 + </Dimension>
  319 + ";
  320 + return $xml;
323 } 321 }
324 function sqlDasRegioes($regiao,$caminho,$chavesRegiao){ 322 function sqlDasRegioes($regiao,$caminho,$chavesRegiao){
325 - $select = "SELECT tabela{$regiao["codigo_tipo_regiao"]}.{$regiao["identificador"]}::text as codigo, __COLUNAS__ FROM {$regiao['esquemadb']}.{$regiao['tabela']} as tabela{$regiao["codigo_tipo_regiao"]} \n";  
326 - $selectPrincipal = "";  
327 - $juncoes = "";  
328 - $colunas = array();  
329 - $nomesColunas = array();  
330 - $codRegioes = array();  
331 - $ncaminhos = count($caminho);  
332 - if($ncaminhos > 0){  
333 - foreach($caminho as $c){  
334 - $regiaoAnterior = $chavesRegiao[$c["a"]];  
335 - $tabelaAnterior = "tabela".$regiaoAnterior["codigo_tipo_regiao"];  
336 - $colunaLigacaoAnterior = $c["ligacao"];  
337 -  
338 - $colunas[] = $tabelaAnterior.".".$regiaoAnterior["identificador"]. "::text AS codigo".$regiaoAnterior["codigo_tipo_regiao"];  
339 - $colunas[] = $tabelaAnterior.".".$regiaoAnterior["colunanomeregiao"]. "::text AS nome".$regiaoAnterior["codigo_tipo_regiao"];  
340 -  
341 - $regiaoJoin = $chavesRegiao[$c["join"]];  
342 - $tabelaAtual = "tabela".$regiaoJoin["codigo_tipo_regiao"];  
343 - $colunaLigacaoAtual = $regiaoJoin["identificador"];  
344 -  
345 - $colunas[] = $tabelaAtual.".".$regiaoJoin["identificador"]. "::text AS codigo".$regiaoJoin["codigo_tipo_regiao"];  
346 - $colunas[] = $tabelaAtual.".".$regiaoJoin["colunanomeregiao"]. "::text AS nome".$regiaoJoin["codigo_tipo_regiao"];  
347 -  
348 - $nomesColunas[] = " codigo".$regiaoJoin["codigo_tipo_regiao"];  
349 - $nomesColunas[] = " nome".$regiaoJoin["codigo_tipo_regiao"];  
350 -  
351 - $juncoes .= " JOIN {$regiaoJoin['esquemadb']}.{$regiaoJoin['tabela']} as $tabelaAtual ON  
352 - $tabelaAtual.$colunaLigacaoAtual::text = $tabelaAnterior.$colunaLigacaoAnterior::text  
353 - ";  
354 - $codRegioes[] = $regiaoJoin["codigo_tipo_regiao"];  
355 - }  
356 - $colunas = array_unique($colunas);  
357 - }  
358 - else{  
359 - $colunas[] = "tabela".$regiao["codigo_tipo_regiao"].".".$regiao["identificador"]. "::text AS codigo".$regiao["codigo_tipo_regiao"];  
360 - $colunas[] = "tabela".$regiao["codigo_tipo_regiao"].".".$regiao["colunanomeregiao"]. "::text AS nome".$regiao["codigo_tipo_regiao"];  
361 -  
362 - $nomesColunas[] = " codigo".$regiao["codigo_tipo_regiao"];  
363 - $nomesColunas[] = " nome".$regiao["codigo_tipo_regiao"];  
364 -  
365 - $codRegioes[] = $regiao["codigo_tipo_regiao"];  
366 - }  
367 - $mascara = $select;  
368 - $select = str_replace("__COLUNAS__",implode(",",$colunas),$select);  
369 - $selectPricipal = $select;  
370 - $select .= $juncoes;  
371 - return array("codRegioes"=>$codRegioes,"juncoes"=>$juncoes,"mascara"=>$mascara,"principal"=>$selectPricipal,"select"=>$select,"colunas"=>$colunas,"nomesColunas"=>$nomesColunas); 323 + $select = "SELECT tabela{$regiao["codigo_tipo_regiao"]}.{$regiao["identificador"]}::text as codigo, __COLUNAS__ FROM {$regiao['esquemadb']}.{$regiao['tabela']} as tabela{$regiao["codigo_tipo_regiao"]} \n";
  324 + $selectPrincipal = "";
  325 + $juncoes = "";
  326 + $colunas = array();
  327 + $nomesColunas = array();
  328 + $codRegioes = array();
  329 + $ncaminhos = count($caminho);
  330 + if($ncaminhos > 0){
  331 + foreach($caminho as $c){
  332 + $regiaoAnterior = $chavesRegiao[$c["a"]];
  333 + $tabelaAnterior = "tabela".$regiaoAnterior["codigo_tipo_regiao"];
  334 + $colunaLigacaoAnterior = $c["ligacao"];
  335 +
  336 + $colunas[] = $tabelaAnterior.".".$regiaoAnterior["identificador"]. "::text AS codigo".$regiaoAnterior["codigo_tipo_regiao"];
  337 + $colunas[] = $tabelaAnterior.".".$regiaoAnterior["colunanomeregiao"]. "::text AS nome".$regiaoAnterior["codigo_tipo_regiao"];
  338 +
  339 + $regiaoJoin = $chavesRegiao[$c["join"]];
  340 + $tabelaAtual = "tabela".$regiaoJoin["codigo_tipo_regiao"];
  341 + $colunaLigacaoAtual = $regiaoJoin["identificador"];
  342 +
  343 + $colunas[] = $tabelaAtual.".".$regiaoJoin["identificador"]. "::text AS codigo".$regiaoJoin["codigo_tipo_regiao"];
  344 + $colunas[] = $tabelaAtual.".".$regiaoJoin["colunanomeregiao"]. "::text AS nome".$regiaoJoin["codigo_tipo_regiao"];
  345 +
  346 + $nomesColunas[] = " codigo".$regiaoJoin["codigo_tipo_regiao"];
  347 + $nomesColunas[] = " nome".$regiaoJoin["codigo_tipo_regiao"];
  348 +
  349 + $juncoes .= " JOIN {$regiaoJoin['esquemadb']}.{$regiaoJoin['tabela']} as $tabelaAtual ON
  350 + $tabelaAtual.$colunaLigacaoAtual::text = $tabelaAnterior.$colunaLigacaoAnterior::text
  351 + ";
  352 + $codRegioes[] = $regiaoJoin["codigo_tipo_regiao"];
  353 + }
  354 + $colunas = array_unique($colunas);
  355 + }
  356 + else{
  357 + $colunas[] = "tabela".$regiao["codigo_tipo_regiao"].".".$regiao["identificador"]. "::text AS codigo".$regiao["codigo_tipo_regiao"];
  358 + $colunas[] = "tabela".$regiao["codigo_tipo_regiao"].".".$regiao["colunanomeregiao"]. "::text AS nome".$regiao["codigo_tipo_regiao"];
  359 +
  360 + $nomesColunas[] = " codigo".$regiao["codigo_tipo_regiao"];
  361 + $nomesColunas[] = " nome".$regiao["codigo_tipo_regiao"];
  362 +
  363 + $codRegioes[] = $regiao["codigo_tipo_regiao"];
  364 + }
  365 + $mascara = $select;
  366 + $select = str_replace("__COLUNAS__",implode(",",$colunas),$select);
  367 + $selectPricipal = $select;
  368 + $select .= $juncoes;
  369 + return array("codRegioes"=>$codRegioes,"juncoes"=>$juncoes,"mascara"=>$mascara,"principal"=>$selectPricipal,"select"=>$select,"colunas"=>$colunas,"nomesColunas"=>$nomesColunas);
372 } 370 }
373 371
374 function dimensoesGeo(){ 372 function dimensoesGeo(){
375 - global $chavesRegiao, $m, $selecaoRegiao, $regioes, $filhosDaRegiao, $VirtualCubeDimensionDaRegiao, $VirtualCubeMeasureDaRegiao;  
376 - //essas variaveis sao globais e usadas em outras funcoes  
377 - if(!empty($regioes)){  
378 - foreach($regioes as $regiao){  
379 - $filhosDaRegiao[$regiao["codigo_tipo_regiao"]] = array();  
380 - $VirtualCubeDimensionDaRegiao[$regiao["codigo_tipo_regiao"]] = array();  
381 - $VirtualCubeMeasureDaRegiao[$regiao["codigo_tipo_regiao"]] = array();  
382 - }  
383 - }  
384 - //xml normal  
385 - $xml1 = "";  
386 - //xml geocodigo  
387 - $xml2 = "";  
388 - //  
389 - //sera que e todas mesmo ou so a escolhida?????  
390 - //  
391 - $todasRegioes = $m->listaTipoRegiao();  
392 - $xmlRegioes = array();  
393 - foreach($todasRegioes as $regiao){  
394 - $sqls = array();  
395 - $temp = converte($regiao["nome_tipo_regiao"]);  
396 - $xml1 = "  
397 - <Dimension name='codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."' caption='Onde:".$temp."'>  
398 - <Hierarchy hasAll='true' primaryKey='codigo{$regiao["codigo_tipo_regiao"]}'>  
399 - ";  
400 - $xml2 = "  
401 - <Dimension name='codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."_geocod' caption='GeoCod:".$temp."'>  
402 - <Hierarchy hasAll='true' primaryKey='codigo{$regiao["codigo_tipo_regiao"]}'>  
403 - ";  
404 - //  
405 - //cria uma view juntando as tabelas da hierarquia de regioes  
406 - //  
407 - $hs = $m->listaHierarquia();  
408 - //$regiao["codigo_tipo_regiao"] = 2;  
409 - foreach($hs as $h){  
410 - if($h["codigo_tipo_regiao"] == $regiao["codigo_tipo_regiao"]){  
411 - $caminho = caminhoRegiao($hs,$chavesRegiao,$h,$regiao["codigo_tipo_regiao"]);  
412 - }  
413 - }  
414 - //  
415 - //sql da tabela principal da regiao  
416 - //  
417 - $dadosSelect = sqlDasRegioes($regiao,$caminho,$chavesRegiao);  
418 - //  
419 - //pega os dados das demais tabelas associadas, menos da primeira  
420 - //para unir os dados  
421 - //  
422 - $niveisXml1 = array();  
423 - $niveisXml2 = array();  
424 -  
425 - $temp = converte($regiao["nome_tipo_regiao"]);  
426 - $niveisXml1[] = "  
427 - <Level name='".$temp."' column='codigo{$regiao["codigo_tipo_regiao"]}' nameColumn='nome".$regiao["codigo_tipo_regiao"]."'  
428 - uniqueMembers='false' />  
429 - ";  
430 - $niveisXml2[] = "  
431 - <Level name='".$temp." - GeoCod #".$regiao["codigo_tipo_regiao"]."' column='codigo{$regiao["codigo_tipo_regiao"]}' nameColumn='codigo".$regiao["codigo_tipo_regiao"]."'  
432 - uniqueMembers='false' />  
433 - ";  
434 - //juncoes  
435 - while($caminho){  
436 - $a = array_shift($caminho);  
437 - $u = sqlDasRegioes($chavesRegiao[$a["join"]],array(),$chavesRegiao);  
438 - //substitui as colunas para obter dados vazios  
439 - $colunasVazias = array();  
440 - foreach($dadosSelect["nomesColunas"] as $nomesPrincipais){  
441 - $colunasVazias[$nomesPrincipais] = "'' AS $nomesPrincipais";  
442 - }  
443 - $n = count($u["colunas"]);  
444 - for($q = 0; $q < $n; $q++){  
445 - $colunasVazias[$u["nomesColunas"][$q]] = $u["colunas"][$q];  
446 - }  
447 - //  
448 - //inclui as colunas da primeira tabela  
449 - //  
450 - $colunasPrimeiraTabela = "'' as codigo".$regiao["codigo_tipo_regiao"].","."'' as nome".$regiao["codigo_tipo_regiao"].",";  
451 -  
452 - $mascara = str_replace("__COLUNAS__",$colunasPrimeiraTabela."__COLUNAS__",$u["mascara"]);  
453 -  
454 - $u["select"] = str_replace("__COLUNAS__",implode(",",$colunasVazias),$mascara);  
455 -  
456 - $temp = converte($chavesRegiao[$a["join"]]["nome_tipo_regiao"]);  
457 -  
458 - $niveisXml1[] = "  
459 - <Level name='".$temp."' column='codigo{$a["join"]}' nameColumn='nome".$a["join"]."'  
460 - uniqueMembers='false' />  
461 - ";  
462 - $niveisXml2[] = "  
463 - <Level name='".$temp." - GeoCod #".$a["join"]."' column='codigo{$a["join"]}' nameColumn='codigo".$a["join"]."'  
464 - uniqueMembers='false' />  
465 - ";  
466 - $unico = "false";  
467 - }  
468 -  
469 - //inclui a selecao se houver  
470 - $sqlreg = "";  
471 - if(!empty($selecaoRegiao[$regiao["codigo_tipo_regiao"]])){  
472 - $rs = $selecaoRegiao[$regiao["codigo_tipo_regiao"]];  
473 - $sqlreg = " WHERE tabela{$regiao["codigo_tipo_regiao"]}.".$rs["sql"];  
474 - }  
475 - $xml1 .= "  
476 - <view alias='view_codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."' >  
477 - <SQL dialect='generic' >".$dadosSelect["select"].$sqlreg."</SQL>  
478 - </view>  
479 - ";  
480 - $xml2 .= "  
481 - <view alias='view_codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."_GeoCod' >  
482 - <SQL dialect='generic' >".$dadosSelect["select"].$sqlreg."</SQL>  
483 - </view>  
484 - ";  
485 - $niveisXml1 = array_reverse($niveisXml1);  
486 - $niveisXml2 = array_reverse($niveisXml2);  
487 - $xml1 .= implode(" ",$niveisXml1);  
488 - $xml2 .= implode(" ",$niveisXml2);  
489 - $xml1 .= "  
490 - </Hierarchy>  
491 - </Dimension>  
492 - ";  
493 - $xml2 .= "  
494 - </Hierarchy>  
495 - </Dimension>  
496 - ";  
497 - $xmlRegioes[$regiao["codigo_tipo_regiao"]] = array(  
498 - "xml" => $xml1.$xml2,  
499 - "juncoes" => $dadosSelect["juncoes"],  
500 - "codigo_tipo_regiao"=> $regiao["codigo_tipo_regiao"],  
501 - "colunas" => $dadosSelect["colunas"],  
502 - "nomesColunas"=> $dadosSelect["nomesColunas"],  
503 - "codRegioes"=>$dadosSelect["codRegioes"]  
504 - );  
505 - }  
506 - return $xmlRegioes; 373 + global $chavesRegiao, $m, $selecaoRegiao, $regioes, $filhosDaRegiao, $VirtualCubeDimensionDaRegiao, $VirtualCubeMeasureDaRegiao;
  374 + //essas variaveis sao globais e usadas em outras funcoes
  375 + if(!empty($regioes)){
  376 + foreach($regioes as $regiao){
  377 + $filhosDaRegiao[$regiao["codigo_tipo_regiao"]] = array();
  378 + $VirtualCubeDimensionDaRegiao[$regiao["codigo_tipo_regiao"]] = array();
  379 + $VirtualCubeMeasureDaRegiao[$regiao["codigo_tipo_regiao"]] = array();
  380 + }
  381 + }
  382 + //xml normal
  383 + $xml1 = "";
  384 + //xml geocodigo
  385 + $xml2 = "";
  386 + //
  387 + //sera que e todas mesmo ou so a escolhida?????
  388 + //
  389 + $todasRegioes = $m->listaTipoRegiao();
  390 + $xmlRegioes = array();
  391 + foreach($todasRegioes as $regiao){
  392 + $sqls = array();
  393 + $temp = converte($regiao["nome_tipo_regiao"]);
  394 + $xml1 = "
  395 + <Dimension name='codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."' caption='Onde:".$temp."'>
  396 + <Hierarchy hasAll='true' primaryKey='codigo{$regiao["codigo_tipo_regiao"]}'>
  397 + ";
  398 + $xml2 = "
  399 + <Dimension name='codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."_geocod' caption='GeoCod:".$temp."'>
  400 + <Hierarchy hasAll='true' primaryKey='codigo{$regiao["codigo_tipo_regiao"]}'>
  401 + ";
  402 + //
  403 + //cria uma view juntando as tabelas da hierarquia de regioes
  404 + //
  405 + $hs = $m->listaHierarquia();
  406 + //$regiao["codigo_tipo_regiao"] = 2;
  407 + $caminho = array();
  408 + foreach($hs as $h){
  409 + if($h["codigo_tipo_regiao"] == $regiao["codigo_tipo_regiao"]){
  410 + $caminho = caminhoRegiao($hs,$chavesRegiao,$h,$regiao["codigo_tipo_regiao"]);
  411 + }
  412 + }
  413 + //
  414 + //sql da tabela principal da regiao
  415 + //
  416 + $dadosSelect = sqlDasRegioes($regiao,$caminho,$chavesRegiao);
  417 + //
  418 + //pega os dados das demais tabelas associadas, menos da primeira
  419 + //para unir os dados
  420 + //
  421 + $niveisXml1 = array();
  422 + $niveisXml2 = array();
  423 +
  424 + $temp = converte($regiao["nome_tipo_regiao"]);
  425 + $niveisXml1[] = "
  426 + <Level name='".$temp."' column='codigo{$regiao["codigo_tipo_regiao"]}' nameColumn='nome".$regiao["codigo_tipo_regiao"]."'
  427 + uniqueMembers='false' />
  428 + ";
  429 + $niveisXml2[] = "
  430 + <Level name='".$temp." - GeoCod #".$regiao["codigo_tipo_regiao"]."' column='codigo{$regiao["codigo_tipo_regiao"]}' nameColumn='codigo".$regiao["codigo_tipo_regiao"]."'
  431 + uniqueMembers='false' />
  432 + ";
  433 + //juncoes
  434 + while($caminho){
  435 + $a = array_shift($caminho);
  436 + $u = sqlDasRegioes($chavesRegiao[$a["join"]],array(),$chavesRegiao);
  437 + //substitui as colunas para obter dados vazios
  438 + $colunasVazias = array();
  439 + foreach($dadosSelect["nomesColunas"] as $nomesPrincipais){
  440 + $colunasVazias[$nomesPrincipais] = "'' AS $nomesPrincipais";
  441 + }
  442 + $n = count($u["colunas"]);
  443 + for($q = 0; $q < $n; $q++){
  444 + $colunasVazias[$u["nomesColunas"][$q]] = $u["colunas"][$q];
  445 + }
  446 + //
  447 + //inclui as colunas da primeira tabela
  448 + //
  449 + $colunasPrimeiraTabela = "'' as codigo".$regiao["codigo_tipo_regiao"].","."'' as nome".$regiao["codigo_tipo_regiao"].",";
  450 +
  451 + $mascara = str_replace("__COLUNAS__",$colunasPrimeiraTabela."__COLUNAS__",$u["mascara"]);
  452 +
  453 + $u["select"] = str_replace("__COLUNAS__",implode(",",$colunasVazias),$mascara);
  454 +
  455 + $temp = converte($chavesRegiao[$a["join"]]["nome_tipo_regiao"]);
  456 +
  457 + $niveisXml1[] = "
  458 + <Level name='".$temp."' column='codigo{$a["join"]}' nameColumn='nome".$a["join"]."'
  459 + uniqueMembers='false' />
  460 + ";
  461 + $niveisXml2[] = "
  462 + <Level name='".$temp." - GeoCod #".$a["join"]."' column='codigo{$a["join"]}' nameColumn='codigo".$a["join"]."'
  463 + uniqueMembers='false' />
  464 + ";
  465 + $unico = "false";
  466 + }
  467 +
  468 + //inclui a selecao se houver
  469 + $sqlreg = "";
  470 + if(!empty($selecaoRegiao[$regiao["codigo_tipo_regiao"]])){
  471 + $rs = $selecaoRegiao[$regiao["codigo_tipo_regiao"]];
  472 + $sqlreg = " WHERE tabela{$regiao["codigo_tipo_regiao"]}.".$rs["sql"];
  473 + }
  474 + $xml1 .= "
  475 + <view alias='view_codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."' >
  476 + <SQL dialect='generic' >".$dadosSelect["select"].$sqlreg."</SQL>
  477 + </view>
  478 + ";
  479 + $xml2 .= "
  480 + <view alias='view_codigo_tipo_regiao_".$regiao["codigo_tipo_regiao"]."_GeoCod' >
  481 + <SQL dialect='generic' >".$dadosSelect["select"].$sqlreg."</SQL>
  482 + </view>
  483 + ";
  484 + $niveisXml1 = array_reverse($niveisXml1);
  485 + $niveisXml2 = array_reverse($niveisXml2);
  486 + $xml1 .= implode(" ",$niveisXml1);
  487 + $xml2 .= implode(" ",$niveisXml2);
  488 + $xml1 .= "
  489 + </Hierarchy>
  490 + </Dimension>
  491 + ";
  492 + $xml2 .= "
  493 + </Hierarchy>
  494 + </Dimension>
  495 + ";
  496 + $xmlRegioes[$regiao["codigo_tipo_regiao"]] = array(
  497 + "xml" => $xml1.$xml2,
  498 + "juncoes" => $dadosSelect["juncoes"],
  499 + "codigo_tipo_regiao"=> $regiao["codigo_tipo_regiao"],
  500 + "colunas" => $dadosSelect["colunas"],
  501 + "nomesColunas"=> $dadosSelect["nomesColunas"],
  502 + "codRegioes"=>$dadosSelect["codRegioes"]
  503 + );
  504 + }
  505 + return $xmlRegioes;
507 } 506 }
508 function dimensoesOutras(){ 507 function dimensoesOutras(){
509 - global $m,$nivelDaDimensao;  
510 - $parametros = $m->listaTodosParametros();  
511 - $dimOutras = array();  
512 - foreach($parametros as $p){  
513 - //apenas as nao tempo  
514 - if($p["tipo"] < 1 || $p["tipo"] > 5){  
515 - $k = $p["esquema"]."_".$p["tabela"]."_".$p["coluna"];  
516 - if(empty($tbs[$k])){  
517 - $dimOutras[$k] = $p;  
518 - }  
519 - else{  
520 - array_push($dimOutras[$k],$p);  
521 - }  
522 - }  
523 - }  
524 - $xml3 = "";  
525 - foreach($dimOutras as $d){  
526 - $k = $d["esquemadb"]."_".$d["tabela"]."_".$d["coluna"];  
527 - $xml3 .= "  
528 - <Dimension name='".$k."' caption='".converte($d["nome"])."'>  
529 - <Hierarchy hasAll='true' primaryKey='codigo'>  
530 - ";  
531 - //cria uma view juntando as tabelas da hierarquia de regioes  
532 - $colunas = "dim.{$d['coluna']}::text as codigo, ";  
533 - $colunas .= "dim.{$d['coluna']} AS nome";  
534 - $sql = "SELECT {$colunas} FROM ".$d['esquemadb'].".".$d['tabela']." as dim group by codigo,nome";  
535 - $xml3 .= "<view alias='".$k."' ><SQL dialect='generic' >$sql</SQL></view>";  
536 - $xml3 .= "<Level name='".converte($d["nome"])."'  
537 - column='codigo'  
538 - nameColumn='nome' uniqueMembers='false' />  
539 - ";  
540 - $nivelDaDimensao[$k] = converte($d["nome"]);  
541 - $xml3 .= "</Hierarchy>  
542 - </Dimension>";  
543 - }  
544 - return $xml3; 508 + global $m,$nivelDaDimensao;
  509 + $parametros = $m->listaTodosParametros();
  510 + $dimOutras = array();
  511 + foreach($parametros as $p){
  512 + //apenas as nao tempo
  513 + if($p["tipo"] < 1 || $p["tipo"] > 5){
  514 + $k = $p["esquema"]."_".$p["tabela"]."_".$p["coluna"];
  515 + if(empty($tbs[$k])){
  516 + $dimOutras[$k] = $p;
  517 + }
  518 + else{
  519 + array_push($dimOutras[$k],$p);
  520 + }
  521 + }
  522 + }
  523 + $xml3 = "";
  524 + foreach($dimOutras as $d){
  525 + $k = $d["esquemadb"]."_".$d["tabela"]."_".$d["coluna"];
  526 + $xml3 .= "
  527 + <Dimension name='".$k."' caption='".converte($d["nome"])."'>
  528 + <Hierarchy hasAll='true' primaryKey='codigo'>
  529 + ";
  530 + //cria uma view juntando as tabelas da hierarquia de regioes
  531 + $colunas = "dim.{$d['coluna']}::text as codigo, ";
  532 + $colunas .= "dim.{$d['coluna']} AS nome";
  533 + $sql = "SELECT {$colunas} FROM ".$d['esquemadb'].".".$d['tabela']." as dim group by codigo,nome";
  534 + $xml3 .= "<view alias='".$k."' ><SQL dialect='generic' >$sql</SQL></view>";
  535 + $xml3 .= "<Level name='".converte($d["nome"])."'
  536 + column='codigo'
  537 + nameColumn='nome' uniqueMembers='false' />
  538 + ";
  539 + $nivelDaDimensao[$k] = converte($d["nome"]);
  540 + $xml3 .= "</Hierarchy>
  541 + </Dimension>";
  542 + }
  543 + return $xml3;
545 } 544 }
546 function dimensoesTabelas(){ 545 function dimensoesTabelas(){
547 - global $VirtualCubeDimensionDaMedida, $CubosPorMedida, $nivelDaDimensao, $dimRegioes, $filhosDaRegiao, $m, $VirtualCubeDimension, $VirtualCubeMeasure, $chavesRegiao, $medidas, $codigo_tipo_regiao, $VirtualCubeDimensionDaRegiao, $VirtualCubeMeasureDaRegiao;  
548 -  
549 - $xml = "";  
550 - $tbs = array();  
551 - foreach($medidas as $medida){  
552 - if($codigo_tipo_regiao == "" || $medida["codigo_tipo_regiao"] == $codigo_tipo_regiao){  
553 - $k = $medida["esquemadb"].$medida["tabela"];  
554 -  
555 - if(empty($tbs[$k])){  
556 - $tbs[$k] = array($medida);  
557 - }  
558 - else{  
559 - array_push($tbs[$k],$medida);  
560 - }  
561 - $CubosPorMedida[$medida["nome_variavel"]] = array();  
562 - $VirtualCubeDimensionDaMedida[$medida["nome_variavel"]] = array();  
563 - }  
564 - }  
565 - //monta os cubos para cada esquema.tabela diferente  
566 - foreach($tbs as $tb){  
567 - //cabecalho de cada cubo obtido da primeira medida  
568 - $c = $tb[0];  
569 - $VirtualCubeDimension[] = "  
570 - <VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}' />  
571 - ";  
572 - $VirtualCubeDimension[] = "  
573 - <VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}_geocod' />  
574 - ";  
575 - if(array_key_exists($c["codigo_tipo_regiao"],$VirtualCubeDimensionDaRegiao)){  
576 - array_push(  
577 - $VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]],  
578 - "<VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}' />"  
579 - );  
580 - array_push(  
581 - $VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]],  
582 - "<VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}_geocod' />"  
583 - );  
584 - }  
585 - if(array_key_exists($c["nome_variavel"],$VirtualCubeDimensionDaMedida)){  
586 - array_push(  
587 - $VirtualCubeDimensionDaMedida[$c["nome_variavel"]],  
588 - "<VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}' />"  
589 - );  
590 - array_push(  
591 - $VirtualCubeDimensionDaMedida[$c["nome_variavel"]],  
592 - "<VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}_geocod' />"  
593 - );  
594 - }  
595 -  
596 - //verifica as dimensoes do tipo tempo  
597 - $dimEnsoes = array();  
598 -  
599 - foreach($tb as $medida){  
600 - $parametros = $m->listaParametro($medida["id_medida_variavel"],"","",false,false);  
601 - $parComposto = array(); //guarda a composicao da chave que liga com a dimensao  
602 - $colunaAdicionais = array();  
603 - //parametro do tipo tempo  
604 - if(count($parametros) > 0){  
605 - foreach($parametros as $parametro){  
606 - if($parametro["tipo"] < 5 && $parametro["tipo"] > 0){  
607 - $parComposto[] = $parametro["coluna"];  
608 - }  
609 - }  
610 - $VirtualCubeDimension[] = "  
611 - <VirtualCubeDimension name='Tempo' />  
612 - ";  
613 - $u = "  
614 - <DimensionUsage foreignKey='".implode("_",$parComposto)."_' name='Tempo' source='Tempo'/>  
615 - ";  
616 - $dimEnsoes[] = $u;  
617 - if(array_key_exists($c["codigo_tipo_regiao"],$VirtualCubeDimensionDaRegiao)){  
618 - array_push($VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]],"<VirtualCubeDimension name='Tempo' />");  
619 - }  
620 - }  
621 - //outros parametros  
622 - $outrosParametros = array();  
623 - foreach($parametros as $parametro){  
624 - $k = $parametro["esquemadb"]."_".$parametro["tabela"]."_".$parametro["coluna"];  
625 - if($parametro["tipo"] > 5 || $parametro["tipo"] == 0){  
626 - $outrosParametros[] = $k;  
627 - $VirtualCubeDimension[] = "<VirtualCubeDimension name='{$k}' />";  
628 - $u = "<DimensionUsage foreignKey='".$parametro["coluna"]."' name='{$k}' source='{$k}'/>";  
629 - $dimEnsoes[] = $u;  
630 - if(array_key_exists($c["codigo_tipo_regiao"],$VirtualCubeDimensionDaRegiao)){  
631 - array_push($VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]],"<VirtualCubeDimension name='{$k}' />");  
632 - }  
633 - }  
634 - }  
635 -  
636 - }  
637 - //$dimEnsoes[] = '<DimensionUsage foreignKey="coduf" name="codigo_tipo_regiao_2" source="codigo_tipo_regiao_2"/>';  
638 -  
639 - $xml .= "<Cube cache='false' name='Tabela: {$c["esquemadb"]}{$c["tabela"]}'>";  
640 -  
641 - $incluirChaves = array("tabelamedida{$c["id_medida_variavel"]}.*");  
642 - //colunas quando o nome da coluna com os valores for vazia  
643 - foreach($tb as $mdd){  
644 - if($mdd["colunavalor"] == "" && $mdd["filtro"] == ""){  
645 - $incluirChaves[] = "'1'::numeric as contagem".$mdd["id_medida_variavel"];  
646 - }  
647 - if($mdd["colunavalor"] == "" && $mdd["filtro"] != ""){  
648 - $mdd["filtro"] = str_replace('"',"'",$mdd["filtro"]);  
649 - $incluirChaves[] = "CASE WHEN {$mdd["filtro"]} THEN 1 ELSE 0 END as contagem".$mdd["id_medida_variavel"];  
650 - }  
651 - }  
652 - if(count($parComposto) > 0){  
653 - //$sql = "select *,".implode("||'-'||",$parComposto)."::text as ".implode("_",$parComposto)."_ from {$c["esquemadb"]}.{$c["tabela"]}";  
654 - $incluirChaves[] = implode("||'-'||",$parComposto)."::text as ".implode("_",$parComposto)."_";  
655 - }  
656 - if(count($outrosParametros) > 0){  
657 - foreach($outrosParametros as $o){  
658 - //$incluirChaves[] = $o."::text as ".$o."_";  
659 - }  
660 - }  
661 - $r = $chavesRegiao[$c["codigo_tipo_regiao"]];  
662 - $sql = "  
663 - select ".implode(",",$incluirChaves).", tabelamedida{$c["id_medida_variavel"]}.{$c["colunaidgeo"]}::text as codigoreg  
664 - ";  
665 - if(count($dimRegioes[$c["codigo_tipo_regiao"]]["colunas"]) > 0){  
666 - $sql .= ",".implode(",",$dimRegioes[$c["codigo_tipo_regiao"]]["colunas"]);  
667 - //$sql .= ",tabela{$r["codigo_tipo_regiao"]}.".implode(",tabela{$r["codigo_tipo_regiao"]}.",$dimRegioes[$c["codigo_tipo_regiao"]]["colunas"]);  
668 - }  
669 -  
670 - $sql .= "  
671 - from {$c["esquemadb"]}.{$c["tabela"]} as tabelamedida{$c["id_medida_variavel"]}  
672 - JOIN {$r["esquemadb"]}.{$r["tabela"]} as tabela{$r["codigo_tipo_regiao"]}  
673 - ON tabela{$r["codigo_tipo_regiao"]}.{$r["identificador"]}::text = tabelamedida{$c["id_medida_variavel"]}.{$c["colunaidgeo"]}::text  
674 - ";  
675 - $sql .= $dimRegioes[$c["codigo_tipo_regiao"]]["juncoes"];  
676 - $f = array();  
677 - foreach($tb as $mdd){  
678 - if($mdd["filtro"] != ""){  
679 - $f[] = str_replace('"',"'",$mdd["filtro"]);  
680 - }  
681 - }  
682 - if(count($f) > 0){  
683 - $sql .= " WHERE ".implode(" OR ",$f);  
684 - }  
685 -  
686 - $xml .= "  
687 - <view alias='view_{$c["esquemadb"]}{$c["tabela"]}' ><SQL dialect='generic' >$sql</SQL></view>  
688 - ";  
689 - //dimensoes vinculadas  
690 - $temp = $dimRegioes[$c["codigo_tipo_regiao"]]["codRegioes"];  
691 - $temp[] = $c["codigo_tipo_regiao"];  
692 - foreach($temp as $cod){  
693 - $xml .= "  
694 - <DimensionUsage foreignKey='codigo{$cod}' name='codigo_tipo_regiao_{$cod}' source='codigo_tipo_regiao_{$cod}'/>  
695 - <DimensionUsage foreignKey='codigo{$cod}' name='codigo_tipo_regiao_{$cod}_geocod' source='codigo_tipo_regiao_{$cod}_geocod'/>  
696 - ";  
697 - }  
698 - //inclui as dimensoes filhas  
699 - if(array_key_exists($c["codigo_tipo_regiao"],$filhosDaRegiao)){  
700 - foreach($filhosDaRegiao[$c["codigo_tipo_regiao"]] as $fr){  
701 - $xml .= "  
702 - <DimensionUsage foreignKey='codigoreg' name='codigo_tipo_regiao_".$fr."' source='codigo_tipo_regiao_".$fr."'/>  
703 - <DimensionUsage foreignKey='codigoreg' name='codigo_tipo_regiao_".$fr."_geocod' source='codigo_tipo_regiao_".$fr."_geocod'/>  
704 - ";  
705 - }  
706 - }  
707 - $xml .= implode(" ",array_unique($dimEnsoes));  
708 -  
709 - //inclui cada elemento em medida  
710 - foreach($tb as $medida){  
711 - $agregador = "sum";  
712 - if($medida["permitesoma"] == 0 && $medida["permitemedia"] == 1){  
713 - $agregador = "avg";  
714 - }  
715 - if($medida["permitesoma"] == 0 && $medida["permitemedia"] == 0){  
716 - $agregador = "count";  
717 - }  
718 - if($medida["colunavalor"] == ""){  
719 - $nomeColunaValor = "contagem".$medida["id_medida_variavel"];  
720 - }  
721 - else{  
722 - $nomeColunaValor = $medida["colunavalor"];  
723 - }  
724 - $xml .= "  
725 - <Measure name='id_medida_variavel_".$medida["id_medida_variavel"]."' caption='".converte($medida["nomemedida"])."' column='".$nomeColunaValor."' aggregator='".$agregador."' />  
726 - ";  
727 - $u = "  
728 - <VirtualCubeMeasure cubeName='Tabela: {$c["esquemadb"]}{$c["tabela"]}' name='[Measures].[id_medida_variavel_".$medida["id_medida_variavel"]."]'/>  
729 - ";  
730 - $VirtualCubeMeasure[] = $u;  
731 - if(array_key_exists($c["codigo_tipo_regiao"],$VirtualCubeMeasureDaRegiao)){  
732 - array_push($VirtualCubeMeasureDaRegiao[$c["codigo_tipo_regiao"]],$u);  
733 - }  
734 - //verifica em qual variavel entra  
735 - //<VirtualCubeMeasure cubeName='Tabela: idsustb_indicador' name='[Measures].[id_medida_variavel_12]'/>  
736 - $u = "<VirtualCubeMeasure cubeName='Tabela: {$c["esquemadb"]}{$c["tabela"]}' name='[Measures].[id_medida_variavel_".$medida["id_medida_variavel"]."]'/>";  
737 - array_push($CubosPorMedida[$c["nome_variavel"]],$u);  
738 - }  
739 - $xml .= "  
740 - </Cube>  
741 - ";  
742 - }  
743 - return $xml; 546 + global $VirtualCubeDimensionDaMedida, $CubosPorMedida, $nivelDaDimensao, $dimRegioes, $filhosDaRegiao, $m, $VirtualCubeDimension, $VirtualCubeMeasure, $chavesRegiao, $medidas, $codigo_tipo_regiao, $VirtualCubeDimensionDaRegiao, $VirtualCubeMeasureDaRegiao;
  547 +
  548 + $xml = "";
  549 + $tbs = array();
  550 + foreach($medidas as $medida){
  551 + if($medida["codigo_tipo_regiao"] > 0 && ($codigo_tipo_regiao == "" || $medida["codigo_tipo_regiao"] == $codigo_tipo_regiao)){
  552 + $k = $medida["esquemadb"].$medida["tabela"]." ".$medida["filtro"];
  553 + if(!isset($tbs[$k])){
  554 + $tbs[$k] = array($medida);
  555 + }
  556 + else{
  557 + array_push($tbs[$k],$medida);
  558 + }
  559 + $CubosPorMedida[$medida["nome_variavel"]] = array();
  560 + $VirtualCubeDimensionDaMedida[$medida["nome_variavel"]] = array();
  561 + }
  562 + }
  563 + //monta os cubos para cada esquema.tabela diferente
  564 + foreach($tbs as $tb){
  565 + //cabecalho de cada cubo obtido da primeira medida
  566 + $c = $tb[0];
  567 + $VirtualCubeDimension[] = "
  568 + <VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}' />
  569 + ";
  570 + $VirtualCubeDimension[] = "
  571 + <VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}_geocod' />
  572 + ";
  573 + if(array_key_exists($c["codigo_tipo_regiao"],$VirtualCubeDimensionDaRegiao)){
  574 + array_push(
  575 + $VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]],
  576 + "<VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}' />"
  577 + );
  578 + array_push(
  579 + $VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]],
  580 + "<VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}_geocod' />"
  581 + );
  582 + }
  583 + if(array_key_exists($c["nome_variavel"],$VirtualCubeDimensionDaMedida)){
  584 + array_push(
  585 + $VirtualCubeDimensionDaMedida[$c["nome_variavel"]],
  586 + "<VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}' />"
  587 + );
  588 + array_push(
  589 + $VirtualCubeDimensionDaMedida[$c["nome_variavel"]],
  590 + "<VirtualCubeDimension name='codigo_tipo_regiao_{$c["codigo_tipo_regiao"]}_geocod' />"
  591 + );
  592 + }
  593 +
  594 + //verifica as dimensoes do tipo tempo
  595 + $dimEnsoes = array();
  596 +
  597 + foreach($tb as $medida){
  598 + $parametros = $m->listaParametro($medida["id_medida_variavel"],"","",false,false);
  599 + $parComposto = array(); //guarda a composicao da chave que liga com a dimensao
  600 + $colunaAdicionais = array();
  601 + //parametro do tipo tempo
  602 + if(count($parametros) > 0){
  603 + foreach($parametros as $parametro){
  604 + if($parametro["tipo"] < 5 && $parametro["tipo"] > 0){
  605 + $parComposto[] = $parametro["coluna"];
  606 + }
  607 + }
  608 + $VirtualCubeDimension[] = "
  609 + <VirtualCubeDimension name='Tempo' />
  610 + ";
  611 + $u = "
  612 + <DimensionUsage foreignKey='".implode("_",$parComposto)."_' name='Tempo' source='Tempo'/>
  613 + ";
  614 + $dimEnsoes[] = $u;
  615 + if(array_key_exists($c["codigo_tipo_regiao"],$VirtualCubeDimensionDaRegiao)){
  616 + array_push($VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]],"<VirtualCubeDimension name='Tempo' />");
  617 + }
  618 + }
  619 + //outros parametros
  620 + $outrosParametros = array();
  621 + foreach($parametros as $parametro){
  622 + $k = $parametro["esquemadb"]."_".$parametro["tabela"]."_".$parametro["coluna"];
  623 + if($parametro["tipo"] > 5 || $parametro["tipo"] == 0){
  624 + $outrosParametros[] = $k;
  625 + $VirtualCubeDimension[] = "<VirtualCubeDimension name='{$k}' />";
  626 + $u = "<DimensionUsage foreignKey='".$parametro["coluna"]."' name='{$k}' source='{$k}'/>";
  627 + $dimEnsoes[] = $u;
  628 + if(array_key_exists($c["codigo_tipo_regiao"],$VirtualCubeDimensionDaRegiao)){
  629 + array_push($VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]],"<VirtualCubeDimension name='{$k}' />");
  630 + }
  631 + }
  632 + }
  633 +
  634 + }
  635 + //$dimEnsoes[] = '<DimensionUsage foreignKey="coduf" name="codigo_tipo_regiao_2" source="codigo_tipo_regiao_2"/>';
  636 +
  637 + $xml .= "<Cube cache='false' name='Tabela: {$c["esquemadb"]}{$c["tabela"]} {$c["filtro"]}'>";
  638 +
  639 + $incluirChaves = array("tabelamedida{$c["id_medida_variavel"]}.*");
  640 + //colunas quando o nome da coluna com os valores for vazia
  641 + foreach($tb as $mdd){
  642 + if($mdd["colunavalor"] == "" && $mdd["filtro"] == ""){
  643 + $incluirChaves[] = "'1'::numeric as contagem".$mdd["id_medida_variavel"];
  644 + }
  645 + if($mdd["colunavalor"] == "" && $mdd["filtro"] != ""){
  646 + $mdd["filtro"] = str_replace('"',"'",$mdd["filtro"]);
  647 + $incluirChaves[] = "CASE WHEN {$mdd["filtro"]} THEN 1 ELSE 0 END as contagem".$mdd["id_medida_variavel"];
  648 + }
  649 + }
  650 + if(count($parComposto) > 0){
  651 + //$sql = "select *,".implode("||'-'||",$parComposto)."::text as ".implode("_",$parComposto)."_ from {$c["esquemadb"]}.{$c["tabela"]}";
  652 + $incluirChaves[] = implode("||'-'||",$parComposto)."::text as ".implode("_",$parComposto)."_";
  653 + }
  654 + if(count($outrosParametros) > 0){
  655 + foreach($outrosParametros as $o){
  656 + //$incluirChaves[] = $o."::text as ".$o."_";
  657 + }
  658 + }
  659 + $r = $chavesRegiao[$c["codigo_tipo_regiao"]];
  660 + $sql = "
  661 + select ".implode(",",$incluirChaves).", tabelamedida{$c["id_medida_variavel"]}.{$c["colunaidgeo"]}::text as codigoreg
  662 + ";
  663 + if(count($dimRegioes[$c["codigo_tipo_regiao"]]["colunas"]) > 0){
  664 + $sql .= ",".implode(",",$dimRegioes[$c["codigo_tipo_regiao"]]["colunas"]);
  665 + //$sql .= ",tabela{$r["codigo_tipo_regiao"]}.".implode(",tabela{$r["codigo_tipo_regiao"]}.",$dimRegioes[$c["codigo_tipo_regiao"]]["colunas"]);
  666 + }
  667 +
  668 + $sql .= "
  669 + from {$c["esquemadb"]}.{$c["tabela"]} as tabelamedida{$c["id_medida_variavel"]}
  670 + JOIN {$r["esquemadb"]}.{$r["tabela"]} as tabela{$r["codigo_tipo_regiao"]}
  671 + ON tabela{$r["codigo_tipo_regiao"]}.{$r["identificador"]}::text = tabelamedida{$c["id_medida_variavel"]}.{$c["colunaidgeo"]}::text
  672 + ";
  673 + $sql .= $dimRegioes[$c["codigo_tipo_regiao"]]["juncoes"];
  674 + $f = array();
  675 + foreach($tb as $mdd){
  676 + if($mdd["filtro"] != ""){
  677 + $f[] = str_replace('"',"'",$mdd["filtro"]);
  678 + }
  679 + }
  680 + if(count($f) > 0){
  681 + $sql .= " WHERE ".implode(" OR ",$f);
  682 + }
  683 +
  684 + $xml .= "
  685 + <view alias='view_{$c["esquemadb"]}{$c["tabela"]}' ><SQL dialect='generic' >$sql</SQL></view>
  686 + ";
  687 + //dimensoes vinculadas
  688 + /*
  689 + $temp = $dimRegioes[$c["codigo_tipo_regiao"]]["codRegioes"];
  690 + $temp[] = $c["codigo_tipo_regiao"];
  691 + foreach($temp as $cod){
  692 + $xml .= "
  693 + <DimensionUsage foreignKey='codigo{$cod}' name='codigo_tipo_regiao_{$cod}' source='codigo_tipo_regiao_{$cod}'/>
  694 + <DimensionUsage foreignKey='codigo{$cod}' name='codigo_tipo_regiao_{$cod}_geocod' source='codigo_tipo_regiao_{$cod}_geocod'/>
  695 + ";
  696 + }
  697 + */
  698 + foreach(array_keys($dimRegioes) as $cod){
  699 + $xml .= "
  700 + <DimensionUsage foreignKey='codigo{$cod}' name='codigo_tipo_regiao_{$cod}' source='codigo_tipo_regiao_{$cod}'/>
  701 + <DimensionUsage foreignKey='codigo{$cod}' name='codigo_tipo_regiao_{$cod}_geocod' source='codigo_tipo_regiao_{$cod}_geocod'/>
  702 + ";
  703 + }
  704 + //inclui as dimensoes filhas
  705 + if(array_key_exists($c["codigo_tipo_regiao"],$filhosDaRegiao)){
  706 + foreach($filhosDaRegiao[$c["codigo_tipo_regiao"]] as $fr){
  707 + $xml .= "
  708 + <DimensionUsage foreignKey='codigoreg' name='codigo_tipo_regiao_".$fr."' source='codigo_tipo_regiao_".$fr."'/>
  709 + <DimensionUsage foreignKey='codigoreg' name='codigo_tipo_regiao_".$fr."_geocod' source='codigo_tipo_regiao_".$fr."_geocod'/>
  710 + ";
  711 + }
  712 + }
  713 + $xml .= implode(" ",array_unique($dimEnsoes));
  714 +
  715 + //inclui cada elemento em medida
  716 + foreach($tb as $medida){
  717 + $agregador = "sum";
  718 + if($medida["permitesoma"] == 0 && $medida["permitemedia"] == 1){
  719 + $agregador = "avg";
  720 + }
  721 + if($medida["permitesoma"] == 0 && $medida["permitemedia"] == 0){
  722 + $agregador = "count";
  723 + }
  724 + if($medida["colunavalor"] == ""){
  725 + $nomeColunaValor = "contagem".$medida["id_medida_variavel"];
  726 + }
  727 + else{
  728 + $nomeColunaValor = $medida["colunavalor"];
  729 + }
  730 + $xml .= "
  731 + <Measure name='id_medida_variavel_".$medida["id_medida_variavel"]."' caption='".converte($medida["nomemedida"])."' column='".$nomeColunaValor."' aggregator='".$agregador."' />
  732 + ";
  733 + $u = "
  734 + <VirtualCubeMeasure cubeName='Tabela: {$c["esquemadb"]}{$c["tabela"]} {$c["filtro"]}' name='[Measures].[id_medida_variavel_".$medida["id_medida_variavel"]."]'/>
  735 + ";
  736 + $VirtualCubeMeasure[] = $u;
  737 + if(!array_key_exists($c["codigo_tipo_regiao"],$VirtualCubeMeasureDaRegiao)){
  738 + array_push($VirtualCubeMeasureDaRegiao[$c["codigo_tipo_regiao"]],$u);
  739 + }
  740 + //verifica em qual variavel entra
  741 + //<VirtualCubeMeasure cubeName='Tabela: idsustb_indicador' name='[Measures].[id_medida_variavel_12]'/>
  742 + $u = "<VirtualCubeMeasure cubeName='Tabela: {$c["esquemadb"]}{$c["tabela"]} {$c["filtro"]}' name='[Measures].[id_medida_variavel_".$medida["id_medida_variavel"]."]'/>";
  743 + array_push($CubosPorMedida[$c["nome_variavel"]],$u);
  744 + }
  745 + $xml .= "
  746 + </Cube>
  747 + ";
  748 + }
  749 + return $xml;
744 } 750 }
745 function cuboTodas(){ 751 function cuboTodas(){
746 - global $VirtualCubeDimension, $VirtualCubeMeasure;  
747 - $xml = '<VirtualCube name="Todas as medidas" >';  
748 - $VirtualCubeDimension = array_unique($VirtualCubeDimension);  
749 - $VirtualCubeMeasure = array_unique($VirtualCubeMeasure);  
750 - $xml .= implode(" ",$VirtualCubeDimension);  
751 - $xml .= implode(" ",$VirtualCubeMeasure);  
752 - $xml .= '</VirtualCube>';  
753 - return $xml; 752 + global $VirtualCubeDimension, $VirtualCubeMeasure;
  753 + $xml = '<VirtualCube name="Todas as medidas" >';
  754 + $VirtualCubeDimension = array_unique($VirtualCubeDimension);
  755 + $VirtualCubeMeasure = array_unique($VirtualCubeMeasure);
  756 + $xml .= implode(" ",$VirtualCubeDimension);
  757 + $xml .= implode(" ",$VirtualCubeMeasure);
  758 + $xml .= '</VirtualCube>';
  759 + return $xml;
754 } 760 }
755 function cuboRegioes(){ 761 function cuboRegioes(){
756 - global $regioes, $VirtualCubeDimensionDaRegiao, $VirtualCubeMeasureDaRegiao, $filhosDaRegiao;  
757 - $xml = "";  
758 - if(!empty($regioes)){  
759 - foreach($regioes as $regiao){  
760 - //inclui os parametros para a regiao de acordo com os filhos que possui  
761 - $d = $VirtualCubeDimensionDaRegiao[$regiao["codigo_tipo_regiao"]];  
762 - $mm = $VirtualCubeMeasureDaRegiao[$regiao["codigo_tipo_regiao"]];  
763 - foreach($filhosDaRegiao[$regiao["codigo_tipo_regiao"]] as $f){  
764 - $mm = array_merge($mm,$VirtualCubeMeasureDaRegiao[$f]);  
765 - }  
766 - if(count(array_unique($mm)) > 0){  
767 - $xml .= '<VirtualCube name="Regi&amp;atilde;o: '.converte($regiao["nome_tipo_regiao"]).'" >';  
768 - $xml .= implode(" ",array_unique($d));  
769 - $xml .= implode(" ",array_unique($mm));  
770 - $xml .= '</VirtualCube>';  
771 - }  
772 - }  
773 - }  
774 - return $xml; 762 + global $regioes, $VirtualCubeDimensionDaRegiao, $VirtualCubeMeasureDaRegiao, $filhosDaRegiao;
  763 + $xml = "";
  764 + if(!empty($regioes)){
  765 + foreach($regioes as $regiao){
  766 + //inclui os parametros para a regiao de acordo com os filhos que possui
  767 + $d = $VirtualCubeDimensionDaRegiao[$regiao["codigo_tipo_regiao"]];
  768 + $mm = $VirtualCubeMeasureDaRegiao[$regiao["codigo_tipo_regiao"]];
  769 + foreach($filhosDaRegiao[$regiao["codigo_tipo_regiao"]] as $f){
  770 + $mm = array_merge($mm,$VirtualCubeMeasureDaRegiao[$f]);
  771 + }
  772 + if(count(array_unique($mm)) > 0){
  773 + $xml .= '<VirtualCube name="Regi&amp;atilde;o: '.converte($regiao["nome_tipo_regiao"]).'" >';
  774 + $xml .= implode(" ",array_unique($d));
  775 + $xml .= implode(" ",array_unique($mm));
  776 + $xml .= '</VirtualCube>';
  777 + }
  778 + }
  779 + }
  780 + return $xml;
775 } 781 }
776 782
777 function cuboVariaveis(){ 783 function cuboVariaveis(){
778 - global $CubosPorMedida, $VirtualCubeDimensionDaMedida;  
779 - //var_dump($VirtualCubeDimensionDaMedida);exit;  
780 - $xml = "";  
781 - $chaves = array_keys($CubosPorMedida);  
782 - foreach ($chaves as $c){  
783 - $xml .= '<VirtualCube name="'.converte($c).'" >';  
784 - $xml .= '<VirtualCubeDimension name="Tempo" />';  
785 - $xml .= implode(" ",$VirtualCubeDimensionDaMedida[$c]);  
786 - $xml .= implode(" ",$CubosPorMedida[$c]);  
787 - $xml .= '</VirtualCube>';  
788 - }  
789 - return $xml; 784 + global $CubosPorMedida, $VirtualCubeDimensionDaMedida;
  785 + //var_dump($VirtualCubeDimensionDaMedida);exit;
  786 + $xml = "";
  787 + $chaves = array_keys($CubosPorMedida);
  788 + foreach ($chaves as $c){
  789 + $xml .= '<VirtualCube name="'.converte($c).'" >';
  790 + $xml .= '<VirtualCubeDimension name="Tempo" />';
  791 + $xml .= implode(" ",$VirtualCubeDimensionDaMedida[$c]);
  792 + $xml .= implode(" ",$CubosPorMedida[$c]);
  793 + $xml .= '</VirtualCube>';
  794 + }
  795 + return $xml;
790 } 796 }
791 -?> 797 -?>
  798 +?>
792 \ No newline at end of file 799 \ No newline at end of file