none
Desaparecen valores en miembro calculado RRS feed

  • Pregunta

  • Buenas a todos, por primera vez hago una pregunta por aquí que me parece un lugar de encuentro y dudas genial.

    El problema que me encuentro es que he creado un miembro calculado cuyo código pego a continuación:

     

     CREATEMEMBER CURRENTCUBE.[Measures].[Ventas]
    AS case (([Transacciones].[Transaccion].CurrentMember))
    when ([Transacciones].[Transaccion].[All])
    then (([Transacciones].[Transaccion].&[13],[Measures].[N Movimientos]) +
    [Transacciones].[Transaccion].&[5], [Measures].[N Movimientos]) +
            ([Transacciones].[Transaccion].&[10], [Measures].[N Movimientos]))
        when ([Transacciones].[Transaccion].&[5])
            then ([Transacciones].[Transaccion].&[5],[Measures].[N Movimientos])
        when ([Transacciones].[Transaccion].&[10])
            then ([Transacciones].[Transaccion].&[10],[Measures].[N Movimientos])
        when ([Transacciones].[Transaccion].&[13])
            then ([Transacciones].[Transaccion].&[13],[Measures].[N Movimientos])
        else
            0
        end,
    FORMAT_STRING = "#,#.00",
    NON_EMPTY_BEHAVIOR = { [N Movimientos] },
    VISIBLE = 1 ,  DISPLAY_FOLDER = 'Recaudacin'  ;

     

    Ahora les quisiera poner en situación. Se trata de un cubo en el cual tenemos una serie de movimientos de "ventas", lo pongo entre comillas porque todos no son ventas, pueden ser otra seríe de movimientos como cambios, devoluciones,... Para identificar una parte de las ventas utilizamos la dimensión transacciones y todas los movimientos de unas determinadas transacciones son las ventas.

    Con lo cual obtengo el miembro calculado que quiero, pero hay ocasiones para las cuales pierde el valor.


    El caso subrayado y en negro es un ejemplo de perdida del valor.

     

    84 1.971,00 1.971,00
    116 18,00 18,00
    9012 618,00 618,00
    38 394,00 394,00
    84 393,00 393,00
    116 1,00 1,00
    29 68,00 68,00
    84 63,00 63,00
    116 1,00 1,00
    9012 4,00 4,00
    850 5,00 5,00
    84 5,00 5,00
    852 25,00 25,00
    84 24,00 24,00
    9012 1,00  
    855 68,00 68,00
    jueves, 23 de junio de 2011 22:20

Respuestas

  • sin una estructura de tu cubo es dificil ver porque te está haciendo el cálculo que no esperas,

    Yo haría lo siguiente,

    Si entendí tu código lo que haces es ver que miembro es el currentmember y en función de eso sumas unas cosas u otras.

    En el Caso ALL sumas los tipos 13, 10  y 5  y en el resto de los casos, ellos mismos..

    Poniendo en todos los demás 0.

    Si esto es así yo lo que haría es poner un filtro en los que solo mostrase las transacciones tipo 13,10 y 5 y pondría la medida N movimientos y al lado, este valor calculado, a ver si realmente dice o no lo mismo.

    Otra aproximación es que añadas en tu dimension transacción un atributo "es venta" y que en tu DW lo crees como un campo calculado (si es 13, 10 o 5 el código de transaccion) Con esto tu codigo quedaría mucho mas sencillo, si haces depender el atributo "es venta" del atributo codigotransaccion, además se beneficiaría de posibles agregaciones.

     

    Espero que te sirva. 


    Comparte lo que sepas, aprende lo que no sepas (FGG) http://www.portalsql.com
    • Marcado como respuesta Richard Luis martes, 28 de junio de 2011 10:11
    viernes, 24 de junio de 2011 10:29
    Moderador

Todas las respuestas

  • sin una estructura de tu cubo es dificil ver porque te está haciendo el cálculo que no esperas,

    Yo haría lo siguiente,

    Si entendí tu código lo que haces es ver que miembro es el currentmember y en función de eso sumas unas cosas u otras.

    En el Caso ALL sumas los tipos 13, 10  y 5  y en el resto de los casos, ellos mismos..

    Poniendo en todos los demás 0.

    Si esto es así yo lo que haría es poner un filtro en los que solo mostrase las transacciones tipo 13,10 y 5 y pondría la medida N movimientos y al lado, este valor calculado, a ver si realmente dice o no lo mismo.

    Otra aproximación es que añadas en tu dimension transacción un atributo "es venta" y que en tu DW lo crees como un campo calculado (si es 13, 10 o 5 el código de transaccion) Con esto tu codigo quedaría mucho mas sencillo, si haces depender el atributo "es venta" del atributo codigotransaccion, además se beneficiaría de posibles agregaciones.

     

    Espero que te sirva. 


    Comparte lo que sepas, aprende lo que no sepas (FGG) http://www.portalsql.com
    • Marcado como respuesta Richard Luis martes, 28 de junio de 2011 10:11
    viernes, 24 de junio de 2011 10:29
    Moderador
  • Gracias Miguel, muy útil tu información. Al final hemos optado por cambiar un poco la estructura del cubo y crear una tabla de hechos sólo para las ventas, ya que es lo principal para este proceso dentro del negocio.
    ----Aprendiendo cada día---- Richard Luis Díaz
    martes, 28 de junio de 2011 10:13