Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Shawn3001
Frequent Visitor

Creación de una medida para devolver valores resumidos basados en parámetros de informe/cortadores

Hola

Estoy trabajando con un gran conjunto de datos de tiempo de inactividad de activos de fabricación y estoy tratando de filtrar la visualización de una tabla de informes en función de los valores de un par de parámetros de nivel de informe. Imagínese un fragmento de mis datos (por desgracia, en realidad no estoy trabajando con cereales de desayuno, pero pensé que era un método divertido para el anonimato):

IdDepartamentoActivoInicio del retardoFin del retardoCausaDescripciónDuración
2924Departamento #1#1 de activos11/1/2020 1:58:03 AM11/1/2020 2:58:03 AMOperacionalMINI TRIGOS ESCARCHADOS1.00
3891Departamento #1#1 de activos11/1/2020 5:42:46 PM11/1/2020 11:59:59 PMOperacionalCAP'N CRUNCH6.29
4004Departamento #1#1 de activos11/10/2020 1:57:45 PM11/10/2020 2:20:30 PMOperacionalKRISPIES DE ARROZ0.38
4281Departamento #1#2 de activos11/10/2020 10:18:19 PM11/10/2020 11:27:31 PMOperacionalAMULETOS DE LA SUERTE1.15
3987Departamento #1#1 de activos11/10/2020 10:22:17 PM11/10/2020 11:29:26 PMOperacionalAMULETOS DE LA SUERTE1.12
3990Departamento #1#2 de activos11/10/2020 11:27:31 PM11/10/2020 11:51:47 PMOperacionalCINNAMON TOAST CRUNCH0.40
3997Departamento #1#2 de activos11/10/2020 2:45:38 PM11/10/2020 3:01:57 PMOperacionalBUCLES DE FRUTAS0.27
4229Departamento #1#1 de activos11/10/2020 8:40:13 PM11/10/2020 9:02:35 PMOperacionalKRISPIES DE ARROZ0.37
4561Departamento #1#1 de activos11/11/2020 10:30:48 AM11/11/2020 10:52:50 AMOperacionalAPPLE JACKS0.37
4528Departamento #1#1 de activos11/11/2020 10:30:48 AM11/11/2020 11:01:12 AMOperacionalAPPLE JACKS0.51
4548Departamento #1#1 de activos11/11/2020 11:40:05 AM11/11/2020 12:03:26 PMOperacionalAPPLE JACKS0.39
4582Departamento #1#1 de activos11/11/2020 11:40:05 AM11/11/2020 12:11:13 PMOperacionalAPPLE JACKS0.52
2911Departamento #1#1 de activos11/11/2020 3:44:33 PM11/11/2020 4:10:51 PMOperacionalKRISPIES DE ARROZ0.44
2912Departamento #1#1 de activos11/11/2020 3:44:33 PM11/11/2020 4:22:48 PMOperacionalKRISPIES DE ARROZ0.64
4746Departamento #1#2 de activos11/11/2020 5:57:17 PM11/11/2020 6:18:24 PMMecánicaTrix0.35
4865Departamento #1#2 de activos11/11/2020 8:34:41 PM11/11/2020 9:01:20 PMOperacionalRAISIN BRAN0.44
5311Departamento #1#1 de activos11/12/2020 3:33:43 PM11/12/2020 4:06:03 PMOperacionalRAISIN BRAN0.54
5392Departamento #1#1 de activos11/12/2020 3:33:43 PM11/12/2020 4:09:37 PMOperacionalKRISPIES DE ARROZ0.60
5312Departamento #1#2 de activos11/12/2020 3:53:43 PM11/12/2020 4:14:10 PMEléctricoVida0.34
5279Departamento #1#1 de activos11/12/2020 4:09:37 PM11/12/2020 4:28:32 PMOperacionalKRISPIES DE ARROZ0.32
5494Departamento #1#2 de activos11/12/2020 6:55:25 PM11/12/2020 7:44:23 PMEléctricoGUIJARROS AFRUTADOS0.82
5411Departamento #1#2 de activos11/12/2020 8:24:35 AM11/12/2020 8:56:04 AMOperacionalGUIJARROS DE CACAO0.52
5522Departamento #1#2 de activos11/12/2020 8:56:04 AM11/12/2020 9:23:01 AMOperacionalCheerios0.45
5618Departamento #1#1 de activos11/13/2020 10:30:55 PM11/13/2020 10:51:48 PMOperacionalESCAMAS ESCARCHADAS0.35
5751Departamento #1#1 de activos11/13/2020 11:05:38 PM11/13/2020 11:23:44 PMOperacionalCINNAMON TOAST CRUNCH0.30
5835Departamento #1#1 de activos11/13/2020 12:02:54 AM11/13/2020 12:22:52 AMOperacionalAPPLE JACKS0.33
3264Departamento #1#2 de activos11/13/2020 3:06:33 AM11/13/2020 3:22:29 AMOperacionalRAISIN BRAN0.27
3262Departamento #1#1 de activos11/13/2020 4:08:19 PM11/13/2020 4:39:46 PMMecánicaCereales0.52
3311Departamento #1#1 de activos11/13/2020 4:39:46 PM11/13/2020 5:21:13 PMOperacionalCINNAMON TOAST CRUNCH0.69

