¿Lógica de corte «detrás de escena»?

Un usuario Pregunto ✅

bpflueger

Estoy creando un tablero que muestra algunos KPI y métricas trimestrales para un grupo en mi organización. Quiero que los usuarios puedan seleccionar un solo trimestre (p. ej., el primer trimestre de 2017) desde una segmentación en el tablero y ver todos los KPI y las métricas logrados en ese trimestre.

Un KPI se basa en recuentos tanto del trimestre actual como del anterior. Para dar un ejemplo simple, es un porcentaje calculado como [Count of Support Cases Closed Current Quarter] / [Count of Support Cases Opened Previous Quarter]. Mi problema es que si coloco una segmentación en el tablero y el usuario selecciona el primer trimestre de 2017, los casos abiertos del cuarto trimestre de 2016 se filtran, por lo que no puedo calcular el denominador.

Obviamente, puedo obtener los números correctos codificando las fechas en mis filtros/medidas/columnas. También podría hacer esto haciendo que los usuarios seleccionen varios trimestres de varias segmentaciones (uno para la fecha de apertura, otro para la fecha de cierre) y luego los desvincule de las visualizaciones no aplicables. Idealmente, sin embargo, quiero hacer de este un tablero a prueba de usuarios con una selección de un solo trimestre y un conjunto de columnas y medidas dinámicas/genéricas.

Entonces, ¿hay alguna forma de agregar lógica a una segmentación de modo que considere múltiples valores detrás de escena? ¿Hay alguna forma de acceder al valor seleccionado en una segmentación desde una medida, para realizar la lógica en ese extremo? ¿O hay una manera más fácil de hacer esto (a través de tablas de enlaces o algo así) que no veo?

Gracias y disculpa si es una pregunta tonta 😉

Matt Brice

En respuesta a bpflueger

Si bien es cierto que solo puede tener una relación activa entre dos tablas, puede tener cualquier número de relaciones inactivas. Entonces, si crea una segunda relación inactiva entre el Calendario[Date] columna a tabla[Close Date] (conector de línea punteada = inactivo) debería poder obtener su denominador de esta manera:

KPI denominator = CALCULATE ( SUM (Table[Value]), USERELATIONSHIP ( Table[Close Date], Calendar[Date] ) ) 

Esto le dice a Dax que use la relación inactiva solo para esta medida.

dear watson

Para ampliar lo que muestra Eric:

Si tiene fechas contiguas donde cada fecha tiene datos en el modelo, puede aprovechar las funciones de inteligencia de tiempo en DAX.

En este caso, podría usar PREVIOUSQUARTER para determinar automáticamente la selección Q actual de los usuarios y calcular la métrica para el trimestre anterior, esto es instantáneo y muy útil.

Agregue una tabla de dimensiones de calendario/fecha y vincúlela a su [support case date] si no tiene fechas de ejecución… utilice CALCULATE([Count of Support Cases]TRIMESTRE ANTERIOR(Calendario[Date])) según el ejemplo de Eric… puede hacer esto para todo tipo de cálculos relacionados con el tiempo y ahorra cualquier cosa codificada.

bpflueger

En respuesta a dear watson

Gracias por las respuestas y el ejemplo!

Después de jugar con el ejemplo, creo que solo me lleva hasta la mitad. Todavía estoy luchando con cómo lidiar con varias columnas de fecha en el contexto de una sola segmentación.

No puedo compartir mis datos reales, ya que contienen algunas cosas confidenciales, pero como un ejemplo muy simple, se parece a esto:

Ejemplo de datos de casos

También tengo una tabla de calendario que se ve así:

Calendario

Hay una relación entre [Open Date] en la primera tabla y [Date] en el segundo. Power BI no me permite establecer una relación con [Close Date] al mismo tiempo por razones obvias.

Tengo tres medidas que calculo:

  1. El denominador, el número de casos que se abrieron -1 cuarto del valor seleccionado en la segmentación. Trabajando bien con la lógica sugerida PREVIOUSQUARTER.
  2. El objetivo, el 90% de los casos abiertos el último trimestre. También funcionando bien.
  3. El numerador, el número de casos que se cerraron en el trimestre seleccionado en la segmentación, independientemente de cuándo se abrieron. Aquí es donde se desmorona: cuando selecciono un trimestre en la segmentación, dado que está vinculado a la Fecha de apertura, todo lo que TAMBIÉN no se abrió en ese trimestre no se cuenta.

Entonces, para un ejemplo de los datos de muestra anteriores, digamos que quiero calcular este KPI para el segundo trimestre de 2016. Hubo un caso cerrado en el segundo trimestre (# 5678) y tres casos abiertos en el trimestre anterior Q1 (# 1234, 5678, 9012 ). Sin embargo, si selecciono Q2 de la segmentación, #5678 se filtra debido a su Fecha de apertura y no se cuenta para los casos cerrados. No siempre será así de simple, donde se compensa con un solo trimestre; pueden ser varios trimestres o incluso años.

Básicamente, si un caso no se abrió y cerró en el mismo trimestre, se está perdiendo. Sé que esto se debe a cómo está configurada mi relación, pero ¿cómo soluciono esto?

La solución simple sería vincular mi tabla de fechas a la fecha de cierre; sin embargo, la fecha de apertura es en lo que se basa el resto de métricas de este tablero; este KPI es el atípico. También podría ponerlo en una página separada con una segmentación separada, pero quiero evitar eso si es posible.

Estoy 99% seguro de que estoy pensando demasiado en esto y/o estoy haciendo algo espectacularmente tonto… pero no puedo resolverlo. ¿Algunas ideas? ¿Alguna otra información de mi configuración que pueda compartir? ¡Gracias de nuevo!

Matt Brice

En respuesta a bpflueger

Si bien es cierto que solo puede tener una relación activa entre dos tablas, puede tener cualquier número de relaciones inactivas. Entonces, si crea una segunda relación inactiva entre el Calendario[Date] columna a tabla[Close Date] (conector de línea punteada = inactivo) debería poder obtener su denominador de esta manera:

KPI denominator = CALCULATE ( SUM (Table[Value]), USERELATIONSHIP ( Table[Close Date], Calendar[Date] ) ) 

Esto le dice a Dax que use la relación inactiva solo para esta medida.

bpflueger

En respuesta a Matt Brice

¡Muchas gracias, USERRELATIONSHIP fue la panacea!

Desearía poder marcar dos soluciones. Gracias nuevamente por los consejos sobre PREVIOUSQUARTER también. 🙂

@bpflueger

Puede consultar la demostración a continuación y ajustar sus medidas en consecuencia. Consulta más detalles en el pbix adjunto.

value of currect selected Quarter = SUM('table'[Value])


value of previous Quarter currect selected = CALCULATE(SUM('table'[Value]),PREVIOUSQUARTER('calendar'[Date]))


KPI = [value of currect selected Quarter]/[value of previous Quarter currect selected]

Captura.PNG

Matt Brice

Para que alguien pueda ayudar, necesitaremos más información. Cual es el codigo de las medidas que tienes? ¿Modelo de diseño y diseño? ¿Está utilizando una tabla de calendario? ¿Funciones de inteligencia de tiempo?

Lo que desea hacer debería ser bastante fácil, pero sin algunos datos, solo estaría adivinando qué se debe hacer.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *