none
Top 10 en subniveles no da resultados

    Pregunta

  • Hola amigos expertos,

    Tengo un model multidimensional en SQL Server 2016 EE. Estoy realizando un cálculo con la función TOPCOUNT definido como Dynamic.

    Al desplegar los resultados en Excel, si saca los 10 materiales mas altos. Pero cuando intento hacer drill-down por la dimensión de grupo de compradores, esperaría los 10 top materiales para cada grupo. Cada grupo debe tener su propia lista, la cual puede ser distinta entre ellos y distinta al global.

    Lo que me despliega para cada grupo, son los materiales del top 10 global que obtiene en cada grupo. Es decir, si un grupo no cuenta con el material del top 10 global, sencillamente no despliega nada.

    Entiendo que el tipo Dynamic significa que recalcula para cada consulta. O, como debo especificar mi función?

    Saludos y   gracias de antemano.


    viernes, 26 de enero de 2018 8:33

Respuestas

  • Hola Miguel !!

    Mil gracias por tu respuesta. Efectivamente tenías razón. Se requería un generate. Pero no solo eso, fué un poco mas complicado de lo que me imaginaba. Y vamos a ver lo que pasa con el rendimiento, pues ciertamente, tarda HORAS en desplegar el resultado.

    Dejo aquí mi script por si alguien lo necesita.

    select {[Measures].[Bestand Gesamt]} on 0,

    NONEMPTY (
    ORDER (
    GENERATE([Zeit].[Jahre].[CY Year].Members,
    TOPCOUNT ( 
    {[Zeit].[Jahre].CURRENTMEMBER *
    [Materialwerksdaten].[Material Key].Children}, 
    5, 
    [Measures].[Bestandswert]
    )), [Measures].[Bestand Gesamt], DESC))  on 1
    from [Bestand]

    Aunque se ven raros los términos, pues está en alemán, lo importante es la estructura y las funciones. Esas si son generales.

    Suerte para quien lo requiera !!


    • Marcado como respuesta AlopezBI martes, 27 de febrero de 2018 16:24
    • Desmarcado como respuesta AlopezBI martes, 27 de febrero de 2018 16:25
    • Editado AlopezBI martes, 27 de febrero de 2018 16:26
    • Marcado como respuesta AlopezBI martes, 27 de febrero de 2018 16:26
    martes, 27 de febrero de 2018 16:23

Todas las respuestas

  • Si, se recalcula en cada consulta, pero solo una vez, así pues el conjunto se calcula al comienzo de la consulta, se hace el top 10 y a partir de ahí es estático.

    para lo que quieres hacer tienes que usar generate (y cruzar los dedos para que el rendimiento no se te destroce)

    Saludos


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

    lunes, 29 de enero de 2018 9:18
    Moderador
  • Hola Miguel !!

    Mil gracias por tu respuesta. Efectivamente tenías razón. Se requería un generate. Pero no solo eso, fué un poco mas complicado de lo que me imaginaba. Y vamos a ver lo que pasa con el rendimiento, pues ciertamente, tarda HORAS en desplegar el resultado.

    Dejo aquí mi script por si alguien lo necesita.

    select {[Measures].[Bestand Gesamt]} on 0,

    NONEMPTY (
    ORDER (
    GENERATE([Zeit].[Jahre].[CY Year].Members,
    TOPCOUNT ( 
    {[Zeit].[Jahre].CURRENTMEMBER *
    [Materialwerksdaten].[Material Key].Children}, 
    5, 
    [Measures].[Bestandswert]
    )), [Measures].[Bestand Gesamt], DESC))  on 1
    from [Bestand]

    Aunque se ven raros los términos, pues está en alemán, lo importante es la estructura y las funciones. Esas si son generales.

    Suerte para quien lo requiera !!


    • Marcado como respuesta AlopezBI martes, 27 de febrero de 2018 16:24
    • Desmarcado como respuesta AlopezBI martes, 27 de febrero de 2018 16:25
    • Editado AlopezBI martes, 27 de febrero de 2018 16:26
    • Marcado como respuesta AlopezBI martes, 27 de febrero de 2018 16:26
    martes, 27 de febrero de 2018 16:23