listaTipoRegiao();
}
else{
$regioes = array($m->listaTipoRegiao($codigo_tipo_regiao));
}
$s = "";
$medidas = $m->listaMedidaVariavel();
//
//formata o array de regioes colocando na chave o codigo da regiao
//
$chavesRegiao = array();
$todasAsRegioes = $m->listaTipoRegiao();
foreach($todasAsRegioes as $R){
$chavesRegiao[$R["codigo_tipo_regiao"]] = $R;
}
//inicia montagem do XML
//
//cria as dimensoes de tipo temporal
//
$xmlTempo = dimensoesTemporais();
//
//dimensoes geograficas
//as dimensoes sao duplicadas
//uma delas contem o geocodigo que permite a geracao do mapa
//
//guarda as regioes filhas de uma determinada regiao (chave)
$filhosDaRegiao = array();
$VirtualCubeDimensionDaRegiao = array();
$VirtualCubeMeasureDaRegiao = array();
$nivelDaDimensao = array();
$VirtualCubeDimensionDaMedida = array();
$CubosPorMedida = array();
$dimRegioes = dimensoesGeo();
$xmlRegioes = array_map(function($element){
return $element['xml'];
}, $dimRegioes);
$xmlRegioes = implode(" ",$xmlRegioes);
//
//outras dimensoes definidas nos parametros e que nao sejam do tipo tempo
//
$xmlOutrasDim = dimensoesOutras();
//
//cria as dimensoes das medidas conforme o nome da tabela utilizada
//
$VirtualCubeDimension = array();
$VirtualCubeMeasure = array();
$xmlDimensoesTabelas = dimensoesTabelas();
//
//cubo geral, com todas as dimensoes e medidas
//
$xmlCuboTodas = cuboTodas();
//
//cubos por regiao
//
$xmlCuboRegioes = cuboRegioes();//$VirtualCubeDimensionDaRegiao, $VirtualCubeMeasureDaRegiao
$xmlCuboVariaveis = cuboVariaveis();
$xml = "";
$xml .= $xmlTempo.$xmlRegioes.$xmlOutrasDim.$xmlDimensoesTabelas.$xmlCuboRegioes.$xmlCuboTodas.$xmlCuboVariaveis;
$xml .= "";
//xml pronto!!!!!
//error_reporting(0);
ob_end_clean();
//
//grava os dados em um arquivo. O usuario pode evitar isso e imprimir direto na tela
//usando output "xml"
//
/*
if(empty($_GET["output"]) || (!empty($_GET["output"]) && $_GET["output"] != "xml")){
gravaDados(array($xml),$arquivoXmlEsquema);
}
*/
imprimeEsquema();
//////////////////////////////////////////////////////////////////////////////////////////
function caminhoRegiao($hs,$chavesRegiao,$h,$regiaoInicial,$caminho=array())
{
foreach($hs as $n){
if($n["codigo_tipo_regiao"] == $regiaoInicial){
$caminho[] = array("a"=>$regiaoInicial,"join"=>$n["codigo_tipo_regiao_pai"],"ligacao"=>$n["colunaligacao_regiaopai"]);
$caminho = caminhoRegiao($hs,$chavesRegiao,$h, $n["codigo_tipo_regiao_pai"],$caminho);
}
else{
//$caminho = caminhoRegiao($hs,$chavesRegiao,$h, $n["codigo_tipo_regiao_pai"],$caminho);
}
}
return $caminho;
}
function converte($texto){
$texto = str_replace("&","&",htmlentities($texto,ENT_NOQUOTES,'UTF-8'));
return $texto;
}
function imprimeEsquema(){
global $saikuUrl,$nomeConexao,$xml;
@ob_end_clean();
header("Content-type: application/xml");
if(!empty($_GET["xmlesquema"])){
header("Location:".$_GET["xmlesquema"]);
}
else{
echo $xml;
}
}
function criaMapfileInicial(){
global $mapext;
if(empty($_GET["g_sid"])){
include(dirname(__FILE__)."/../../ms_configura.php");
$interface = "mashup";
include(dirname(__FILE__)."/../../ms_criamapa.php");
//reinicia a url
$urln = "?g_sid=".session_id()."&locaplic=".$_GET["locaplic"]."&mapext=".$mapext."&origem=".$_GET["origem"]."&output=".$_GET["output"]."&xmlesquema=".$_GET["xmlesquema"]."®iao=".$_GET["regiao"];
header("Location:".$urln);
exit;
}
}
function criaConexaoEsquema(){
global $dir_tmp, $urlXmlEsquema;
$nomeConexao = nomeRandomico();
//pega a sessao PHP aberta pelo i3Geo ou ms_criamapa.php
if(!empty($_GET["g_sid"])){
session_name("i3GeoPHP");
session_id($_GET["g_sid"]);
session_start();
$map_file = $_SESSION["map_file"];
if(empty($_GET["xmlesquema"])){
$urlXmlEsquema = $_SESSION["tmpurl"].basename(dirname($map_file))."/".$nomeConexao.".xml";
}
else{
$urlXmlEsquema = $_GET["xmlesquema"];
//cria um nome de arquivo reaproveitável
$nomeConexao = md5($_GET["xmlesquema"]);
}
}
//$arquivoXmlEsquema = dirname($map_file)."/".$nomeConexao.".xml";
return $nomeConexao.".txt";
}
function gravaDataSource(){
/*
$saikuConfigDataSource vem do ms_configura.php
Exemplo de arquivo de fonte:
type=OLAP
name=i3geo
driver=mondrian.olap4j.MondrianOlap4jDriver
location=jdbc:mondrian:Jdbc=jdbc:postgresql://localhost:5432/i3geosaude;Catalog=http://localhost/i3geo/ferramentas/saiku/esquemaxml.php;JdbcDrivers=org.postgresql.Driver;
username=postgres
password=postgres
Array com os parametros definidos em ms_configura:
$saikuConfigDataSource = array(
"type"=>"OLAP",
"driver"=>"mondrian.olap4j.MondrianOlap4jDriver",
"location"=>"jdbc:mondrian:Jdbc=jdbc:postgresql",
"serverdb"=>"localhost",
"port"=>"5432",
"database"=>"i3geosaude",
"JdbcDrivers"=>"org.postgresql.Driver",
"username"=>"postgres",
"password"=>"postgres"
);
*/
global $arquivoXmlEsquema,$saikuConfigDataSource,$nomeConexao,$urlXmlEsquema,$dir_tmp;
$nomeDatasource = $dir_tmp."/saiku-datasources/".$nomeConexao;
//nao funciona como url
//error_reporting(E_ALL);
$urlXmlEsquema = "http//localhost/i3geo/ferramentas/saiku/esquemaxml.php?output=xml";
if(!file_exists($arquivoXmlEsquema)){
$stringDatasource = "
type={$saikuConfigDataSource["type"]}
name={$nomeConexao}
driver={$saikuConfigDataSource["driver"]}
location={$saikuConfigDataSource["location"]}://{$saikuConfigDataSource["serverdb"]}:{$saikuConfigDataSource["port"]}/{$saikuConfigDataSource["database"]};Catalog={$urlXmlEsquema};JdbcDrivers={$saikuConfigDataSource["JdbcDrivers"]};
username={$saikuConfigDataSource["username"]}
password={$saikuConfigDataSource["password"]}
";
//salva o arquivo com a fonte
gravaDados(array($stringDatasource),$nomeDatasource);
}
}
function pegaSelecaoRegioes(){
global $m,$map_file,$postgis_mapa;
$codigo_tipo_regiao = "";
$selecaoRegiao = array();
$regiao = "";
$item = "";
$registros = "";
if($map_file != ""){
$mapa = ms_newMapObj($map_file);
$c = $mapa->numlayers;
for ($i=0;$i < $c;++$i){
$l = $mapa->getlayer($i);
//verifica o alias na conexao
if (!empty($postgis_mapa)){
if ($l->connectiontype == MS_POSTGIS){
$lcon = $l->connection;
if (($lcon == " ") || ($lcon == "") || (in_array($lcon,array_keys($postgis_mapa)))){
if(($lcon == " ") || ($lcon == "")) //para efeitos de compatibilidade
{$l->set("connection",$postgis_mapa);
}
else{
$l->set("connection",$postgis_mapa[$lcon]);
}
}
}
}
//
$registros = array();
if($l->status == MS_DEFAULT && $l->getmetadata("METAESTAT_CODIGO_TIPO_REGIAO") != ""){
//verifica se tem selecao
$qyfile = dirname($map_file)."/".$l->name.".php";
if(file_exists($qyfile)){
$codigo_tipo_regiao = $l->getmetadata("METAESTAT_CODIGO_TIPO_REGIAO");
//pega os registros
$shapes = retornaShapesSelecionados($l,$map_file,$mapa);
//pega o nome da coluna que identifica cada registro
$regiao = $m->listaTipoRegiao($codigo_tipo_regiao);
$item = $regiao["identificador"];
foreach($shapes as $shape){
$registros[] = $shape->values[$item];
}
$reg = $item." IN ('".implode("','",$registros)."') ";
$selecaoRegiao[$codigo_tipo_regiao] = array(
"item" => $item,
"sql" => $reg
);
break; //mantem a primeira ocorrencia de regiao que possui selecao
}
else{
$selecaoRegiao[$codigo_tipo_regiao] = "";
}
}
}
return array(
"selecaoRegiao"=>$selecaoRegiao,
"codigo_tipo_regiao"=>$codigo_tipo_regiao
);
}
}
function dimensoesTemporais(){
global $saikuConfigDataSource;
$sqlAno = "select nu_ano from ".$saikuConfigDataSource['tabelaDimensaoTempo']." group by nu_ano order by nu_ano";
$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";
//dimensoes temporais
$xml = "
$sqlAno
$sqlMes
$sqlMes
";
return $xml;
}
function sqlDasRegioes($regiao,$caminho,$chavesRegiao){
$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";
$selectPrincipal = "";
$juncoes = "";
$colunas = array();
$nomesColunas = array();
$codRegioes = array();
$ncaminhos = count($caminho);
if($ncaminhos > 0){
foreach($caminho as $c){
$regiaoAnterior = $chavesRegiao[$c["a"]];
$tabelaAnterior = "tabela".$regiaoAnterior["codigo_tipo_regiao"];
$colunaLigacaoAnterior = $c["ligacao"];
$colunas[] = $tabelaAnterior.".".$regiaoAnterior["identificador"]. "::text AS codigo".$regiaoAnterior["codigo_tipo_regiao"];
$colunas[] = $tabelaAnterior.".".$regiaoAnterior["colunanomeregiao"]. "::text AS nome".$regiaoAnterior["codigo_tipo_regiao"];
$regiaoJoin = $chavesRegiao[$c["join"]];
$tabelaAtual = "tabela".$regiaoJoin["codigo_tipo_regiao"];
$colunaLigacaoAtual = $regiaoJoin["identificador"];
$colunas[] = $tabelaAtual.".".$regiaoJoin["identificador"]. "::text AS codigo".$regiaoJoin["codigo_tipo_regiao"];
$colunas[] = $tabelaAtual.".".$regiaoJoin["colunanomeregiao"]. "::text AS nome".$regiaoJoin["codigo_tipo_regiao"];
$nomesColunas[] = " codigo".$regiaoJoin["codigo_tipo_regiao"];
$nomesColunas[] = " nome".$regiaoJoin["codigo_tipo_regiao"];
$juncoes .= " JOIN {$regiaoJoin['esquemadb']}.{$regiaoJoin['tabela']} as $tabelaAtual ON
$tabelaAtual.$colunaLigacaoAtual::text = $tabelaAnterior.$colunaLigacaoAnterior::text
";
$codRegioes[] = $regiaoJoin["codigo_tipo_regiao"];
}
$colunas = array_unique($colunas);
}
else{
$colunas[] = "tabela".$regiao["codigo_tipo_regiao"].".".$regiao["identificador"]. "::text AS codigo".$regiao["codigo_tipo_regiao"];
$colunas[] = "tabela".$regiao["codigo_tipo_regiao"].".".$regiao["colunanomeregiao"]. "::text AS nome".$regiao["codigo_tipo_regiao"];
$nomesColunas[] = " codigo".$regiao["codigo_tipo_regiao"];
$nomesColunas[] = " nome".$regiao["codigo_tipo_regiao"];
$codRegioes[] = $regiao["codigo_tipo_regiao"];
}
$mascara = $select;
$select = str_replace("__COLUNAS__",implode(",",$colunas),$select);
$selectPricipal = $select;
$select .= $juncoes;
return array("codRegioes"=>$codRegioes,"juncoes"=>$juncoes,"mascara"=>$mascara,"principal"=>$selectPricipal,"select"=>$select,"colunas"=>$colunas,"nomesColunas"=>$nomesColunas);
}
function dimensoesGeo(){
global $chavesRegiao, $m, $selecaoRegiao, $regioes, $filhosDaRegiao, $VirtualCubeDimensionDaRegiao, $VirtualCubeMeasureDaRegiao;
//essas variaveis sao globais e usadas em outras funcoes
if(!empty($regioes)){
foreach($regioes as $regiao){
$filhosDaRegiao[$regiao["codigo_tipo_regiao"]] = array();
$VirtualCubeDimensionDaRegiao[$regiao["codigo_tipo_regiao"]] = array();
$VirtualCubeMeasureDaRegiao[$regiao["codigo_tipo_regiao"]] = array();
}
}
//xml normal
$xml1 = "";
//xml geocodigo
$xml2 = "";
//
//sera que e todas mesmo ou so a escolhida?????
//
$todasRegioes = $m->listaTipoRegiao();
$xmlRegioes = array();
foreach($todasRegioes as $regiao){
$sqls = array();
$temp = converte($regiao["nome_tipo_regiao"]);
$xml1 = "
";
$xml2 = "
";
//
//cria uma view juntando as tabelas da hierarquia de regioes
//
$hs = $m->listaHierarquia();
//$regiao["codigo_tipo_regiao"] = 2;
$caminho = array();
foreach($hs as $h){
if($h["codigo_tipo_regiao"] == $regiao["codigo_tipo_regiao"]){
$caminho = caminhoRegiao($hs,$chavesRegiao,$h,$regiao["codigo_tipo_regiao"]);
}
}
//
//sql da tabela principal da regiao
//
$dadosSelect = sqlDasRegioes($regiao,$caminho,$chavesRegiao);
//
//pega os dados das demais tabelas associadas, menos da primeira
//para unir os dados
//
$niveisXml1 = array();
$niveisXml2 = array();
$temp = converte($regiao["nome_tipo_regiao"]);
$niveisXml1[] = "
";
$niveisXml2[] = "
";
//juncoes
while($caminho){
$a = array_shift($caminho);
$u = sqlDasRegioes($chavesRegiao[$a["join"]],array(),$chavesRegiao);
//substitui as colunas para obter dados vazios
$colunasVazias = array();
foreach($dadosSelect["nomesColunas"] as $nomesPrincipais){
$colunasVazias[$nomesPrincipais] = "'' AS $nomesPrincipais";
}
$n = count($u["colunas"]);
for($q = 0; $q < $n; $q++){
$colunasVazias[$u["nomesColunas"][$q]] = $u["colunas"][$q];
}
//
//inclui as colunas da primeira tabela
//
$colunasPrimeiraTabela = "'' as codigo".$regiao["codigo_tipo_regiao"].","."'' as nome".$regiao["codigo_tipo_regiao"].",";
$mascara = str_replace("__COLUNAS__",$colunasPrimeiraTabela."__COLUNAS__",$u["mascara"]);
$u["select"] = str_replace("__COLUNAS__",implode(",",$colunasVazias),$mascara);
$temp = converte($chavesRegiao[$a["join"]]["nome_tipo_regiao"]);
$niveisXml1[] = "
";
$niveisXml2[] = "
";
$unico = "false";
}
//inclui a selecao se houver
$sqlreg = "";
if(!empty($selecaoRegiao[$regiao["codigo_tipo_regiao"]])){
$rs = $selecaoRegiao[$regiao["codigo_tipo_regiao"]];
$sqlreg = " WHERE tabela{$regiao["codigo_tipo_regiao"]}.".$rs["sql"];
}
$xml1 .= "
".$dadosSelect["select"].$sqlreg."
";
$xml2 .= "
".$dadosSelect["select"].$sqlreg."
";
$niveisXml1 = array_reverse($niveisXml1);
$niveisXml2 = array_reverse($niveisXml2);
$xml1 .= implode(" ",$niveisXml1);
$xml2 .= implode(" ",$niveisXml2);
$xml1 .= "
";
$xml2 .= "
";
$xmlRegioes[$regiao["codigo_tipo_regiao"]] = array(
"xml" => $xml1.$xml2,
"juncoes" => $dadosSelect["juncoes"],
"codigo_tipo_regiao"=> $regiao["codigo_tipo_regiao"],
"colunas" => $dadosSelect["colunas"],
"nomesColunas"=> $dadosSelect["nomesColunas"],
"codRegioes"=>$dadosSelect["codRegioes"]
);
}
return $xmlRegioes;
}
function dimensoesOutras(){
global $m,$nivelDaDimensao;
$parametros = $m->listaTodosParametros();
$dimOutras = array();
foreach($parametros as $p){
//apenas as nao tempo
if($p["tipo"] < 1 || $p["tipo"] > 5){
$k = $p["esquema"]."_".$p["tabela"]."_".$p["coluna"];
if(empty($tbs[$k])){
$dimOutras[$k] = $p;
}
else{
array_push($dimOutras[$k],$p);
}
}
}
$xml3 = "";
foreach($dimOutras as $d){
$k = $d["esquemadb"]."_".$d["tabela"]."_".$d["coluna"];
$xml3 .= "
";
//cria uma view juntando as tabelas da hierarquia de regioes
$colunas = "dim.{$d['coluna']}::text as codigo, ";
$colunas .= "dim.{$d['coluna']} AS nome";
$sql = "SELECT {$colunas} FROM ".$d['esquemadb'].".".$d['tabela']." as dim group by codigo,nome";
$xml3 .= "$sql";
$xml3 .= "
";
$nivelDaDimensao[$k] = converte($d["nome"]);
$xml3 .= "
";
}
return $xml3;
}
function dimensoesTabelas(){
global $VirtualCubeDimensionDaMedida, $CubosPorMedida, $nivelDaDimensao, $dimRegioes, $filhosDaRegiao, $m, $VirtualCubeDimension, $VirtualCubeMeasure, $chavesRegiao, $medidas, $codigo_tipo_regiao, $VirtualCubeDimensionDaRegiao, $VirtualCubeMeasureDaRegiao;
$xml = "";
$tbs = array();
foreach($medidas as $medida){
if($medida["codigo_tipo_regiao"] > 0 && ($codigo_tipo_regiao == "" || $medida["codigo_tipo_regiao"] == $codigo_tipo_regiao)){
$k = $medida["esquemadb"].$medida["tabela"]." ".$medida["filtro"];
if(!isset($tbs[$k])){
$tbs[$k] = array($medida);
}
else{
array_push($tbs[$k],$medida);
}
$CubosPorMedida[$medida["nome_variavel"]] = array();
$VirtualCubeDimensionDaMedida[$medida["nome_variavel"]] = array();
}
}
//monta os cubos para cada esquema.tabela diferente
foreach($tbs as $tb){
//cabecalho de cada cubo obtido da primeira medida
$c = $tb[0];
$VirtualCubeDimension[] = "
";
$VirtualCubeDimension[] = "
";
if(array_key_exists($c["codigo_tipo_regiao"],$VirtualCubeDimensionDaRegiao)){
array_push(
$VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]],
""
);
array_push(
$VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]],
""
);
}
if(array_key_exists($c["nome_variavel"],$VirtualCubeDimensionDaMedida)){
array_push(
$VirtualCubeDimensionDaMedida[$c["nome_variavel"]],
""
);
array_push(
$VirtualCubeDimensionDaMedida[$c["nome_variavel"]],
""
);
}
//verifica as dimensoes do tipo tempo
$dimEnsoes = array();
foreach($tb as $medida){
$parametros = $m->listaParametro($medida["id_medida_variavel"],"","",false,false);
$parComposto = array(); //guarda a composicao da chave que liga com a dimensao
$colunaAdicionais = array();
//parametro do tipo tempo
if(count($parametros) > 0){
foreach($parametros as $parametro){
if($parametro["tipo"] < 5 && $parametro["tipo"] > 0){
$parComposto[] = $parametro["coluna"];
}
}
$VirtualCubeDimension[] = "
";
$u = "
";
$dimEnsoes[] = $u;
if(array_key_exists($c["codigo_tipo_regiao"],$VirtualCubeDimensionDaRegiao)){
array_push($VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]],"");
}
}
//outros parametros
$outrosParametros = array();
foreach($parametros as $parametro){
$k = $parametro["esquemadb"]."_".$parametro["tabela"]."_".$parametro["coluna"];
if($parametro["tipo"] > 5 || $parametro["tipo"] == 0){
$outrosParametros[] = $k;
$VirtualCubeDimension[] = "";
$u = "";
$dimEnsoes[] = $u;
if(array_key_exists($c["codigo_tipo_regiao"],$VirtualCubeDimensionDaRegiao)){
array_push($VirtualCubeDimensionDaRegiao[$c["codigo_tipo_regiao"]],"");
}
}
}
}
//$dimEnsoes[] = '';
$xml .= "";
$incluirChaves = array("tabelamedida{$c["id_medida_variavel"]}.*");
//colunas quando o nome da coluna com os valores for vazia
foreach($tb as $mdd){
if($mdd["colunavalor"] == "" && $mdd["filtro"] == ""){
$incluirChaves[] = "'1'::numeric as contagem".$mdd["id_medida_variavel"];
}
if($mdd["colunavalor"] == "" && $mdd["filtro"] != ""){
$mdd["filtro"] = str_replace('"',"'",$mdd["filtro"]);
$incluirChaves[] = "CASE WHEN {$mdd["filtro"]} THEN 1 ELSE 0 END as contagem".$mdd["id_medida_variavel"];
}
}
if(count($parComposto) > 0){
//$sql = "select *,".implode("||'-'||",$parComposto)."::text as ".implode("_",$parComposto)."_ from {$c["esquemadb"]}.{$c["tabela"]}";
$incluirChaves[] = implode("||'-'||",$parComposto)."::text as ".implode("_",$parComposto)."_";
}
if(count($outrosParametros) > 0){
foreach($outrosParametros as $o){
//$incluirChaves[] = $o."::text as ".$o."_";
}
}
$r = $chavesRegiao[$c["codigo_tipo_regiao"]];
$sql = "
select ".implode(",",$incluirChaves).", tabelamedida{$c["id_medida_variavel"]}.{$c["colunaidgeo"]}::text as codigoreg
";
if(count($dimRegioes[$c["codigo_tipo_regiao"]]["colunas"]) > 0){
$sql .= ",".implode(",",$dimRegioes[$c["codigo_tipo_regiao"]]["colunas"]);
//$sql .= ",tabela{$r["codigo_tipo_regiao"]}.".implode(",tabela{$r["codigo_tipo_regiao"]}.",$dimRegioes[$c["codigo_tipo_regiao"]]["colunas"]);
}
$sql .= "
from {$c["esquemadb"]}.{$c["tabela"]} as tabelamedida{$c["id_medida_variavel"]}
JOIN {$r["esquemadb"]}.{$r["tabela"]} as tabela{$r["codigo_tipo_regiao"]}
ON tabela{$r["codigo_tipo_regiao"]}.{$r["identificador"]}::text = tabelamedida{$c["id_medida_variavel"]}.{$c["colunaidgeo"]}::text
";
$sql .= $dimRegioes[$c["codigo_tipo_regiao"]]["juncoes"];
$f = array();
foreach($tb as $mdd){
if($mdd["filtro"] != ""){
$f[] = str_replace('"',"'",$mdd["filtro"]);
}
}
if(count($f) > 0){
$sql .= " WHERE ".implode(" OR ",$f);
}
$xml .= "
$sql
";
//dimensoes vinculadas
/*
$temp = $dimRegioes[$c["codigo_tipo_regiao"]]["codRegioes"];
$temp[] = $c["codigo_tipo_regiao"];
foreach($temp as $cod){
$xml .= "
";
}
*/
foreach(array_keys($dimRegioes) as $cod){
$xml .= "
";
}
//inclui as dimensoes filhas
if(array_key_exists($c["codigo_tipo_regiao"],$filhosDaRegiao)){
foreach($filhosDaRegiao[$c["codigo_tipo_regiao"]] as $fr){
$xml .= "
";
}
}
$xml .= implode(" ",array_unique($dimEnsoes));
//inclui cada elemento em medida
foreach($tb as $medida){
$agregador = "sum";
if($medida["permitesoma"] == 0 && $medida["permitemedia"] == 1){
$agregador = "avg";
}
if($medida["permitesoma"] == 0 && $medida["permitemedia"] == 0){
$agregador = "count";
}
if($medida["colunavalor"] == ""){
$nomeColunaValor = "contagem".$medida["id_medida_variavel"];
}
else{
$nomeColunaValor = $medida["colunavalor"];
}
$xml .= "
";
$u = "
";
$VirtualCubeMeasure[] = $u;
if(!array_key_exists($c["codigo_tipo_regiao"],$VirtualCubeMeasureDaRegiao)){
array_push($VirtualCubeMeasureDaRegiao[$c["codigo_tipo_regiao"]],$u);
}
//verifica em qual variavel entra
//
$u = "";
array_push($CubosPorMedida[$c["nome_variavel"]],$u);
}
$xml .= "
";
}
return $xml;
}
function cuboTodas(){
global $VirtualCubeDimension, $VirtualCubeMeasure;
$xml = '';
$VirtualCubeDimension = array_unique($VirtualCubeDimension);
$VirtualCubeMeasure = array_unique($VirtualCubeMeasure);
$xml .= implode(" ",$VirtualCubeDimension);
$xml .= implode(" ",$VirtualCubeMeasure);
$xml .= '';
return $xml;
}
function cuboRegioes(){
global $regioes, $VirtualCubeDimensionDaRegiao, $VirtualCubeMeasureDaRegiao, $filhosDaRegiao;
$xml = "";
if(!empty($regioes)){
foreach($regioes as $regiao){
//inclui os parametros para a regiao de acordo com os filhos que possui
$d = $VirtualCubeDimensionDaRegiao[$regiao["codigo_tipo_regiao"]];
$mm = $VirtualCubeMeasureDaRegiao[$regiao["codigo_tipo_regiao"]];
foreach($filhosDaRegiao[$regiao["codigo_tipo_regiao"]] as $f){
$mm = array_merge($mm,$VirtualCubeMeasureDaRegiao[$f]);
}
if(count(array_unique($mm)) > 0){
$xml .= '';
$xml .= implode(" ",array_unique($d));
$xml .= implode(" ",array_unique($mm));
$xml .= '';
}
}
}
return $xml;
}
function cuboVariaveis(){
global $CubosPorMedida, $VirtualCubeDimensionDaMedida;
//var_dump($VirtualCubeDimensionDaMedida);exit;
$xml = "";
$chaves = array_keys($CubosPorMedida);
foreach ($chaves as $c){
$xml .= '';
$xml .= '';
$xml .= implode(" ",$VirtualCubeDimensionDaMedida[$c]);
$xml .= implode(" ",$CubosPorMedida[$c]);
$xml .= '';
}
return $xml;
}
?>