Lo que estoy intentando hacer es crear una(s) medida(s) que pueda usar para filtrar un objeto visual de tabla para los registros que cumplen los criterios de frecuencia y duración (basados en mis parámetros de nivel de informe). Por ejemplo, si el usuario solo desea ver los registros de [Descripción] que han aparecido 5 veces o más (por período de tiempo) con una [Duración] superior a 0,5, me gustaría filtrar un objeto visual para mostrar solo estos registros:

IdDepartamentoActivoInicio del retardoFin del retardoCausaDescripciónDuración
4528Departamento #1#1 de activos11/11/2020 10:30:48 AM11/11/2020 11:01:12 AMOperacionalAPPLE JACKS0.51
4582Departamento #1#1 de activos11/11/2020 11:40:05 AM11/11/2020 12:11:13 PMOperacionalAPPLE JACKS0.52
2912Departamento #1#1 de activos11/11/2020 3:44:33 PM11/11/2020 4:22:48 PMOperacionalKRISPIES DE ARROZ0.64
5392Departamento #1#1 de activos11/12/2020 3:33:43 PM11/12/2020 4:09:37 PMOperacionalKRISPIES DE ARROZ0.60

Donde me estoy quedando atascado es tratando de conservar los filtros de nivel de página para [Asset], [Department], [Delay Start] y [Cause] mientras sigue obteniendo un recuento de frecuencias preciso por período de tiempo dictado por la segmentación para [Delay Start]. Probé un monstruo absoluto (bueno al menos para mí) de una instrucción DAX, pero nunca pude obtener consistentemente el recuento de frecuencias correcto ya que los valores [Description] no son exclusivos del [Asset]. Por lo tanto, si se utilizara un código [Description] específico para varios activos, lo contaría como aplicable aunque, de forma realista, para el activo seleccionado que [Descripción] solo haya aparecido una vez.

