Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and a 50 percent discount on exams.
Get startedEarn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.
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):
Id | Departamento | Activo | Inicio del retardo | Fin del retardo | Causa | Descripción | Duración |
2924 | Departamento #1 | #1 de activos | 11/1/2020 1:58:03 AM | 11/1/2020 2:58:03 AM | Operacional | MINI TRIGOS ESCARCHADOS | 1.00 |
3891 | Departamento #1 | #1 de activos | 11/1/2020 5:42:46 PM | 11/1/2020 11:59:59 PM | Operacional | CAP'N CRUNCH | 6.29 |
4004 | Departamento #1 | #1 de activos | 11/10/2020 1:57:45 PM | 11/10/2020 2:20:30 PM | Operacional | KRISPIES DE ARROZ | 0.38 |
4281 | Departamento #1 | #2 de activos | 11/10/2020 10:18:19 PM | 11/10/2020 11:27:31 PM | Operacional | AMULETOS DE LA SUERTE | 1.15 |
3987 | Departamento #1 | #1 de activos | 11/10/2020 10:22:17 PM | 11/10/2020 11:29:26 PM | Operacional | AMULETOS DE LA SUERTE | 1.12 |
3990 | Departamento #1 | #2 de activos | 11/10/2020 11:27:31 PM | 11/10/2020 11:51:47 PM | Operacional | CINNAMON TOAST CRUNCH | 0.40 |
3997 | Departamento #1 | #2 de activos | 11/10/2020 2:45:38 PM | 11/10/2020 3:01:57 PM | Operacional | BUCLES DE FRUTAS | 0.27 |
4229 | Departamento #1 | #1 de activos | 11/10/2020 8:40:13 PM | 11/10/2020 9:02:35 PM | Operacional | KRISPIES DE ARROZ | 0.37 |
4561 | Departamento #1 | #1 de activos | 11/11/2020 10:30:48 AM | 11/11/2020 10:52:50 AM | Operacional | APPLE JACKS | 0.37 |
4528 | Departamento #1 | #1 de activos | 11/11/2020 10:30:48 AM | 11/11/2020 11:01:12 AM | Operacional | APPLE JACKS | 0.51 |
4548 | Departamento #1 | #1 de activos | 11/11/2020 11:40:05 AM | 11/11/2020 12:03:26 PM | Operacional | APPLE JACKS | 0.39 |
4582 | Departamento #1 | #1 de activos | 11/11/2020 11:40:05 AM | 11/11/2020 12:11:13 PM | Operacional | APPLE JACKS | 0.52 |
2911 | Departamento #1 | #1 de activos | 11/11/2020 3:44:33 PM | 11/11/2020 4:10:51 PM | Operacional | KRISPIES DE ARROZ | 0.44 |
2912 | Departamento #1 | #1 de activos | 11/11/2020 3:44:33 PM | 11/11/2020 4:22:48 PM | Operacional | KRISPIES DE ARROZ | 0.64 |
4746 | Departamento #1 | #2 de activos | 11/11/2020 5:57:17 PM | 11/11/2020 6:18:24 PM | Mecánica | Trix | 0.35 |
4865 | Departamento #1 | #2 de activos | 11/11/2020 8:34:41 PM | 11/11/2020 9:01:20 PM | Operacional | RAISIN BRAN | 0.44 |
5311 | Departamento #1 | #1 de activos | 11/12/2020 3:33:43 PM | 11/12/2020 4:06:03 PM | Operacional | RAISIN BRAN | 0.54 |
5392 | Departamento #1 | #1 de activos | 11/12/2020 3:33:43 PM | 11/12/2020 4:09:37 PM | Operacional | KRISPIES DE ARROZ | 0.60 |
5312 | Departamento #1 | #2 de activos | 11/12/2020 3:53:43 PM | 11/12/2020 4:14:10 PM | Eléctrico | Vida | 0.34 |
5279 | Departamento #1 | #1 de activos | 11/12/2020 4:09:37 PM | 11/12/2020 4:28:32 PM | Operacional | KRISPIES DE ARROZ | 0.32 |
5494 | Departamento #1 | #2 de activos | 11/12/2020 6:55:25 PM | 11/12/2020 7:44:23 PM | Eléctrico | GUIJARROS AFRUTADOS | 0.82 |
5411 | Departamento #1 | #2 de activos | 11/12/2020 8:24:35 AM | 11/12/2020 8:56:04 AM | Operacional | GUIJARROS DE CACAO | 0.52 |
5522 | Departamento #1 | #2 de activos | 11/12/2020 8:56:04 AM | 11/12/2020 9:23:01 AM | Operacional | Cheerios | 0.45 |
5618 | Departamento #1 | #1 de activos | 11/13/2020 10:30:55 PM | 11/13/2020 10:51:48 PM | Operacional | ESCAMAS ESCARCHADAS | 0.35 |
5751 | Departamento #1 | #1 de activos | 11/13/2020 11:05:38 PM | 11/13/2020 11:23:44 PM | Operacional | CINNAMON TOAST CRUNCH | 0.30 |
5835 | Departamento #1 | #1 de activos | 11/13/2020 12:02:54 AM | 11/13/2020 12:22:52 AM | Operacional | APPLE JACKS | 0.33 |
3264 | Departamento #1 | #2 de activos | 11/13/2020 3:06:33 AM | 11/13/2020 3:22:29 AM | Operacional | RAISIN BRAN | 0.27 |
3262 | Departamento #1 | #1 de activos | 11/13/2020 4:08:19 PM | 11/13/2020 4:39:46 PM | Mecánica | Cereales | 0.52 |
3311 | Departamento #1 | #1 de activos | 11/13/2020 4:39:46 PM | 11/13/2020 5:21:13 PM | Operacional | CINNAMON TOAST CRUNCH | 0.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:
Id | Departamento | Activo | Inicio del retardo | Fin del retardo | Causa | Descripción | Duración |
4528 | Departamento #1 | #1 de activos | 11/11/2020 10:30:48 AM | 11/11/2020 11:01:12 AM | Operacional | APPLE JACKS | 0.51 |
4582 | Departamento #1 | #1 de activos | 11/11/2020 11:40:05 AM | 11/11/2020 12:11:13 PM | Operacional | APPLE JACKS | 0.52 |
2912 | Departamento #1 | #1 de activos | 11/11/2020 3:44:33 PM | 11/11/2020 4:22:48 PM | Operacional | KRISPIES DE ARROZ | 0.64 |
5392 | Departamento #1 | #1 de activos | 11/12/2020 3:33:43 PM | 11/12/2020 4:09:37 PM | Operacional | KRISPIES DE ARROZ | 0.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é:
Estoy seguro de que he hecho esto más complicado de lo necesario en mi solución de problemas. ¿Puede alguien ayudar, por favor?
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?
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].
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.
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í:
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.
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?
¿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!
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ó.