Example #1
0
function extract_data_level($cubename_p, $level_pivoting, $slice_p)
{
    global $xmlfile;
    $xml = simplexml_load_file($xmlfile);
    list($dim1, $hier1, $lev1, $prop1) = explode(".", $level_pivoting);
    //print "LP $dim1,$hier1,$lev1,$prop1<br>";
    foreach ($xml->Cube as $cube) {
        //print "OK<br>";
        $cubename = (string) $cube['name'];
        //print "CU $cubename<br>";
        if ($cubename == $cubename_p) {
            //print "CU FOUND $cubename_p<br>";
            foreach ($cube->DimensionUsage as $dimension) {
                $dimensionname = (string) $dimension['name'];
                if ($dimensionname == $dim1) {
                    //print "D FOUND1 $dim1<br>";
                    foreach ($xml->Dimension as $dimensioncube) {
                        $dimensionname2 = (string) $dimensioncube['name'];
                        if ($dimensionname2 == $dim1) {
                            //print "D FOUND2 $dim1<br>";
                            foreach ($dimensioncube->Hierarchy as $hier) {
                                $hiername = $hier['name'];
                                $pk_hiertable = $hier['primaryKeyTable'];
                                if ($hiername == $hier1) {
                                    //print "H FOUND $hier1<br>";
                                    foreach ($hier->Level as $level) {
                                        $levelname = $level['name'];
                                        $level_col = $level['column'];
                                        $level_table = $level['table'];
                                        if ($level_table == "") {
                                            $level_table = $pk_hiertable;
                                        }
                                        if ($levelname == $lev1) {
                                            //print "L FOUND $lev1 COL $level_col TAB $level_table<br>";
                                            ///***************where
                                            $n = strlen($slice_p);
                                            $slice_p = substr($slice_p, 0, $n - 2);
                                            $cond = explode("--", $slice_p);
                                            $nc = count($cond);
                                            $where = "";
                                            for ($i = 0; $i < $nc; $i++) {
                                                list($dim_c, $hier_c, $lev_c, $prop_c, $cond1) = explode(".", $cond[$i]);
                                                if ($dim_c == $dim1 && $hier_c == $hier1 && $lev_c == $lev1) {
                                                    $cond1 = trasforma($cond1);
                                                    $where = "{$level_table}.{$level_col} {$cond1}";
                                                }
                                            }
                                            //**********************
                                            $dataset = read_data($level_table, $level_col, $where);
                                            return $dataset;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
Example #2
0
function SQLgenerator2($cubename_sel, $levels_ser, $slice, $colonna, $ordinamento)
{
    global $xmlfile;
    $xml = simplexml_load_file($xmlfile);
    $levels = explode("-", $levels_ser);
    //print "XML $xmlfile, CUB $cubename_sel, LEV $levels_ser<br>";
    //*******************************CUBE
    $groupby = false;
    foreach ($xml->Cube as $cube) {
        $cubename = $cube['name'];
        if ($cubename == $cubename_sel) {
            $cubetable = $cube->Table;
            $cubetablename = $cubetable['name'];
            //print "CUB TABLE $cubetablename<br>";
            $nl = count($levels);
            $nj = 0;
            for ($i = 0; $i < $nl; $i++) {
                list($dim1, $hier1, $lev1, $prop1) = explode(".", $levels[$i]);
                if ($dim1 == "cube" and $hier1 == "cube" and $lev1 != "aggregate") {
                    //**************misure del cubo
                    foreach ($cube->Measure as $measure) {
                        $measurename = $measure["name"];
                        $measurecol = $measure["column"];
                        if ($measurename == $prop1) {
                            $target_list .= "{$measurecol},";
                        }
                    }
                    //misure calcolate
                    foreach ($cube->CalculatedMember as $calc_measure) {
                        $calc_measurename = $calc_measure["name"];
                        if ($calc_measurename == $prop1) {
                            $formula = $calc_measure->Formula;
                            $expr = $formula["expression"];
                            $alias = $formula["alias"];
                            $target_list .= "{$expr} as {$alias},";
                        }
                    }
                }
                if ($dim1 == "cube" and $hier1 == "cube" and $lev1 == "aggregate") {
                    //$a=eregi("(.+)\(",$prop1,$regs);
                    $a = preg_match("/(.+)\\(/", $prop1, $regs);
                    $funz = $regs[1];
                    //$a=eregi("\((.+)\)",$prop1,$regs);
                    $a = preg_match("/\\((.+)\\)/", $prop1, $regs);
                    $measurename = $regs[1];
                    foreach ($cube->Measure as $measure) {
                        $measurename2 = $measure["name"];
                        $measurecol = $measure["column"];
                        if ($measurename2 == $measurename) {
                            $target_list .= "{$funz}({$measurecol}),";
                        }
                        $groupby = true;
                    }
                    //misure calcolate
                    foreach ($cube->CalculatedMember as $calc_measure) {
                        $calc_measurename = $calc_measure["name"];
                        if ($calc_measurename == $measurename) {
                            $formula = $calc_measure->Formula;
                            $expr = $formula["expression"];
                            $alias = $formula["alias"];
                            $target_list .= "{$funz}({$expr}) as {$alias},";
                            $groupby = true;
                        }
                    }
                }
                foreach ($cube->DimensionUsage as $dimension) {
                    $dimensionname = $dimension['name'];
                    //print "d $dimensionname<br>";
                    if ($dimensionname == $dim1) {
                        $fk_cube = $dimension['foreignKey'];
                        foreach ($xml->Dimension as $dimensioncube) {
                            $dimensionname2 = $dimensioncube['name'];
                            if ($dimensionname2 == $dim1) {
                                foreach ($dimensioncube->Hierarchy as $hier) {
                                    $hiername = $hier['name'];
                                    if ($hiername == $hier1) {
                                        $pk_hier = $hier['primaryKey'];
                                        $pk_hiertable = $hier['primaryKeyTable'];
                                        if ($pk_hiertable != "") {
                                            $join[$nj] = "right join {$pk_hiertable} on {$cubetablename}.{$fk_cube}={$pk_hiertable}.{$pk_hier} ";
                                            $nj = $nj + 1;
                                        }
                                        //************************ Add join
                                        $join[$nj] = buildJoin($hier);
                                        $nj = $nj + 1;
                                        //*********************************
                                        foreach ($hier->Level as $level) {
                                            $levelname = $level['name'];
                                            if ($levelname == $lev1) {
                                                $level_table = $level['table'];
                                                if ($level_table == "") {
                                                    $level_table = $pk_hiertable;
                                                }
                                                $level_col = $level['column'];
                                                $group[$i] = "{$level_table}.{$level_col}";
                                                foreach ($level->Property as $prop) {
                                                    $propname = $prop['name'];
                                                    if ($propname == $prop1) {
                                                        $level_col = $prop['column'];
                                                        $target_list .= "{$level_table}.{$level_col},";
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    //************************************WHERE
    $n = strlen($slice);
    $slice = substr($slice, 0, $n - 2);
    $cond = explode("--", $slice);
    $nc = count($cond);
    for ($i = 0; $i < $nc; $i++) {
        list($dim_c, $hier_c, $lev_c, $prop_c, $cond1) = explode(".", $cond[$i]);
        $cond1 = trasforma($cond1);
        // Add fk_cube
        foreach ($cube->DimensionUsage as $dimension_cube) {
            $dimensionname_cube = $dimension_cube['name'];
            if ($dimensionname_cube == $dim_c) {
                $fk_cube = $dimension_cube['foreignKey'];
            }
        }
        foreach ($xml->Dimension as $dimensioncube) {
            $dimensionname = $dimensioncube['name'];
            if ($dim_c == $dimensionname) {
                foreach ($dimensioncube->Hierarchy as $hier) {
                    $hiername = $hier['name'];
                    if ($hiername == $hier_c) {
                        $pk_hier = $hier['primaryKey'];
                        $pk_hiertable = $hier['primaryKeyTable'];
                        //**********************************************
                        if ($pk_hiertable != "") {
                            $join[$nj] = "right join {$pk_hiertable} on {$cubetablename}.{$fk_cube}={$pk_hiertable}.{$pk_hier} ";
                            $nj = $nj + 1;
                        }
                        //************************ Add join
                        $join[$nj] = buildJoin($hier);
                        $nj = $nj + 1;
                        //*********************************************
                        foreach ($hier->Level as $level) {
                            $levelname = $level['name'];
                            if ($levelname == $lev_c) {
                                $level_table = $level['table'];
                                $level_col = $level['column'];
                                if ($level_table == "") {
                                    $level_table = $pk_hiertable;
                                }
                                foreach ($level->Property as $prop) {
                                    $propname = $prop['name'];
                                    if ($propname == $prop_c) {
                                        $level_col = $prop['column'];
                                        $where[$i] = "{$level_table}.{$level_col} {$cond1}";
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    //metti in AND
    $where_final = "";
    for ($i = 0; $i < $nc; $i++) {
        $where_final = $where_final . " {$where[$i]} AND ";
    }
    //***********************elimina join ridondanti
    for ($i = 0; $i < $nj; $i++) {
        for ($j = 0; $j < $nj; $j++) {
            if ($i != $j && $join[$i] == $join[$j]) {
                $join[$j] = "";
            }
        }
    }
    for ($i = 0; $i < $nj; $i++) {
        $join_final .= " {$join[$i]}";
    }
    //***********************costruisci target list
    $n = strlen($target_list);
    $target_list = substr($target_list, 0, $n - 1);
    //print $target_list;
    //******************************costruisci group by
    for ($i = 0; $i < $nl; $i++) {
        for ($j = 0; $j < $nl; $j++) {
            if ($i != $j && $group[$i] == $group[$j]) {
                $group[$j] = "";
            }
        }
    }
    for ($i = 0; $i < $nl; $i++) {
        if ($group[$i] != "") {
            $group_final .= "{$group[$i]},";
        }
    }
    $n = strlen($group_final);
    $group_final = substr($group_final, 0, $n - 1);
    //***********************costruisci query finale
    $n = strlen($where_final);
    $where_final = substr($where_final, 0, $n - 5);
    $n = strlen($where_final);
    if ($groupby == false or $group_final == "") {
        $query = "select distinct {$target_list} {$mea} from {$cubetablename} {$join_final}";
        if ($n > 1) {
            $query = "select distinct {$target_list} {$mea} from {$cubetablename} {$join_final} where {$where_final}";
        }
    } else {
        if ($n > 1) {
            $query = "select distinct {$target_list} {$mea} from {$cubetablename} {$join_final} where {$where_final} group by {$group_final}";
        } else {
            $query = "select distinct {$target_list} {$mea} from {$cubetablename} {$join_final} group by {$group_final}";
        }
    }
    //***************************ORDINAMENTO
    list($tab1, $col1) = explode(".", $colonna);
    $a = strrpos($join_final, $tab1);
    if ($tab1 != "" && $a != false && $colonna != "" && $ordinamento != "") {
        $query = "{$query} order by {$col1} {$ordinamento}";
    }
    if ($tab1 == "" && $colonna != "" && $ordinamento != "") {
        $query = "{$query} order by {$col1} {$ordinamento}";
    }
    //print "$query<br>";
    return $query;
}