none
Necesito Ordenar mi consulta con la función Order MDX RRS feed

  • Pregunta

  • Hola buenas tardes, les saludo desde México mi duda es la siguiente necesito ordenar mi consulta MDX pero yo no sé mucho de este lenguaje, el ordenamiento que deseo es:

    • Sucursales(primero)
    • Vendedor(segundo)
    • Ordenar los clientes si no tienen un grupo de clientes entonces aparecer primero
    • los clientes que tienen grupo mostrarlos hasta el final

    Venta de Clientes

    mi consulta es la siguiente:

    SELECT NON EMPTY 
    { [Measures].[Venta], [Measures].[Costo], [Measures].[Objetivo], [Measures].[VtaMesAAnterior], [Measures].[Acum.Vta], [Measures].[Acum.Obj], [Measures].[VtaAcumAAnt], [Measures].[VtaAnualAAnt], [Measures].[LY1], [Measures].[Publica] } 
    ON COLUMNS, 
    NON EMPTY 
    ( { filter ( [BM Cliente].[Cliente Id].[Cliente Id]  , [Measures].[Acum.Vta] <>0 OR [Measures].[Acum.Obj] <> 0 OR [Measures].[VtaAnualAAnt] <> 0 ) },
    [BM Cliente].[Cliente].[Cliente], 
    [BM Grupo Cliente].[Grupo Cte Largo].[Grupo Cte Largo],[BM Grupo Cliente].[Color Name].[Color Name],  [BM Grupo Cliente].[RGB].[RGB],
    [BM Vendedor].[Name Dos].[Name Dos],
    [BM Vendedor].[Sucursal].[Sucursal]
    )
    
    DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS 
    
    FROM ( SELECT ( STRTOSET(@EMP, CONSTRAINED) ) ON COLUMNS 
    FROM ( SELECT ( STRTOSET(@UO, CONSTRAINED) ) ON COLUMNS 
    FROM ( SELECT ( STRTOSET(@SUC, CONSTRAINED) ) ON COLUMNS 
    FROM ( SELECT ( STRTOSET(@VEND, CONSTRAINED) ) ON COLUMNS 
    FROM [CB_DMBM_ProgComercial_CteyLinea] ))))
    WHERE ( IIF( STRTOSET(@[TIME], CONSTRAINED).Count = 1, 
    STRTOSET(@[TIME], CONSTRAINED), [BM Tiempo].[Año].currentmember ), 
    IIF( STRTOSET(@EMP, CONSTRAINED).Count = 1, 
    STRTOSET(@EMP, CONSTRAINED), [BM Sucursal].[Empresa].currentmember ), 
    IIF( STRTOSET(@UO, CONSTRAINED).Count = 1, 
    STRTOSET(@UO, CONSTRAINED), [BM Sucursal].[Unidad Operativa].currentmember ), 
    IIF( STRTOSET(@SUC, CONSTRAINED).Count = 1, 
    STRTOSET(@SUC, CONSTRAINED), [BM Sucursal].[Sucursal].currentmember)
    , IIF( STRTOSET(@VEND, CONSTRAINED).Count = 1  , 
    STRTOSET(@VEND, CONSTRAINED), [BM Vendedor].[Vendedor].currentmember )
    )
    
    CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS
    Me gustaría aplicar la funcion Order pero no sé donde ni como ponerlo en esta consulta.


    jueves, 22 de octubre de 2015 21:03

Respuestas

  • No necesitas usar order para eso.

    en Analysis services todo absolutamente todo va ordenado, otra cosa es que sea  el orden que tu deseas.

    Lo primero que tienes que hacer es asegurarte que cada una de tus dimensiones por separado mantiene esa ordenación.

    Sucursales y vendedores será fácil, recuerda que puedes ordenar por clave o por nombre, asegúrate que tienes la ordenación adecuada.

    Sobre la ordenación por grupos, debo hacer suposiciones. Supongamos que dentro de la dimensión clientes hay un campo grupo grupoClave y un campo descripción de Grupo GrupoDescripción, Los clientes sin grupo tienen grupoClave=0, los que pertenecen a un grupo cualquier numero mayor que 0 para cada grupo. Entonces generando una jerarquía grupo -Cliente y  usando  Clientes.Grupo.Cliente.members obtendrás el orden que necesitas.

    En cuanto a esta parte filter ( [BM Cliente].[Cliente Id].[Cliente Id] , [Measures].[Acum.Vta] <>0 OR [Measures].[Acum.Obj] <> 0 OR [Measures].[VtaAnualAAnt] <> 0 )

    si Acum.vta son funciones mdx del tipo sum(ytd(), se podría mejorar quizá pero no es fácil .

    Si lo que quieres detodas formas es que no aparezcan los clientes que no tengan valor ahí es otra cosa que se podría mejorar dependiendo de como se calculen. por defecto se podría hacer un non empty  y aquellos clientes que no tengan ventas no tendrían porque salir.


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    viernes, 23 de octubre de 2015 6:54
    Moderador

Todas las respuestas

  • No necesitas usar order para eso.

    en Analysis services todo absolutamente todo va ordenado, otra cosa es que sea  el orden que tu deseas.

    Lo primero que tienes que hacer es asegurarte que cada una de tus dimensiones por separado mantiene esa ordenación.

    Sucursales y vendedores será fácil, recuerda que puedes ordenar por clave o por nombre, asegúrate que tienes la ordenación adecuada.

    Sobre la ordenación por grupos, debo hacer suposiciones. Supongamos que dentro de la dimensión clientes hay un campo grupo grupoClave y un campo descripción de Grupo GrupoDescripción, Los clientes sin grupo tienen grupoClave=0, los que pertenecen a un grupo cualquier numero mayor que 0 para cada grupo. Entonces generando una jerarquía grupo -Cliente y  usando  Clientes.Grupo.Cliente.members obtendrás el orden que necesitas.

    En cuanto a esta parte filter ( [BM Cliente].[Cliente Id].[Cliente Id] , [Measures].[Acum.Vta] <>0 OR [Measures].[Acum.Obj] <> 0 OR [Measures].[VtaAnualAAnt] <> 0 )

    si Acum.vta son funciones mdx del tipo sum(ytd(), se podría mejorar quizá pero no es fácil .

    Si lo que quieres detodas formas es que no aparezcan los clientes que no tengan valor ahí es otra cosa que se podría mejorar dependiendo de como se calculen. por defecto se podría hacer un non empty  y aquellos clientes que no tengan ventas no tendrían porque salir.


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    viernes, 23 de octubre de 2015 6:54
    Moderador
  • Buen dia Armando Gameros,

    Te recomiendo el siguiente articulo:

    https://www.mssqltips.com/3129/order-and-sort-with-mdx-in-sql-server-analysis-services/

    Saludos!

    viernes, 23 de octubre de 2015 10:46
  • Muchas Gracias por tus consejos como tu dices no es necesario aplicar la función Order con modifcar el Orden en mis dimensiones puedo ordenarlo.

    Gracias 

    viernes, 23 de octubre de 2015 14:48
  • La liga no funciona amigo :D podrías enviarla otra vez?
    viernes, 23 de octubre de 2015 14:49
  • https://www.mssqltips.com/sqlservertip/3129/order-and-sort-with-mdx-in-sql-server-analysis-services/
    viernes, 23 de octubre de 2015 15:06