none
Incluir varios filtros a un KPI en un DashBoard RRS feed

  • Pregunta

  • Buenas a todos, nos estamos encontrando con un cliente que solicita tener un ScoreCards que le indique por un lado valor actual de la medida, el valor objetivo y la tendencia. Hasta aquí todo dentro de lo normal y bastante sencillo.

    Dentro de los requisitos del cliente nos solicitan que estos indicadores tengan un filtro asociado de tiempo, es decir que seleccionando un año puedan ver los valores para ese año... y el problema nos surge porque desean ver el objetivo y la tendencia en base a otro año que seleccionen. Es decir, quieren comparar dos años dentro del ScoreCards, como si tuvieran dos filtros... Por ejemplo, 2011 contra 2010 o 2010 contra 2009, ...  Con lo cual para el primer caso el objetivo sería un % más del valor de 2010, y la tendencia utilizamos una fórmula en la cual dividimos la (medida de 2011 - el valor de la medida de 2010)/medida de 2011 (el calculo es sólo un ejemplo y seguramente no sea el más acertado).

    Bajo estas condiciones para obtener el valor de la medida de 2011 y 2010 desde el calculo de la tendencia en el KPI nos es imposible, ya que sólo atiende a un filtro de fecha conectado o bien a la dimensión que le pasemos, ya que desde dentro no podemos acceder al nombre del filtro sino a elementos de MDX mediante la fórmula.

    He llegado a pensar que los ScoreCards no están pensados para este tipo de información y que igual lo más ideal sería utilizar un informe para este caso o una cuadrícula analítica, pero mediante esta entiendo que tendría que tener los calculos creados en el cubo como miembros calculados y perdería la información gráfica de los semáforos mostrada en el ScoreCards.

    Gracias de antemano a los que se lo lean entero!!! ;-)


    ----Aprendiendo cada día---- Richard Luis Díaz

    martes, 28 de febrero de 2012 16:08

