Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more. Get started
Necesito ayudar a actualizar automáticamente la columna FirstAttemptPass en la tabla siguiente. Me temo que mi cerebro no se está envolviendo alrededor de la lógica necesaria para lograr esto. Si necesitamos crear columnas adicionales, está bien.
En este uso, una sola prueba se compone de coincidencia de tipos de prueba oral y práctica. Mientras que un Práctico puede no tener un Oral coincidente (ver Kay, Sue, y Ron, abajo), un Oral siempre conduce a un Práctico.
Las calificaciones son satisfactorias, insatisfactorias e incompletas.
El protocolo es:
Espero haber explicado todas las condiciones. Si no es así, no dude en pedir una aclaración. He vinculado un archivo .pbix que tiene los mismos datos que la tabla insertada a continuación.
Datos de ejemplo para FirstAttemptPass
Nombre del estudiante | ActivityStart | curso | etapa | unidad | Tipo de prueba | grado | FirstAttemptPass |
anecdotario | 01/02/21 8:00 SOY | Curso 1 | Etapa 1 | Unidad 10 | oral | S | Sí |
anecdotario | 01/03/21 17:00 | Curso 1 | Etapa 1 | Unidad 10 | práctico | S | Sí |
anecdotario | 01/04/21 17:00 | Curso 1 | Etapa 2 | Unidad 17 | oral | I | |
anecdotario | 01/06/21 13:00 | Curso 1 | Etapa 2 | Unidad 17 | oral | S | Sí |
anecdotario | 01/07/21 8:00 SOY | Curso 1 | Etapa 2 | Unidad 17 | práctico | S | Sí |
Deb | 01/01/21 20:00 | Curso 2 | Etapa 1 | Unidad 12 | oral | U | No |
Deb | 01/02/21 19:00 | Curso 2 | Etapa 1 | Unidad 12 | oral | S | No |
Deb | 01/04/21 15:00 | Curso 2 | Etapa 1 | Unidad 12 | práctico | S | No |
Deb | 01/05/21 22:00 | Curso 2 | Etapa 2 | Unidad 14 | oral | S | Sí |
Deb | 01/06/21 19:00 | Curso 2 | Etapa 2 | Unidad 14 | práctico | S | Sí |
AM | 01/01/21 11:00 SOY | Curso 3 | Etapa 1 | Unidad 7 | oral | I | |
AM | 01/02/21 10:00 SOY | Curso 3 | Etapa 1 | Unidad 7 | oral | U | No |
AM | 01/03/21 19:00 | Curso 3 | Etapa 1 | Unidad 7 | oral | S | No |
AM | 01/05/21 11:00 SOY | Curso 3 | Etapa 1 | Unidad 7 | práctico | S | No |
gato | 01/01/21 10:00 SOY | Curso 1 | Etapa 1 | Unidad 10 | oral | S | No |
gato | 01/02/21 9:00 SOY | Curso 1 | Etapa 1 | Unidad 10 | práctico | I | |
gato | 01/03/21 10:00 SOY | Curso 1 | Etapa 1 | Unidad 10 | práctico | U | No |
gato | 01/05/21 7:00 SOY | Curso 2 | Etapa 1 | Unidad 9 | oral | S | Sí |
gato | 01/06/21 9:00 SOY | Curso 2 | Etapa 1 | Unidad 9 | práctico | I | |
gato | 01/07/21 15:00 | Curso 2 | Etapa 1 | Unidad 9 | práctico | S | Sí |
Kay | 01/12/21 8:30 SOY | Curso 4 | Etapa 4 | Unidad 4 | práctico | S | Sí |
su | 01/12/21 10:45 SOY | Curso 4 | Etapa 4 | Unidad 4 | práctico | I | |
su | 01/13/21 10:00 SOY | Curso 4 | Etapa 4 | Unidad 4 | práctico | S | Sí |
Ron | 14/01/21 14:30 | Curso 4 | Etapa 4 | Unidad 4 | práctico | I | |
Ron | 15/01/21 15:00 | Curso 4 | Etapa 4 | Unidad 4 | práctico | U | No |
Solved! Go to Solution.
@RicFischer
Creo que lo solucioné, por favor, compruébalo.
FirstAttemptPass Solved =
VAR __o = "Oral"
VAR __p = "Practical"
VAR __grades =
CALCULATETABLE (
Table1,
ALLEXCEPT (
Table1,
Table1[StudentName],
Table1[Course],
Table1[Stage],
Table1[Unit]
)
)
VAR Result =
SWITCH (
TRUE (),
CONTAINS ( __grades, Table1[Test Type], __o, Table1[Grade], "U" )
|| CONTAINS ( __grades, Table1[Test Type], __p, Table1[Grade], "U" ), "NO",
CONTAINS ( __grades, Table1[Test Type], __o, Table1[Grade], "S" )
&& CONTAINS ( __grades, Table1[Test Type], __p, Table1[Grade], "S" ), "YES",
NOT CONTAINS ( __grades, Table1[Test Type], __o )
&& CONTAINS ( __grades, Table1[Test Type], __p, Table1[Grade], "S" ), "YES"
)
RETURN
IF ( Table1[Grade] = "I", BLANK (), IF ( Table1[Grade] = "U", "NO", Result ) )
@RicFischer
Esto podría funcionar:
FirstAttemptPass Solved =
VAR __o = "Oral"
VAR __p = "Practical"
VAR __grades =
CALCULATETABLE (
FirstAttemptPass,
ALLEXCEPT (
FirstAttemptPass,
FirstAttemptPass[StudentName],
FirstAttemptPass[Course],
FirstAttemptPass[Stage]
// FirstAttemptPass[Unit]
),
FirstAttemptPass[CancelReason] = BLANK()
)
VAR Result =
SWITCH (
TRUE (),
CONTAINS ( __grades, FirstAttemptPass[Test Type], __o, FirstAttemptPass[Grade], "U" )
|| CONTAINS ( __grades, FirstAttemptPass[Test Type], __p, FirstAttemptPass[Grade], "U" ), "NO",
CONTAINS ( __grades, FirstAttemptPass[Test Type], __o, FirstAttemptPass[Grade], "S" )
&& CONTAINS ( __grades, FirstAttemptPass[Test Type], __p, FirstAttemptPass[Grade], "S" ), "YES",
NOT CONTAINS ( __grades, FirstAttemptPass[Test Type], __o )
&& CONTAINS ( __grades, FirstAttemptPass[Test Type], __p, FirstAttemptPass[Grade], "S" ), "YES"
)
RETURN
SWITCH(
TRUE(),
FirstAttemptPass[Grade]= "I", BLANK(),
FirstAttemptPass[CancelReason] <> BLANK(), BLANK(),
FirstAttemptPass[Grade] = "U", "NO",
Result
)
Cuando conecté la respuesta a mi Power BI, me di cuenta de que había olvidado que a mis datos de ejemplo les faltaban algunos campos cruciales (porque, en mis datos reales, los nombres de las unidades no siempre coinciden entre Oral y Práctico). Por lo tanto, estoy pidiendo por segunda vez con la esperanza de que todos ustedes sean lo suficientemente amables como para ayudarme con esto (de nuevo).
Olvidé mencionar en mi primer post que necesitaba una columna, no una medida.
Las calificaciones son satisfactorias, insatisfactorias e incompletas.
El protocolo aclarado es:
El nuevo elemento crítico es el campo MatchingCourseStageUnit. Debido a que los nombres de las unidades no siempre se alinean (un ejemplo: la unidad 9a podría ser oral y la unidad 9b podría ser práctica) en los cursos más antiguos, ahora retirados, tuve que idear un campo coincidente separado para la cordura de búsqueda.
Datos de ejemplo (mismo vínculo que antes, pero el archivo se actualiza)
Estos son mis nuevos datos de ejemplo:
Nombre del estudiante | ActivityStart | curso | etapa | unidad | CourseStageUnit | OppositeCourseStageUnit | MatchingCourseStageUnit | Tipo de prueba | grado | ManualFirstAttemptPass |
anecdotario | 01/02/21 8:00 SOY | Curso 1 | Etapa 1 | Unidad 10 Oral | Curso 1Estage 1Unidad 10 Oral | Curso 1Estage 1Unit 10 Práctico | Curso 1Estage 1Unit 10 Práctico | oral | S | Sí |
gato | 01/01/21 10:00 SOY | Curso 1 | Etapa 1 | Unidad 10 Oral | Curso 1Estage 1Unidad 10 Oral | Curso 1Estage 1Unit 10 Práctico | Curso 1Estage 1Unit 10 Práctico | oral | S | No |
anecdotario | 01/03/21 17:00 | Curso 1 | Etapa 1 | Unidad 10 Práctica | Curso 1Estage 1Unit 10 Práctico | Curso 1Estage 1Unidad 10 Oral | Curso 1Estage 1Unidad 10 Oral | práctico | S | Sí |
gato | 01/02/21 9:00 SOY | Curso 1 | Etapa 1 | Unidad 10 Práctica | Curso 1Estage 1Unit 10 Práctico | Curso 1Estage 1Unidad 10 Oral | Curso 1Estage 1Unidad 10 Oral | práctico | I | |
gato | 01/03/21 10:00 SOY | Curso 1 | Etapa 1 | Unidad 10 Práctica | Curso 1Estage 1Unit 10 Práctico | Curso 1Estage 1Unidad 10 Oral | Curso 1Estage 1Unidad 10 Oral | práctico | U | No |
anecdotario | 01/04/21 17:00 | Curso 1 | Etapa 2 | Unidad 17 Oral | Curso 1Estage 2Unidad 17 Oral | Curso 1Estage 2Unit 17 Práctico | Curso 1Estage 2Unit 17 Práctico | oral | I | |
anecdotario | 01/06/21 13:00 | Curso 1 | Etapa 2 | Unidad 17 Oral | Curso 1Estage 2Unidad 17 Oral | Curso 1Estage 2Unit 17 Práctico | Curso 1Estage 2Unit 17 Práctico | oral | S | Sí |
anecdotario | 01/07/21 8:00 SOY | Curso 1 | Etapa 2 | Unidad 17 Práctica | Curso 1Estage 2Unit 17 Práctico | Curso 1Estage 2Unidad 17 Oral | Curso 1Estage 2Unidad 17 Oral | práctico | S | Sí |
Deb | 01/01/21 20:00 | Curso 2 | Etapa 1 | Unidad 12 Oral | Curso 2Etapa 1Unidad 12 Oral | Curso 2Estage 1Unit 12 Práctico | Curso 2Estage 1Unit 12 Práctico | oral | U | No |
Deb | 01/02/21 19:00 | Curso 2 | Etapa 1 | Unidad 12 Oral | Curso 2Etapa 1Unidad 12 Oral | Curso 2Estage 1Unit 12 Práctico | Curso 2Estage 1Unit 12 Práctico | oral | S | No |
Deb | 01/04/21 15:00 | Curso 2 | Etapa 1 | Unidad 12 Práctica | Curso 2Estage 1Unit 12 Práctico | Curso 2Etapa 1Unidad 12 Oral | Curso 2Etapa 1Unidad 12 Oral | práctico | S | No |
gato | 01/05/21 7:00 SOY | Curso 2 | Etapa 1 | Unidad 9 Oral | Curso 2Estage 1Unidad 9 Oral | Curso 2Estage 1Unit 9 Práctico | Curso 2Estage 1Unit 9 Práctico | oral | S | Sí |
gato | 01/06/21 9:00 SOY | Curso 2 | Etapa 1 | Unidad 9 Práctica | Curso 2Estage 1Unit 9 Práctico | Curso 2Estage 1Unidad 9 Oral | Curso 2Estage 1Unidad 9 Oral | práctico | I | |
gato | 01/07/21 15:00 | Curso 2 | Etapa 1 | Unidad 9 Práctica | Curso 2Estage 1Unit 9 Práctico | Curso 2Estage 1Unidad 9 Oral | Curso 2Estage 1Unidad 9 Oral | práctico | S | Sí |
Deb | 01/05/21 22:00 | Curso 2 | Etapa 2 | Unidad 14 Oral | Curso 2Estage 2Unit 14 Oral | Curso 2Estage 2Unit 14 Práctico | Curso 2Estage 2Unit 14 Práctico | oral | S | Sí |
Deb | 01/06/21 19:00 | Curso 2 | Etapa 2 | Unidad 14 Práctica | Curso 2Estage 2Unit 14 Práctico | Curso 2Estage 2Unit 14 Oral | Curso 2Estage 2Unit 14 Oral | práctico | S | Sí |
AM | 01/01/21 11:00 SOY | Curso 3 | Etapa 1 | Unidad 7 Oral | Curso 3Estage 1Unidad 7 Oral | Curso 3Estage 1Unit 7 Práctico | Curso 3Estage 1Unit 7 Práctico | oral | I | |
AM | 01/02/21 10:00 SOY | Curso 3 | Etapa 1 | Unidad 7 Oral | Curso 3Estage 1Unidad 7 Oral | Curso 3Estage 1Unit 7 Práctico | Curso 3Estage 1Unit 7 Práctico | oral | U | No |
AM | 01/03/21 19:00 | Curso 3 | Etapa 1 | Unidad 7 Oral | Curso 3Estage 1Unidad 7 Oral | Curso 3Estage 1Unit 7 Práctico | Curso 3Estage 1Unit 7 Práctico | oral | S | No |
AM | 01/05/21 11:00 SOY | Curso 3 | Etapa 1 | Unidad 7 Práctica | Curso 3Estage 1Unit 7 Práctico | Curso 3Estage 1Unidad 7 Oral | Curso 3Estage 1Unidad 7 Oral | práctico | S | No |
Kay | 01/12/21 8:30 SOY | Curso 4 | Etapa 4 | Unidad 4 Práctica | Curso 4Stage 4Unit 4 Práctico | Curso 4Stage 4Unit 4 Oral | práctico | S | Sí | |
su | 01/12/21 10:45 SOY | Curso 4 | Etapa 4 | Unidad 4 Práctica | Curso 4Stage 4Unit 4 Práctico | Curso 4Stage 4Unit 4 Oral | práctico | I | ||
su | 01/13/21 10:00 SOY | Curso 4 | Etapa 4 | Unidad 4 Práctica | Curso 4Stage 4Unit 4 Práctico | Curso 4Stage 4Unit 4 Oral | práctico | S | Sí | |
Ron | 14/01/21 14:30 | Curso 4 | Etapa 4 | Unidad 4 Práctica | Curso 4Stage 4Unit 4 Práctico | Curso 4Stage 4Unit 4 Oral | práctico | I | ||
Ron | 15/01/21 15:00 | Curso 4 | Etapa 4 | Unidad 4 Práctica | Curso 4Stage 4Unit 4 Práctico | Curso 4Stage 4Unit 4 Oral | práctico | U | No |
Si alguien puede ayudar con esto, realmente lo agradecería.
Para ser más específico, necesito modificar @Fowmysolución donde se ve un campo MatchingCourseStageUnit para encontrar el curso coincidente (oral a práctico o práctico a oral) con el fin de determinar si todo el evento fue un pase por primera vez o no. por ejemplo:
En el primer registro, tenemos el primer Oral de Ana con un valor CourseStageUnit de"Course 1Stage 1Unit 10 Oral". Vemos que lo pasó (Grade="S"), por lo que necesitamos usar el campo MatchingCourseStageUnit con un valor de "Course 1Stage 1Unit 10 Practical" para buscar la unidad coincidente. La unidad coincidente sería con el mismo nombre de estudiante (Ana) y un valor de CourseStageUnit de "Course 1Stage 1Unit 10 Practical". Si eso es un Grade="S" (y es en este caso), entonces es un Sí en el cálculo FirstAttemptPass.
Si es un fracaso para cualquiera de las unidades (Grado = "U"), entonces ambas unidades necesitan un "No" y todos los demás intentos de la Oral y Práctica para el mismo estudiante, curso y etapa deben ser un "No" también, porque no lo pasaron en el primer intento.
@RicFischer
Puede probar la solución que ya proporcioné pero quitar el filtro en el [Unidad] dentro de ALLEXCEPT.
¿como sigue?
FirstAttemptPass Solved =
VAR __o = "Oral"
VAR __p = "Practical"
VAR __grades =
CALCULATETABLE (
Sheet1,
ALLEXCEPT (
Sheet1,
Sheet1[StudentName],
Sheet1[Course],
Sheet1[Stage]
// Sheet1[Unit]
)
)
VAR Result =
SWITCH (
TRUE (),
CONTAINS ( __grades, Sheet1[Test Type], __o, Sheet1[Grade], "U" )
|| CONTAINS ( __grades, Sheet1[Test Type], __p, Sheet1[Grade], "U" ), "NO",
CONTAINS ( __grades, Sheet1[Test Type], __o, Sheet1[Grade], "S" )
&& CONTAINS ( __grades, Sheet1[Test Type], __p, Sheet1[Grade], "S" ), "YES",
NOT CONTAINS ( __grades, Sheet1[Test Type], __o )
&& CONTAINS ( __grades, Sheet1[Test Type], __p, Sheet1[Grade], "S" ), "YES"
)
RETURN
IF ( Sheet1[Grade] = "I", BLANK (), IF ( Sheet1[Grade] = "U", "NO", Result ) )
Estoy recibiendo algunos ahora que son FirstAttemptPass resuelto con sí a pesar de que no tiene ninguna calificación en absoluto. Ninguna calificación es "(En blanco)" en la lista desplegable para ese campo:
Esto sucede cuando se cancela el evento, algo en lo que no pensé al plantear la pregunta. Deben ser completamente ignorados en esta fórmula. No afectan al estado de un intento posterior que se considera como un primer intento.
@RicFischer
Por favor, comparta los datos de la muestra con las calificaciones en blanco y los resultados esperados.
Archivo actualizado en el enlace original: https://drive.google.com/file/d/1OfIkdM5DbmERBG7CDbZFSsFDYA71aszY/view?usp=sharing
Notas:
Gracias, de nuevo, por su ayuda. He estado estudiando y aprendiendo de lo que ya has proporcionado para que pueda hacer esto por mi cuenta en el futuro.
@RicFischer
Esto podría funcionar:
FirstAttemptPass Solved =
VAR __o = "Oral"
VAR __p = "Practical"
VAR __grades =
CALCULATETABLE (
FirstAttemptPass,
ALLEXCEPT (
FirstAttemptPass,
FirstAttemptPass[StudentName],
FirstAttemptPass[Course],
FirstAttemptPass[Stage]
// FirstAttemptPass[Unit]
),
FirstAttemptPass[CancelReason] = BLANK()
)
VAR Result =
SWITCH (
TRUE (),
CONTAINS ( __grades, FirstAttemptPass[Test Type], __o, FirstAttemptPass[Grade], "U" )
|| CONTAINS ( __grades, FirstAttemptPass[Test Type], __p, FirstAttemptPass[Grade], "U" ), "NO",
CONTAINS ( __grades, FirstAttemptPass[Test Type], __o, FirstAttemptPass[Grade], "S" )
&& CONTAINS ( __grades, FirstAttemptPass[Test Type], __p, FirstAttemptPass[Grade], "S" ), "YES",
NOT CONTAINS ( __grades, FirstAttemptPass[Test Type], __o )
&& CONTAINS ( __grades, FirstAttemptPass[Test Type], __p, FirstAttemptPass[Grade], "S" ), "YES"
)
RETURN
SWITCH(
TRUE(),
FirstAttemptPass[Grade]= "I", BLANK(),
FirstAttemptPass[CancelReason] <> BLANK(), BLANK(),
FirstAttemptPass[Grade] = "U", "NO",
Result
)
Gracias, @Fowmy. Creo que esta solución funcionará.
También aprendí mucho de la fórmula. Se lo agradezco.
No @RicFischer ,
¿Necesita una medida o una columna?
Aquí hay una medida:
#_FirstAttemptPass =
VAR currentGrade = MAX ( Table1[Grade] )
VAR _t =
CALCULATETABLE (
VALUES ( Table1[Grade] ),
ALLEXCEPT (
Table1,
Table1[StudentName],
Table1[Course],
Table1[Stage],
Table1[Unit]
)
)
VAR result =
IF (
HASONEVALUE ( Table1[Grade] ),
SWITCH (
TRUE (),
currentGrade = "I", "",
currentGrade = "U", "No",
currentGrade = "S" && "U" IN _t, "No",
"Yes"
)
)
RETURN
result
Si esta publicación ayuda, entonces por favor considere Aceptarlo como la solución ✔️para ayudar a los otros miembros a encontrarlo más rápidamente.
@RicFischer
Creo que lo solucioné, por favor, compruébalo.
FirstAttemptPass Solved =
VAR __o = "Oral"
VAR __p = "Practical"
VAR __grades =
CALCULATETABLE (
Table1,
ALLEXCEPT (
Table1,
Table1[StudentName],
Table1[Course],
Table1[Stage],
Table1[Unit]
)
)
VAR Result =
SWITCH (
TRUE (),
CONTAINS ( __grades, Table1[Test Type], __o, Table1[Grade], "U" )
|| CONTAINS ( __grades, Table1[Test Type], __p, Table1[Grade], "U" ), "NO",
CONTAINS ( __grades, Table1[Test Type], __o, Table1[Grade], "S" )
&& CONTAINS ( __grades, Table1[Test Type], __p, Table1[Grade], "S" ), "YES",
NOT CONTAINS ( __grades, Table1[Test Type], __o )
&& CONTAINS ( __grades, Table1[Test Type], __p, Table1[Grade], "S" ), "YES"
)
RETURN
IF ( Table1[Grade] = "I", BLANK (), IF ( Table1[Grade] = "U", "NO", Result ) )
Olvidé especificar que necesitaba una columna. Considero correcta @Fowmyrespuesta y la marcaré como una solución. Pero, debido a que los datos son más complicados de lo que estaba recordando, olvidé un par de campos. Desde entonces recibí una solución aceptable, empezaré un hilo nuevo y hacer mi pregunta aclarada escribiré una respuesta a este hilo porque mi hilo nuevo estuvo marcado como spam.
Check out the September 2024 Power BI update to learn about new features.
Learn from experts, get hands-on experience, and win awesome prizes.