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 2 include(dirname(__FILE__)."/../../classesphp/funcoes_gerais.php");
3 3 include(dirname(__FILE__)."/../../classesphp/classe_metaestatinfo.php");
4 4 if(!isset($dir_tmp)){
5   - include(dirname(__FILE__)."/../../ms_configura.php");
  5 + include(dirname(__FILE__)."/../../ms_configura.php");
6 6 }
7 7 if(isset($statusFerramentas) && $statusFerramentas["saiku"] != true){
8   - exit;
  8 + exit;
9 9 }
10 10 //testa pra ver se a requisicao esta vindo de um local autorizado
11 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 14 $urlXmlEsquema = "";
15 15 /*
16 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 20 gravaDataSource();
21 21 if(!empty($_GET["output"])){
22   - imprimeEsquema();
  22 + imprimeEsquema();
23 23 }
24 24 */
25 25 $m = new MetaestatInfo();
... ... @@ -27,23 +27,23 @@ $m = new MetaestatInfo();
27 27 //
28 28 //obtem do mapfile em uso os layers que sao do sistema metaestat, sao regioes e que possuem selecao
29 29 //
30   -/*
  30 +
31 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 36 else{
37   - $codigo_tipo_regiao = $_GET["regiao"];
  37 + $codigo_tipo_regiao = $_GET["regiao"];
38 38 }
39 39 if($codigo_tipo_regiao == ""){
40   - $regioes = $m->listaTipoRegiao();
  40 + $regioes = $m->listaTipoRegiao();
41 41 }
42 42 else{
43   - $regioes = array($m->listaTipoRegiao($codigo_tipo_regiao));
  43 + $regioes = array($m->listaTipoRegiao($codigo_tipo_regiao));
44 44 }
45 45 $s = "";
46   -*/
  46 +
47 47  
48 48 $medidas = $m->listaMedidaVariavel();
49 49  
... ... @@ -53,7 +53,7 @@ $medidas = $m->listaMedidaVariavel();
53 53 $chavesRegiao = array();
54 54 $todasAsRegioes = $m->listaTipoRegiao();
55 55 foreach($todasAsRegioes as $R){
56   - $chavesRegiao[$R["codigo_tipo_regiao"]] = $R;
  56 + $chavesRegiao[$R["codigo_tipo_regiao"]] = $R;
57 57 }
58 58 //inicia montagem do XML
59 59 //
... ... @@ -78,10 +78,9 @@ $CubosPorMedida = array();
78 78 $dimRegioes = dimensoesGeo();
79 79  
80 80 $xmlRegioes = array_map(function($element){
81   - return $element['xml'];
  81 + return $element['xml'];
82 82 }, $dimRegioes);
83 83 $xmlRegioes = implode(" ",$xmlRegioes);
84   -
85 84 //
86 85 //outras dimensoes definidas nos parametros e que nao sejam do tipo tempo
87 86 //
... ... @@ -93,7 +92,6 @@ $xmlOutrasDim = dimensoesOutras();
93 92 $VirtualCubeDimension = array();
94 93 $VirtualCubeMeasure = array();
95 94 $xmlDimensoesTabelas = dimensoesTabelas();
96   -
97 95 //
98 96 //cubo geral, com todas as dimensoes e medidas
99 97 //
... ... @@ -101,7 +99,7 @@ $xmlCuboTodas = cuboTodas();
101 99 //
102 100 //cubos por regiao
103 101 //
104   -$xmlCuboRegioes = cuboRegioes();
  102 +$xmlCuboRegioes = cuboRegioes();//$VirtualCubeDimensionDaRegiao, $VirtualCubeMeasureDaRegiao
105 103  
106 104 $xmlCuboVariaveis = cuboVariaveis();
107 105  
... ... @@ -119,7 +117,7 @@ ob_end_clean();
119 117 //
120 118 /*
121 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 123 imprimeEsquema();
... ... @@ -128,664 +126,672 @@ imprimeEsquema();
128 126 //////////////////////////////////////////////////////////////////////////////////////////
129 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 799 \ No newline at end of file
... ...