Open Business Intelligence

La red del Business Intelligence

Hola. Me encuentro en la siguiente situacion y la informacion que leo es bastante dispersa. He creado un informe basado en un cubo mondrian con oracle.  La idea de este informe es que se puedan elegir una fecha de inicio y una fecha de fin entre las que filtrar los datos mostrados. Para ello veo que tengo que utilizar el parametro de tipo Date Picker. Mi tabla de hechos del cubo tiene una dimension de tiempo que es algo asi [año].[mes].[dia]. No me importaria cambiar esto si fuera necesario, pero como puedo hacer para hacer ese filtro en la consulta mdx?

Ejemplo:

 

select [Measures].[ventas] on columns, [dimension1].[Children] where Mifecha>Datepicker1 and Mifecha<DatePicker

 

He visto ejemplos con sql, pero ¿como hacerlo con MDX?

un saludo

Etiquetas: fechas, mdx

Visitas: 3059

Respuestas a esta discusión

Estimado,

 

el MDX es muy distinto al SQL, solo se parecen algunas instrucciones (sintaxis) pero la semántica es totalmente distinta, por lo cual no tengas en cuenta par nada lo que se puede hacer con SQL. Para pedir el intervalo de fechas puedes utilizar cualquier componente, el tema es que tendrás que programar (seguramente utilizando Java Script) la construcción de la consulta MDX.

Te adjunto parte de un ejemplo utilizando CDF/JavaSxcript (se ha utilizado un componente check para selección de los tiempos, pero se puede hacer con lo que gustes):

Aclaro: tendrás que analizar el código (no es complejo si conoces las tecnologías, si no las conoces te recomiendo lecturas de: HTML/CSS/JavaScript/jQuery/CDF) hago esta aclaración debido a que no es la línea principal de discusión de esta red

 



var zonaActual="";
var tiempos="";
var mdx="";
var path="Informes/recursos"

function armarConsulta() {
    t=splitJoin(tiempos,",","], [Tiempo.Fecha].[","{[Tiempo.Fecha].[","]}");
    z="{[Zona].[" + zonaActual + "]}";
    where= "where Crossjoin(" + z + "," +  s + ")";
    select = "select NON EMPTY Crossjoin({[Measures].[Valor]}, {" + t + "}) ON COLUMNS, ";
    select += "NON EMPTY {[Indicador].Children} ON ROWS from [Valores Indicadores] ";
    mdx=select + where;
    Dashboards.fireChange("mdx",mdx);
    Dashboards.processChange("fPivot"); 
}

function splitJoin(txt,split,join,ini,fin) {
    txt+="";
    var t=ini;
    t+=txt.split(split).join(join);
    t+=fin;
    return t;
}
 
getTiempos = 
{
    name: "getTiempos",
    type: "checkComponent",
    parameters:[],
    solution: "solucion",
    path: path,
    action: "getTiempos.xaction",
    parameter:"tiempos",
    separator: "<br/>",
    valueAsId: false,
    htmlObject: "gTiempos",
    executeAtStart: true,
    postExecution: function(){
        $('input[name*="getTiempos"]:first').attr('checked', false);
    }
};


fPivot = 
{
    type: "jpivot",
    name: "fPivot",
    solution: "solucion",
    path: path,
    action: "view.xaction",
    htmlObject: "gPivot",
    parameters:[["mdx","mdx"]],
    listeners: ["mdx"],
    iframeHeight: "500px",
    iframeWidth: "850px",
    executeAtStart: false
};

btnOk = 
{
    name: "btnOk",
    type: "Button",
    htmlObject: "btnOk",
    label: "Ver Reporte >",
    expression: function(){armarConsulta();},
    executeAtStart: true,
    preChange: function(){return true;},
    postChange: function(){return true;}
};

var components = [ getTiempos, btnOk, fPivot];
 
load();
 
function load(){
    Dashboards.init(components);
}

Archivos adjuntos

Gracias por responder. Sin embargo, m surge una duda ya utilizando mi consulta junto con "where [fecha1].[año].[mes].[dia]:[fecha2].[año].[mes].[dia]" con valores concretos para año, mes y dia funciona. No hay ninguna forma de leer los valores año mes y dia del date picker?

 

si esto q digo no es viable ya empiezo a mirar lo que me has pasado. nuevamente, gracias x responder

Si por supuesto, pero tendrás que utilizar JavaScript para analizar el string.

 

Saludos


Adaya Lorenzo dijo:

Gracias por responder. Sin embargo, m surge una duda ya utilizando mi consulta junto con "where [fecha1].[año].[mes].[dia]:[fecha2].[año].[mes].[dia]" con valores concretos para año, mes y dia funciona. No hay ninguna forma de leer los valores año mes y dia del date picker?

 

si esto q digo no es viable ya empiezo a mirar lo que me has pasado. nuevamente, gracias x responder

Ok y con las formulas de postprocesado no es posible realizar eso? Si utilizara JavaScript para analizarla string, donde se pondria el codigo que lo analizara? Tengo la sentencia y el parametro y me falta basicamente eso, enganchar el valor de la string con el parametro.

 

Gracias nuevamente

Puede ser en el post proceso o en la función antes de ejecutar la consulta, lo puedes ver en el ejemplo que te envié en la función armarConsulta()

 

Saludos

 

Adaya Lorenzo dijo:

Ok y con las formulas de postprocesado no es posible realizar eso? Si utilizara JavaScript para analizarla string, donde se pondria el codigo que lo analizara? Tengo la sentencia y el parametro y me falta basicamente eso, enganchar el valor de la string con el parametro.

 

Gracias nuevamente

Tenia esta formula hecha pero m dice q no tiene datos suficiente para computarla. Inicio es mi parametro tipo date picker y [dfincidencia.jincidencia] es la jerarquia.

 

=("[dfincidencia.jincidencia].["&YEAR([inicio])&"].["&MONTH([inicio])&"].["&DAY([inicio]&"]")

Estimado,

 

la verdad que tendría que conocer un poco más el contexto y valores que está retornando el datepicker, pero como adelanté no es la línea de discusión de esta red, te recomiendo plantarlo en otra web que hablen de programación y javascript.

 

Saludos


Adaya Lorenzo dijo:

Tenia esta formula hecha pero m dice q no tiene datos suficiente para computarla. Inicio es mi parametro tipo date picker y [dfincidencia.jincidencia] es la jerarquia.

 

=("[dfincidencia.jincidencia].["&YEAR([inicio])&"].["&MONTH([inicio])&"].["&DAY([inicio]&"]")

ok. Muchas gracias de todas formas!

RSS

Distintivo

Cargando…

© 2024   Creado por Emilio.   Tecnología de

Emblemas  |  Reportar un problema  |  Términos de servicio