none
¿Cómo calcular rankings en múltiples niveles? RRS feed

  • Pregunta

  • Buenos días

      Estamos teniendo algunos problemas al usar la función de RANX (en DAX) en varios niveles de agrupación.

    Tenemos las siguientes tablas en el modelo tabular de SSAS

    • CLIENTES: Información sobre los clientes de una empresa
    • GRUCLI: Información acerca de grupos de clientes. Cada cliente está asociado con un registro de esta tabla.
    • REGFAC: Inforación sobre las facturas. Tiene una referencia al código de cliente y también (de forma redundante) al código de grupo de clientes.

    Tenemos un informe en SSRS que muestra la suma de los importes de las facturas de cada cliente en un periodo de tiempo (por ejemplo, un año) y muestra también el puesto que ocupa cada cliente respecto al total global. PAra esto, tenemos la siguiente medida definida en el modelo (ta que SSRS no tiene funciones (que yo haya visto) para hacer rankings):

    RankingActual2:=if (SUMX(RELATEDTABLE(REGFAC);REGFAC[SUMBASES])=0;0; RANKX(all(CLIENTES); sumx(RELATEDTABLE(REGFAC); REGFAC[SUMBASES])))
    

    Funciona bien, pero lo que queremos hacer ahora es lo mismo pero agupando los clientes mediante la tabla GRUCLI. Queremos que se muestre el puesto que ocupa cada grupo sobre el total (de la misma forma que antes con cada cliente), pero también queremos que para cada cliente muestre su puesto dentro del grupo (es decir, sobre el total del grupo), con una jerarquía de grupo-cliente.

    ¿Cómo podríamos hacer esto?

    Un saludo y gracias

    jueves, 3 de mayo de 2018 11:54

Todas las respuestas

  • He conseguido hacer el ranking (al menos, en su visualización de Excel) creando una vista en la BBDD que extraiga las columnas  de importes, códigos de cliente y códigos de grupo de la tabla REGFAC. ESta vista la importo al modelo bajo el nombre RESUMEN_REGFAC

    Y las medidas las he creado así:

    rangoGrupo:= RANKX(all(RESUMEN_REGFAC[REGRUPO]); sumx(RELATEDTABLE(REGFAC);REGFAC[SUMBASES]))
    
    rangoCliente:= RANKX(all(RESUMEN_REGFAC[RECLIEN]); sumx(RELATEDTABLE(REGFAC);REGFAC[SUMBASES]))

    Si el modelo lo paso a Excel para comprobar los resultados, podéis ver que funciona perfectamente:

    El rango de grupo se muestra correctamente para cada cabecera (el valor dentro del detalle de cliente es irrelevante, de hecho en el informe no se mostrará) y el rango de cliente muestra, para cada grupo, la posición del cliente.

    Hasta ahí bien, pero si ahora ese modelo lo uso en un informe creado en SSRS, me ocurre lo siguiente:

    Como se puede ver, mientras que el rango de cliente sale correcto, el de grupo no, lo cuál no lo acabo de entender (ya que en Excel funcionaba perfectamente).

    La query para el informe es:

    EVALUATE SUMMARIZECOLUMNS('RESUMEN_REGFAC'[REGRUPO], 
    'RESUMEN_REGFAC'[RECLIEN], 
    "sumabases", [sumabases], "rangoGrupo", [rangoGrupo], "rangoCliente", [rangoCliente])

    teniendo REGRUPO y RECLIEN como campos de grupo para el informe

    Y lo único que he modificado a mayores es quitar el "sum" que me generaba automáticamente en la celda de los totales para los rangos.

    ¿Alguna idea?

    Gracias

    jueves, 3 de mayo de 2018 15:26