Gravedad ?
SI (
CONTIENE (
SELECTCOLUMNS (
FILTRO (
RESUMEN ( TODO('Datos'),
FILTRO(
ALLEXCEPT(
«Datos»,
'Datos'[Activo],
'Datos'[Departamento],
'Datos'[Causa]
),
'Data'[Delay Start] >- EDATE(TODAY(),12) // Esto funciona, pero lo ideal sería basarse en la entrada del usuario a la segmentación de datos
),
'Datos'[Descripción],
"Record #s", COUNT ( 'Data'[ID] )
),
[Registro #s] > 'Muy alto'[Valor muy alto] // Este es mi parámetro de frecuencia, ajustable por el usuario
),
"Delay_Desc", [Descripción]
),
[Delay_Desc], SELECTEDVALUE ( 'Datos'[Descripción] )
),
"Catastrófico",
"-"
)

En respuesta a que esto no funciona, también intenté:

  • La creación de una tabla independiente mediante RESUME para [Departamento], [Asset], [Descripción] y el recuento de [ID], pero no pude averiguar cómo obtener esto para conservar mi configuración de segmentación de datos y el recuento de cada [Asset] no era correcto.
  • Crear una columna calculada que contenga el recuento resumido de [ID] para cada entrada de fila y es correspondiente [Descripción], pero tampoco pudo obtener esto para dar el recuento correcto.

Estoy seguro de que he hecho esto más complicado de lo necesario en mi solución de problemas. ¿Puede alguien ayudar, por favor?

11 REPLIES 11
Shawn3001
Frequent Visitor

Lo siento, sé que esto no es súper directo y probablemente estoy un poco demasiado cerca del tema para explicarlo correctamente.

Piense en la columna [Descripción] como el modo de error de un recurso. No estoy tan preocupado por los modos de falla de baja frecuencia (independientemente de la duración) porque estos no son los más perjudiciales para el activo y no voy a priorizar las acciones correctivas a los modos de error que solo pueden ocurrir una o dos veces al año. Prefiero centrarme en eventos y modos de falla repetitivos de alta frecuencia que también tienen una duración de tiempo de inactividad moderada asociada a ellos. Esta es la razón por la que busco devolver una tabla de registros que contiene valores [Description] que se producen con frecuencia dentro de mi conjunto de datos y con alta duración (según esos parámetros de qué pasaría si). Por lo tanto, en última instancia, necesito mirar individualmente la duración del tiempo de inactividad y holísticamente en la descripción del tiempo de inactividad.

¿Eso hace un mejor trabajo de explicar el propósito?

Shawn3001
Frequent Visitor

Ok, eso tiene más sentido.

Ahora, ¿cómo crearía un objeto visual de tabla para devolver cada identificador de registro individual (y detalles asociados) que calificaría como Severo? Cuando uso la función DISTINCTCOUNT dentro de la medida/tabla, muestra un 1 por cada entrada de fila, por lo que no puedo filtrar para mostrar solo las descripciones más comunes.

Su definición de grave es "un retraso "grave" sería uno que exceda un valor de duración específico Y se produce mayor que n número de veces por (en este caso) año" que implica grupos de retrasos individuales determinan la gravedad. Los retrasos individuales nunca serán severos porque son individuos.

A menos que usted quiera decir que un retraso individual por sí mismo sería grave si excediera una cierta duración. En ese caso, en la medida de gravedad que proporcioné eliminar la función AND y la condición de DelayCount > 'Delay Count'[Delay Count Value].

littlemojopuppy
Community Champion
Community Champion

Aquí está el código para todas las medidas que creé...

Delay Count = DISTINCTCOUNT(Delays[ID])

Total Delay (Hours) = 
    SUMX(
		Delays,
		DATEDIFF(
			[Delay Start],
			[Delay End],
			HOUR
		)
	)

Severity = 
VAR	DelayCount = [Delay Count]
VAR	DelayDuration = [Total Delay (Hours)]
RETURN

SWITCH(
	TRUE(),
	AND(
		DelayCount > 'Delay Count'[Delay Count Value],
		DelayDuration > 'Delay Duration'[Delay Duration Value]
	),
	"Catastrophic",
	AND(
		DelayCount > 'Delay Count'[Delay Count Value],
		DelayDuration > 'Delay Duration'[Delay Duration Value]
	),
	"Severe",
	"Normal"
)

[Recuento de retardo] es solo el recuento distinto de Delay ID. [Valor de recuento de retardo] y [Valor de duración de retardo] son los parámetros what if que el usuario podría establecer. Podría colocar Descripción en las filas de una matriz y [Recuento de retardo] y Retraso total (Horas)] como valores y calcularían en función del contexto del filtro.

littlemojopuppy_0-1608139259420.png



Shawn3001
Frequent Visitor

Gracias por la respuesta! Sin embargo, no creo que esto sea lo que estoy buscando.