Respuestas

  • igual no te entendi bien.. y lo que buscas es algo así

    ((([Measures].[Medida], [Fecha].[Calendario].CurrentMember.PrevMember ) - (([Measures].[Medida], [Fecha].[Calendario].CurrentMember)/([Measures].[Medida], [Fecha].[Calendario].CurrentMember))

    es decir no fijar el año a ahora...

    Por cierto que este kpi no te funcionará más que a nivel de año.. 

    si quieres que el año actual sea seleccionable desde el panel aplica la formula que te dije que sería algo así

    iif(Tiempofiltro.Calendario.currenmember is tiempofiltro.calendario.defaultmenter,

    ((([Measures].[Medida], STRTOMEMBER("[Fecha].[Calendario].[Año].&[" + CSTR(Year(Now())) + "]")) - (([Measures].[Medida], [Fecha].[Calendario].CurrentMember)/([Measures].[Medida], [Fecha].[Calendario].CurrentMember)),

    ((([Measures].[Medida], STRTOMEMBER("[Fecha].[Calendario].[Año].&[" + Ancestor(tiempofiltro.calendario.currenmember,tiempofiltro.calendario.[año]).member_Key + "]")) - (([Measures].[Medida], [Fecha].[Calendario].CurrentMember)/([Measures].[Medida], [Fecha].[Calendario].CurrentMember)))

    espero que se entienda.


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

    • Marcado como respuesta Richard Luis miércoles, 14 de marzo de 2012 12:02
    miércoles, 29 de febrero de 2012 10:16
    Moderador

Todas las respuestas

  • Se me hace muy raro el requisito, aún así lo que yo haría (probaría, creo que puede funcionar) es lo siguiente.

    Crearía un rol de la dimension tiempo en el cubo sin relacionar con ningun grupo de medidas,  Imaginemos que vamos a llamarla tiempofiltro y la jerarquia se va a llamar calendario.

    El codigo MDX podria ser así

    iif( tiempofiltro.jerarquia.currentmember is tiempofiltro.jerarquia.defaultmember,

    <tu codigo para  el calculo>,

    -- aquí el codigo si no.. lo que hacemos e fijar el tiempo para el calculo a lo que esté tiempo filtro

    -- para eso has de usar tiempofiltro.uniquename,  reemplazar el string tiempofiltro por tiempo o como se llame tu dimension y luego hacer un stringtomember.

    )

    Esto que te pongo es solo pseudocódigo, si no lo ves comentame y vemos de hacer algo más concreto.


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

    martes, 28 de febrero de 2012 16:42
    Moderador
  • Buenas Miguel, muchas gracias por contestar. La verdad que no entiendo muy bien lo que quieres transmitir. Hasta ahora el ScoreCard lo que contiene es un KPI con las metricas que mencionamos antes: Valor Real, Objetivo y Tendencia. Lo que hacemos ahora mismo es tener un filtro conectado al ScoreCards que nos permite seleccionar el año contra el que ellos quieren comparar el año actual, con lo cual la fórmula MDX de la tendencia por ejemplo quedaba de la siguiente forma:

    ((([Measures].[Medida], STRTOMEMBER("[Fecha].[Calendario].[Año].&[" + CSTR(Year(Now())) + "]")) - (([Measures].[Medida], [Fecha].[Calendario].CurrentMember)/([Measures].[Medida], [Fecha].[Calendario].CurrentMember))

    Donde el currentMember de la dimensión Fecha nos tomaba el valor de año seleccionado en el filtro del Panel, y la cadena montada con SRTTOMEMBER nos devuelve el año actual.

    Ahora bien el problema incrementa porque el cliente también desea que "el año actual sea seleccionable desde el panel" para poder comparar dos años cualquiera y si conectamos dos filtros al scoreCard no sabemos como acceder a cada uno de ellos dentro de la fórmula arriba expuesta, es es el calculo de la tendencia dentro del KPI.

    Hago esta aclaración por si nos puede servir de ayuda, ya que yo no me oriento bien en el ejemplo que indicas anteriormente.


    ----Aprendiendo cada día---- Richard Luis Díaz

    miércoles, 29 de febrero de 2012 7:57
  • igual no te entendi bien.. y lo que buscas es algo así

    ((([Measures].[Medida], [Fecha].[Calendario].CurrentMember.PrevMember ) - (([Measures].[Medida], [Fecha].[Calendario].CurrentMember)/([Measures].[Medida], [Fecha].[Calendario].CurrentMember))

    es decir no fijar el año a ahora...

    Por cierto que este kpi no te funcionará más que a nivel de año.. 

    si quieres que el año actual sea seleccionable desde el panel aplica la formula que te dije que sería algo así

    iif(Tiempofiltro.Calendario.currenmember is tiempofiltro.calendario.defaultmenter,

    ((([Measures].[Medida], STRTOMEMBER("[Fecha].[Calendario].[Año].&[" + CSTR(Year(Now())) + "]")) - (([Measures].[Medida], [Fecha].[Calendario].CurrentMember)/([Measures].[Medida], [Fecha].[Calendario].CurrentMember)),

    ((([Measures].[Medida], STRTOMEMBER("[Fecha].[Calendario].[Año].&[" + Ancestor(tiempofiltro.calendario.currenmember,tiempofiltro.calendario.[año]).member_Key + "]")) - (([Measures].[Medida], [Fecha].[Calendario].CurrentMember)/([Measures].[Medida], [Fecha].[Calendario].CurrentMember)))

    espero que se entienda.


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

    • Marcado como respuesta Richard Luis miércoles, 14 de marzo de 2012 12:02
    miércoles, 29 de febrero de 2012 10:16
    Moderador
  • Buenas Miguel, creo haberte entendido y que me puede valer, así que muchas gracias. Pasaré a probarlo en el entorno de desarrollo y te iré comentando como me va y si consigo el objetivo. Sólo una cuestión más... cuando te refieres a crear un rol de la dimensión sería incluir una nueva dimensión al cubo desde el diseño del mismo, lo que implica procesar de nuevo el cubo. ¿Estoy en lo cierto?

    Nuevamente gracias.


    ----Aprendiendo cada día---- Richard Luis Díaz

    miércoles, 29 de febrero de 2012 11:05
  • Pues la verdad es que .. me pillas. Mi idea es no unirla a ningún grupo de medidas pero nunca lo probé, así que no se si te dejaría. Si te deja, creo que no te desprocesa el cubo, porque los únicos grupos de medidas que se desprocesan son los que se ven afectados por la nueva dimensión. (y no sería una nueva dimension sino la tiempo en otro rol).

    pruebalo y me cuentas.


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

    miércoles, 29 de febrero de 2012 11:50
    Moderador
  • Buenas Miguel, lo he implementado tanto en un entorno desarrollo como en real y funciona muy bien.

    Próximamente intentaré escribir varios post en mi blog para tratar de explicar todo la experiencia que hemos tenido durante el desarrollo del cuadro de mandos, ya que nos encontramos con varias cosas que desde mi punto de vista son interesantes. Además de aprovechar los mismos para comentar tu gran ayuda!

    Muchas gracias por tu colaboración!


    ----Aprendiendo cada día---- Richard Luis Díaz

    miércoles, 14 de marzo de 2012 12:06
  • ¿Y podemos saber cual es ese blog?.

    Me interesaría seguirlo.

    Gracias.

    miércoles, 28 de marzo de 2012 13:35
  • Genial!


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

    miércoles, 28 de marzo de 2012 14:52
    Moderador