none
MDX incorrecta RRS feed

  • Pregunta

  • Hola,

    Queria comentaros a ver que os parece. Vereis tengo la siguiente MDX:

    sum([Claves actividad].[Claves actividad].&[11 Bajas],[Measures].[Horas consumidas])

    El caso es que como veis, cuando pongo la clave de actividad, en aquellas que no son de tipo "11 bajas" me muestra los 5.5 que son las horas de baja que tiene ese recurso, pero me las repite en todas las claves

    Porque ocurre esto?

    gracias.

    Edit:

    Me parece que he hecho una pregunta tonta de narices.


    viernes, 14 de marzo de 2014 14:10

Respuestas

  • Hola @the_txeriff,

    En la medida calculada que has construido con ese MDX estás forzando el contexto del calculo a al miembro especificado (11 - bajas), por lo que da igual cual sea el currentmember (miembro actual) cuando segmentas ese calculo por ese atributo, siempre mostrará el valor para el miembro especificado en el MDX. 

    Si lo que quieres es que no te muestre nada cuando se esté segmentando por ese atributo, para el resto de los miembros tienes que hacerlo con un case o iif:

    case when [Claves actividad].[Claves actividad].currentmember is [Claves actividad].[Claves actividad].[All]
    
    then sum([Claves actividad].[Claves actividad].&[11 Bajas],[Measures].[Horas consumidas])
    
    else iif([Claves actividad].[Claves actividad].currentmember is [Claves actividad].[Claves actividad].&[11 Bajas], [Measures].[Horas consumidas],null)
    
    end




    Víctor M. García Sánchez. Hope this help. Please vote if you find this posting was helpful. if this is an answer to your question, please mark it. http://bifase.blogspot.com | http://twitter.com/atharky

    • Marcado como respuesta the_txeriff lunes, 17 de marzo de 2014 9:15
    lunes, 17 de marzo de 2014 9:00

Todas las respuestas

  • Hola @the_txeriff,

    En la medida calculada que has construido con ese MDX estás forzando el contexto del calculo a al miembro especificado (11 - bajas), por lo que da igual cual sea el currentmember (miembro actual) cuando segmentas ese calculo por ese atributo, siempre mostrará el valor para el miembro especificado en el MDX. 

    Si lo que quieres es que no te muestre nada cuando se esté segmentando por ese atributo, para el resto de los miembros tienes que hacerlo con un case o iif:

    case when [Claves actividad].[Claves actividad].currentmember is [Claves actividad].[Claves actividad].[All]
    
    then sum([Claves actividad].[Claves actividad].&[11 Bajas],[Measures].[Horas consumidas])
    
    else iif([Claves actividad].[Claves actividad].currentmember is [Claves actividad].[Claves actividad].&[11 Bajas], [Measures].[Horas consumidas],null)
    
    end




    Víctor M. García Sánchez. Hope this help. Please vote if you find this posting was helpful. if this is an answer to your question, please mark it. http://bifase.blogspot.com | http://twitter.com/atharky

    • Marcado como respuesta the_txeriff lunes, 17 de marzo de 2014 9:15
    lunes, 17 de marzo de 2014 9:00
  • muchas gracias.

    Una pregunta: en la MDX has puesto el iif dentro del case pero realmente, como comentas, con uno de los 2 vale.

    lunes, 17 de marzo de 2014 9:16
  • Lo que hice fue anidar el IIF dentro del CASE pero realmente la instrucción está completa así, no es un OR.

    Se podría hacer todo por case (anidados):

    case 
          when [Claves actividad].[Claves actividad].currentmember is [Claves actividad].[Claves actividad].[All]
          then sum([Claves actividad].[Claves actividad].&[11 Bajas],[Measures].[Horas consumidas])
    
          else 
                case when [Claves actividad].[Claves actividad].currentmember is [Claves actividad].[Claves actividad].&[11 Bajas] 
                then [Measures].[Horas consumidas] 
                else null 
          end
    
    end

    o todo con un IIF (anidados)

    iif([Claves actividad].[Claves actividad].currentmember is [Claves actividad].[Claves actividad].[All], sum([Claves actividad].[Claves actividad].&[11 Bajas],[Measures].[Horas consumidas],iif([Claves actividad].[Claves actividad].currentmember is [Claves actividad].[Claves actividad].&[11 Bajas],[Measures].[Horas consumidas] ,null )


    Víctor M. García Sánchez. Hope this help. Please vote if you find this posting was helpful. if this is an answer to your question, please mark it. http://bifase.blogspot.com | http://twitter.com/atharky

    lunes, 17 de marzo de 2014 9:27
  • Entonces no la entiendo. Yo con la parte del iif me ha bastado

    iif([Claves actividad].[Claves actividad].currentmember is [Claves actividad].[Claves actividad].&[11 Bajas], [Measures].[Horas consumidas],null)

    Es decir, si es clave "11 bajas" que me saque el valor, sino null.

    No entiendo la parte del case de arriba:

    case when [Claves actividad].[Claves actividad].currentmember is [Claves actividad].[Claves actividad].[All] then sum([Claves actividad].[Claves actividad].&[11 Bajas],[Measures].[Horas consumidas])

    Aqui le dices que para todas las claves, si es "11 bajas" entonces que muestre?

    lunes, 17 de marzo de 2014 9:49
  • El primer iif no te basta, porque solo mostraría el dato si segmentas por el atributo, pero  y ¿cuando el atributo no se encuentre en ninguno de los ejes? Necesitas evaluar si el miembro es ALL para mostrar el calculo. Por eso necesitas anidar dos

    1. Evalua si es el miembro ALL, si lo es muestra el calculo  sum([Claves actividad].[Claves actividad].&[11 Bajas],[Measures].[Horas consumidas]) y finaliza el case/iif

    2. Si no es miembro ALL, muestra la medida [Measures].[Horas consumidas] solo para el miembro 11 bajas, para el resto null


    Víctor M. García Sánchez. Hope this help. Please vote if you find this posting was helpful. if this is an answer to your question, please mark it. http://bifase.blogspot.com | http://twitter.com/atharky

    lunes, 17 de marzo de 2014 10:10
  • Ahora entiendo... En el caso de mi consulta no va a cambiar, es una consulta fija, solo los "filtros" de año y poco mas.

    gracias

    lunes, 17 de marzo de 2014 10:25