Estoy buscando el recuento de [ID] por [Descripción], no necesariamente por [Asset]. Necesito conservar la selección de segmentación de datos para un activo, pero lo que realmente estoy buscando es la frecuencia con la que se usa cada código [Description] específico. Aquí es donde intenté usar la función SUMMARIZE para crear una tabla así:

Shawn3001_0-1608069176651.png

A continuación, teóricamente, podría filtrar esta tabla sumamrized a solo valores que son mayores que mi parámetro What-If, luego usar el CONTAINS (o algo similar) para evaluar fila por fila si una entrada se clasificaría como "Severe" (ver más abajo). Sin embargo, nunca podría obtener el retorno correcto de ese DAX.

Shawn3001_1-1608069901530.png

Así que estoy más que un poco confundido... usted dijo en su post original "wsombrero que estoy tratando de hacer es crear una(s) medida(s) que puedo usar para filtrar una tabla visual para los registros que cumplen con los criterios de frecuencia y duración (basados en mis parámetros de nivel de informe)". La medida de gravedad que proporcioné logra exactamente eso.

Tu "lo que realmente estoy buscando..." parece estar alrededor de la presentación o tal vez usted tiene otra idea para la implementación?

Lo sentimos, esto es un poco difícil de explicar sin ser capaz de compartir mi PBIX.

No pude descargar su PBIX así que no pude ver todo. ¿Cómo se calcula el número de ocurrencias de una [Descripción] única? El [Recuento de retardo] en su DAX de gravedad es sólo una columna de los valores de parámetro what-if, ¿correcto?

littlemojopuppy
Community Champion
Community Champion

¿Puede explicar en inglés qué significa la gravedad sin hacer referencia a su medida DAX? Esto no parece que sea muy difícil, pero difícil de averiguar lo que estaba tratando de hacer con la medida de gravedad...

Por supuesto que sí.

Un retraso "Grave" sería uno que supera un valor de duración específico Y se produce mayor que n número de veces por (en este caso) año. Dado el ejemplo anterior, esos 4 retrasos se calificarían como "Severe" o "Catastrophic" porque cada instancia supera el umbral de duración de 0,5 horas, y esos códigos de descripción específicos ("Rice Krispies" y "Apple Jacks") aparecen más de n veces dentro de todo el conjunto de datos.

¡Esperemos que tenga más sentido!

¡Hola! ¿Esto es lo que buscas?

littlemojopuppy_0-1607984574640.pnglittlemojopuppy_1-1607984617129.png

Aquí está el enlace para descargar el PBIX.


Lo siento... clic errante. Continuará...

La medida para calcular la gravedad es la siguiente...

Severity = 
VAR	DelayCount = [Delay Count]
VAR	DelayDuration = [Total Delay (Hours)]
RETURN

SWITCH(
	TRUE(),
	AND(
		DelayCount > 'Delay Count'[Delay Count Value],
		DelayDuration > 'Delay Duration'[Delay Duration Value]
	),
	"Catastrophic",
	AND(
		DelayCount > 'Delay Count'[Delay Count Value],
		DelayDuration > 'Delay Duration'[Delay Duration Value]
	),
	"Severe",
	"Normal"
)

Para que esto funcione correctamente, debe tener dos parámetros "what if" para Delay Duration y Delay Count en el modelo de datos. Puede encontrarlos en Modelado en la cinta de opciones. En resumen, esos crean la capacidad para que los usuarios determinen en qué niveles algo es catastrófico o no.

Una cosa que acabo de notar es que la medida compara el recuento de retardo / duración con el parámetro adecuado para "catastrófico" y "grave" de lo contrario volverá normal. La forma en que definí catastrófica y grave es idéntica por lo que si cumple con la definición, nunca devolverá grave (porque siempre devuelve la primera condición verdadera). Debe averiguar cómo desea modificar las definiciones para diferenciar entre las dos. Pero de lo contrario creo que esto te está dando exactamente lo que describió.

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.

Top Solution Authors