Filtrar por rango de fechas en una consulta mdx

Muchas veces pasa que se quiere mostrar en el reporte cierta informacion entre un rango de fechas proporcionado por el usuario a traves de los parámetros. El usuario selecciona desde y hasta cuando quiere ver la información.

Para generar esto se debe hacer una consulta mdx. La consulta al ser mdx se debe modificar de cierta forma para que contemple el rango.

Se define la query del dataset de la siguiente forma:

select {[Fecha].[2015].[Jan / 2015].[Thu 01]} on rows,
           {[Measures].[Litros Vendidos]} on columns
from [BodegaVentas]

Esta consulta mostraría solo para el 1ero de enero de 2015. Lo que se hace es modificar la consulta dinámicamente en tiempo de ejecución.

Se definen los parametros desde (año, mes, dia) y hasta (año, mes, dia)  para que el usuario pueda seleccionarlos.

Luego en el script beforeOpen del dataset se define lo siguiente.

var d=new Date(params["Anio"].value,params["Mes"].value,params["Dia"].value);
var h=new Date(params["Anio Hasta"].value,params["Mes Hasta"].value,params["Dia Hasta"].value);
var concat="";
var miembro;
var dia;
while(d.getTime()<=h.getTime()){
    dia = BirtDateTime.day(d);
    if(dia<10){
        dia= "0"+dia;
    }
    miembro = "[Fecha].["+BirtDateTime.year(d)+"].["+ BirtDateTime.month(d,3) +" / " + BirtDateTime.year(d)+"].["+ BirtDateTime.weekDay(d,5) +" "+ dia +"]";
    //La linea anterior es probable que se tenga que cambiar de acuerdo a las condiciones del cubo
    concat=concat + miembro + ",";
    d=BirtDateTime.addDay(d,1);
}
concat = concat.substring(0, concat.length - 1); // Remuevo la ultima coma que queda.
this.queryText = this.queryText.replace("[Fecha].[2015].[Jan / 2015].[Thu 01]", concat); // Se reemplaza el valor harcodeado

Basicamente lo que se hace es una consulta mdx dinamica. Se itera sobre el rango definido por el usuario y se van llenando los miembros correspondientes. Por supuesto que el código se tendrá que modificar de acuerdo a las restricciones y caracteristicas de cada cubo. La idea es presentar un caso general para  ayudar al usuario.