none
Como Crear un promedio como un miembro calculado RRS feed

  • Pregunta

  • hola

    tengo una estructura jerarquica de la empresa ( gerencia,subgerencia,empleados) en una dimension y necesito calcular promedios por cada nivel de la estructura jerarquica, en relacion al tiempo. Tengo que lograr un cuadro mas o menos asi Cada nivel representa un area de la empresa, y el ultimo nivel es la lista de empleados, la idea es sacar el promedio de horas trabajadas por cada area de la empresa

                                 Año 2013
                              Cantidad        Promedio          Suma de Hrs del area /Cantidad de empleados del area
    -Gerencia1             48                                            (80+10+22)/3
       +SubGerencia11          80              80                    (80/1)
            Empleado111              80           ---
       -SubGerencia12          32              16                    (10+22)/2
            Empleado121              10           ---
            Empleado122              22           ---
    -Gerencia2              80                                         (50+30)/2
        -SubGerencia21         80                                   (50+30)/2
            Empleado211              50
            Empleado212              30

    Me pueden ayudar con la formula en mdx para crear el miembro calculado?

    Muchas gracias
    Sergio


    Salu2 Sergio T

    miércoles, 24 de julio de 2013 18:45

Respuestas

Todas las respuestas

  • Hola Sergio.

    Tengo un par de preguntas.

    1.- Tienes en número de empleados como métrica?, o también hay que calcularlo

    2.- En la cantidad Año 2013, Gerencia uno dice "48", según entiendo debería ser "112", es así o hay un calculo extra que hace para que de 48?


    Saludos


    Carlos Severino Chuquillanqui Gamarra

    viernes, 26 de julio de 2013 17:32
  • Hola Carlos,

    1.la cantidad de empleados en realidad es la cantidad de empleados que hay en la jerarquia, osea q habria q calcularlo

    2.si tienes razon, me equivoque, debe ser 112

    gracias


    Salu2 Sergio T

    jueves, 1 de agosto de 2013 20:41
  • Hola.

    Te sugiero implementar en el ETL el recuento de miembros (es una dimensión pequeña, no será costoso ni aunque haga falta recalcularlo cada vez). Una vez con ese recuento ya realizado en cada nivel de la dimensión, sólo debes realizar el cociente con la suma de horas trabajadas.

    Si así no te sirve, nos dices.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    lunes, 26 de agosto de 2013 13:42
    Moderador
  • Hola Segio sorry por la demora.

    No es recomendable hacer un recuento de miembros y ponerlos en una dimensión, ya que no necesariamente siempre habrá cantidad en dicho miembro,por lo tanto se necesita algo mas dinámico. El siguiente código cuenta solo si hay dato en cantidad, de esta forma la formula se hace dinámica.

    CREATE MEMBER CURRENTCUBE.[Measures].[test]

     AS

    iif(isleaf([nombre de la dimensión].[Nombre de la jerarquía])
    ,iif([Measures].[Cantidad]>0
        ,1
        ,null
        )
    ,sum(Descendants([nombre de la dimensión].[Nombre de la jerarquía],1),test)
    )

    Saludos.

    Si te sirvió márcalo como respuesta.

    Saludos


    Carlos Severino Chuquillanqui Gamarra

    lunes, 2 de septiembre de 2013 23:01
  • Para que te de el promedio sería:

    CREATE MEMBER CURRENTCUBE.[Measures].[test]

     AS

    iif(isleaf([nombre de la dimensión].[Nombre de la jerarquía])
    ,iif([Measures].[Cantidad]>0
        ,1
        ,null
        )
    ,[Measures].[Cantidad]/sum(Descendants([nombre de la dimensión].[Nombre de la jerarquía],1),test)
    )


    Carlos Severino Chuquillanqui Gamarra

    lunes, 2 de septiembre de 2013 23:02
  • Que tal estoy comenzando a trabajar con MDX aun no entiendo mucho, me gustaria probar tu codigo sin embargo tengo duda donde se tiene que guardar para ser ejecutado lo necesito para incluirlo en un Tablix en Reporting.

    Saludos.

    viernes, 11 de abril de 2014 18:21
  • Tienes que abrir el proyecto (La base de datos multidimensional) con Visual Studio, abrir el cubo y crear el miembro calculado en el tab "Calculations", te envío dos referencias. No dudo que el moderador dará una sugerencia que seguramente marcará como respuesta a tu consulta.

    http://technet.microsoft.com/en-us/library/ms144787.aspx

    http://technet.microsoft.com/en-us/library/ms146017.aspx

    Me cometas si te sirvio


    Carlos Severino Chuquillanqui Gamarra

    viernes, 11 de abril de 2014 18:54
  • hola

    tengo una estructura jerarquica de la empresa ( gerencia,subgerencia,empleados) en una dimension y necesito calcular promedios por cada nivel de la estructura jerarquica, en relacion al tiempo. Tengo que lograr un cuadro mas o menos asi Cada nivel representa un area de la empresa, y el ultimo nivel es la lista de empleados, la idea es sacar el promedio de horas trabajadas por cada area de la empresa

                                 Año 2013
                              Cantidad        Promedio          Suma de Hrs del area /Cantidad de empleados del area
    -Gerencia1             48                                            (80+10+22)/3
       +SubGerencia11          80              80                    (80/1)
            Empleado111              80           ---
       -SubGerencia12          32              16                    (10+22)/2
            Empleado121              10           ---
            Empleado122              22           ---
    -Gerencia2              80                                         (50+30)/2
        -SubGerencia21         80                                   (50+30)/2
            Empleado211              50
            Empleado212              30

    Me pueden ayudar con la formula en mdx para crear el miembro calculado?

    Muchas gracias
    Sergio


    Salu2 Sergio T

    Por lo que entiendo, necesitas crear para cada miembro con hijos un promedio de los hijos, cierto? Por cada miembro ya cuentas con el agregado de la medida [Cantidad] para el numerador, y para el denominador en el promedio ¿quieres el número de hijos que han contribuido o el número de hijos totales?

    En caso de que la formula sea [Cantidad] / [Hijos que han contribuido] la expresión MDX sería la siguiente

    [Cantidad] / NONEMPTY(DESCENDANTS([Dimension].[Jerarquia].Currentmember,,leaves), [Cantidad]).count


    En caso de que la formula sea [Cantidad]/[Hijos totales] simplemente elimina la función NONEMPTY

    [Cantidad] / (DESCENDANTS([Dimension].[Jerarquia].Currentmember,,leaves)).count

    He testeado con Adventure Works y la aproximación parece correcta:

    with member [Promedio # ventas] as
    	 (
    		[Measures].[Reseller Order Quantity]
    		/nonempty(
    				Descendants([Employee].[Employees].currentmember,,leaves)
    				, [Measures].[Reseller Order Quantity]  
    				).count
    		)
    select {[Measures].[Reseller Order Quantity],[Promedio # ventas] } on 0,
    [Employee].[Employees].members on 1
    from [adventure works]
    

    Otra cosa, antes de implementar un cálculo en el cubo asegurate de que funciona. Puedes hacerlo desde SQL Server Management Studio, creando una medida calculada para la sesión (como muestra la consulta adventure works). Una vez testeado, te vas al proyecto y la pones ahí como te ha comentado @Carlos Serverino


    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, 14 de abril de 2014 15:15