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
Antonio195754
Helper IV
Helper IV

Ayudar a crear lógica para contar y devolver el nombre de los cursos que faltan

Hey todo,

No estoy seguro de si esto se puede hacer, pero permítanme tratar de explicar:

Tengo un conjunto de datos que tiene el nombre del empleado en una columna, los cursos de formación que han tomado en otra columna y si los cursos están completos o no completos en lo que han intentado en otra columna. En total, cada empleado debe completar 9 cursos para ser llamados 100% completos con su formación. El problema que estoy teniendo es que los datos sólo muestran como se mencionó anteriormente, lo que han intentado tomar, no importa si está completo o no. Así que algunos empleados i solo puede ver que tienen 5 cursos al lado de sus nombres (no importa si está completo o incompleto), y otros empleados voy a ver los 9 cursos (de nuevo no importa si están completos o no). En un mundo perfecto me gustaría ver todos los cursos, por empleado y si está completo o no completo; desafortunadamente ese no es el caso. Lo que estoy tratando de hacer es, ya que conozco los 9 nombres de los cursos, para encontrar una manera de hacer que PBI llame qué cursos / nombres de los cursos faltan y el recuento de esa varianza. ¿Cómo empezaría esto? Creo que tendría que hacer una tabla separada de cursos como a continuación, pero siendo un novato en PBI, no sabría cómo escribir el DAX para decir "Si el empleado A muestra 7 cursos tomados en datos sin procesar, dame el recuento de lo que falta y dame los nombres que faltan en función de la tabla de nombres del curso" Y luego encontrar una manera de enrollar eso para que funcione para cada empleado (población de 5K)

¡Por favor, ayúdenme!

Curso 1
Curso 2
Curso 3
Curso 4
Curso 5
Curso 6
Curso 7
Curso 8
Curso 9
EmpleadoCursoEstado
JoeCurso 1íntegro
Joe

Curso 2

Incompleta
JoeCurso 3íntegro
JoeCurso 4Incompleta
JoeCurso 5Incompleta
JoeCurso 6íntegro
JoeCurso 7Incompleta
MaríaCurso 3Incompleta
MaríaCurso 4Incompleta
1 ACCEPTED SOLUTION

@Antonio195754

Si regresas _count en la medida que debería darte lo que estás buscando.

Incomplete 3 =
VAR _x1 =
    CALCULATETABLE (
        VALUES ( Compliance[COURSE_NAME] ),
        Compliance[COURSE_STATUS] = "Not Complete"
    )
VAR _x2 = VALUES ( Compliance[COURSE_NAME] )
VAR _y1 = CALCULATETABLE ( Courses, INTERSECT ( Courses, _x1 ) )
VAR _y2 = CALCULATETABLE ( Courses, EXCEPT ( Courses, _x2 ) )
VAR _y = UNION ( _y1, _y2 )
VAR _count = COUNTROWS ( _y )
RETURN
    _Count

View solution in original post

16 REPLIES 16
Icey
Community Support
Community Support

Hola @Antonio195754 ,

¿Está resuelto este problema?

Si se resuelve, por favor acepte siempre las respuestas que tengan sentido como solución a su pregunta para que las personas que puedan tener la misma pregunta puedan obtener la solución directamente.

Si no, por favor hágamelo saber.

Saludos

Icey

¡Planeo probar las sugerencias hoy! Tal vez tenga que ver cómo separar cada conteo / nombre, por supuesto por fila por persona, pero voy a ver cómo se ve al principio e ir desde allí

dedelman_clng
Community Champion
Community Champion

Hola @Antonio195754 - usted estaba en el camino correcto con tener una tabla separada para los cursos. Lo que debe hacer es crear una tabla que tenga todos los empleados y todos los cursos, luego "unirse" a la tabla de estado para averiguar cuáles faltan.

Cree una nueva tabla y utilice el código siguiente:

Not Started =
EXCEPT (     //This takes all rows from the 1st table that don't match a row in the 2nd table
    CROSSJOIN ( Courses, DISTINCT ( CourseStatus[EmpID] ) ),   //This is all emp with all courses
    SUMMARIZE ( CourseStatus, Courses[CourseID], CourseStatus[EmpID] )  //This is employees+course pairs that exist in the status table
)

A continuación, puede usar ese código para mostrar los cursos que faltan o realizar más cálculos en él.

Espero que esto ayude

David

@Antonio195754

Podemos obtener algo como esto con solo unas pocas medidas:

jdbuchanan71_0-1595956710610.png

Esta es la medida para Not Taken

Not Taken = 
VAR _x = VALUES ( Data[Course] )
VAR _y = CALCULATETABLE ( Courses, EXCEPT ( Courses, _x ) )
VAR _count  = COUNTROWS ( _y )
RETURN
IF ( 
    _count = 0 || NOT HASONEVALUE(Data[Employee]), BLANK(),
    "(" & _count & ") " &
    CONCATENATEX( _y, Courses[Course], ", ")
)

He adjuntado mi archivo de muestra para que lo mires.

Lo sentimos por el retraso en la respuesta, pero mi PBI se estrelló y yo estaba fuera por un par de semanas. Acabo de volver a correr.

Así que enchufé mis puntos de datos a su lógica y tomó la fórmula sin embargo hizo algo interesante. Tanto para el completo como para el incompleto devolvió los 9 cursos. Lo que es más interesante, sin embargo, es que tengo estos gráficos de tarjetas en la parte superior de mi panel que muestra qué % de completo por curso a medida que corta y corta en el db. Bueno, cuando hago clic en una fila dentro de la columna completa para un empleado dado, hace que mis tarjetas cuenten los cursos que han tomado mostrando el 100% en las tarjetas con el nombre del curso respectivo y luego los espacios en blanco en las tarjetas para los incompletos. Para los incompletos hace lo mismo, muestra los 9 cursos. Y para el no tomado devuelve un campo en blanco. Tengo mis columnas que uso establecidas para enviar mensajes de texto de la manera en que lo haces. No tengo mis mesas unidas (bc intenté que pensar que funcionaría y no). Así que creo que mi fórmula está un poco apagada, pero casi allí.

Por último, en lugar de que los datos estén en una fila, ¿hay alguna manera de escribir el DAX que muestra el nombre del curso en filas junto con el nombre de las 3 fórmulas? Eso es, en última instancia, lo que necesito b/c i usaría entonces para crear mi recuento y % de completo/no completo para toda la población de empleados.

A continuación se muestran las fórmulas que utilicé

No está completado ?
VAR _x - CALCULATETABLE( VALUES(Courses[Courses]), Compliance[COURSE_STATUS] - "No completado" )
VAR _count - COUNTROWS ( _x )
devolución
SI (
_count de la _count de la página de la casa de la página de la casa de la 0 NOT HASONEVALUE(Compliance[PERSON_NUMBER]), BLANK(),
"(" & _count & ") " &
CONCATENATEX( _x, Cursos[Cursos], ", ")
)
Completado ?
VAR _x - CALCULATETABLE( VALUES(Courses[Courses]), Compliance[COURSE_STATUS] - "Complete" )
VAR _count - COUNTROWS ( _x )
devolución
SI (
_count de la _count de la página de la casa de la página de la casa de la 0 NOT HASONEVALUE(Compliance[PERSON_NUMBER]), BLANK(),
"(" & _count & ") " &
CONCATENATEX( _x, Cursos[Cursos], ", ")
)
Cursos no tomados ?
VAR _x - VALORES ( Cursos[Cursos] )
VAR _y - CALCULATETABLE ( Cursos, EXCEPT ( Cursos, _x )
VAR _count - COUNTROWS ( _y )
devolución
SI (
_count de la _count de la página de la casa de la página de la casa de la 0 NOT HASONEVALUE(Compliance[PERSON_NUMBER]), BLANK(),
"(" & _count & ") " &
CONCATENATEX( _y, Cursos[Cursos], ", ")
)
y está devolviendo algo como esto (desalojió los nombres del curso algunos)
NombreíntegroCursos no tomadosNo completo
PR1234(9) Ética 2392054, orrupción 1044, Política 3031, Norma 92060, Polít31122, Polít 2053, presarial 2055, PC 1205, Eras Partes 2056Blanco(9) Ética 2392054, orrupción 1044, Política 3031, Norma 92060, Polít31122, Polít 2053, presarial 2055, PC 1205, Eras Partes 2056

Buscando tenerlo como:

NombreíntegroCursos no tomadosNo completo
PR1234Curso 1
PR1234 Curso 2Curso 2
PR1234Curso 3

@Antonio195754

Parte de sus medidas son mirar las tablas equivocadas, es por eso que usted está recibiendo todos 9.

Completed = 
VAR _x = CALCULATETABLE( VALUES ( Compliance[Course] ), Compliance[Status] = "Complete" )
VAR _count  = COUNTROWS ( _x )
RETURN
IF (
    _count = 0 || NOT HASONEVALUE ( Compliance[PERSON_NUMBER] ), BLANK(),
    "(" & _count & ") " &
    CONCATENATEX( _x, Compliance[Course], ", " )
)
Incomplete = 
VAR _x = CALCULATETABLE( VALUES ( Compliance[Course] ), Compliance[Status] = "Incomplete" )
VAR _count  = COUNTROWS ( _x )
RETURN
IF ( 
    _count = 0 || NOT HASONEVALUE ( Compliance[PERSON_NUMBER] ), BLANK(),
    "(" & _count & ") " &
    CONCATENATEX( _x, Compliance[Course], ", " )
)
Not Taken = 
VAR _x = VALUES ( Compliance[Course] )
VAR _y = CALCULATETABLE ( Courses, EXCEPT ( Courses, _x ) )
VAR _count  = COUNTROWS ( _y )
RETURN
IF ( 
    _count = 0 || NOT HASONEVALUE ( Compliance[PERSON_NUMBER] ), BLANK(),
    "(" & _count & ") " &
    CONCATENATEX( _y, Courses[Course], ", ")
)

No estoy seguro de entender la salida deseada. ¿Cómo puede el curso 2 ser tanto "no tomado" y "no completo" para PR1234? ¿Es algo como esto lo que estás buscando?

jdbuchanan71_0-1597805408501.png

Debe extraer los nombres de los empleados de la tabla de cumplimiento y el curso (columna 2) de la tabla de cursos. Esto creará la combinación cruzada, pero producirá un error hasta que coloque una medida en la vista también. Hay nuevas medidas en mi muestra para que las mires. ([Completado 2], [Incompleto 2], [No tomado 2])

Puede reducir el ancho de columna en el nombre del curso para que no se muestre en la tabla si desea ocultarlo.

@jdbuchanan71

Hey allí finalmente lo conseguí para trabajar y disculpas por la actualización lenta en mi extremo. Trabajar varios tableros a la vez y sólo puede golpear este cuando tengo ancho de banda para. Debería haber proporcionado mi objetivo final de lo que estoy tratando de lograr, ya que este es el primer paso. En última instancia, para mí, si el curso no es Completo O no tomado, debe contar como no completo. Así que mis disculpas en laperación de los dos, pero me gustaría que si un usuario tiene cursos no completos y / o no tomados, para aparecer juntos. Pero mi objetivo final realmente es obtener un recuento de lo que no ha sido tomado por los usuarios para que pueda calcular el % completo y % no completo por usuario. ¿Podrías ayudar con este @jdbuchanan71 ? Como probablemente sabes, no puedo cambiar mi medida a un recuento/diferenciado y he intentado crear una columna para ayudarme a combinar las dos medidas de no completa/no tomada, pero eso también me ha fallado. Lo que me gustaría hacer es simplemente crear una fórmula que me dé el recuento de no completo (de nuevo si los cursos no han sido tomados o muestra incompletos) para un usuario (s) para que pueda entonces utilizar ese recuento para alcanzar un % de no completo. Espero que tenga sentido. A continuación se muestra mi tabla actual con las fórmulas que ahora funcionan y he confirmado la precisión de comprobación de los datos sin procesar.

PERSON_NUMBERCursosNo Completo 2Curso no tomado 2
a093Conciencia PCI Conciencia PCI
a093Política de Antisoborno y Anticorrupción (ABAC) Política de Antisoborno y Anticorrupción (ABAC)
a098Conciencia PCI Conciencia PCI
a098Política de Antisoborno y Anticorrupción (ABAC) Política de Antisoborno y Anticorrupción (ABAC)
a098Política de la Ley Antimonopolio y de Competencia Política de la Ley Antimonopolio y de Competencia
a112Conciencia PCI Conciencia PCI
a112Política de Antisoborno y Anticorrupción Política de Antisoborno y Anticorrupción (ABAC)
a112Política de Seguridad de la Información Política de Seguridad de la Información

@jdbuchanan71

por cierto, sólo proporcioné 3 usuarios en la tabla como un ejemplo. La población de usuarios es más grande que eso.

@Antonio195754

Podemos combinar la lógica de los dos recuentos separados así.

Incomplete 3 = 
VAR _x1 = CALCULATETABLE( VALUES ( Compliance[Course] ), Compliance[Status] = "Incomplete" )
VAR _x2 = VALUES ( Compliance[Course] )

VAR _y1 = CALCULATETABLE ( Courses, INTERSECT ( Courses, _x1 ) )
VAR _y2 = CALCULATETABLE ( Courses, EXCEPT ( Courses, _x2 ) )

VAR _y = UNION ( _y1, _y2 )

VAR _count  = COUNTROWS ( _y )
RETURN
IF ( 
    _count = 0 || NOT HASONEVALUE ( Compliance[PERSON_NUMBER] ), BLANK(),
    CONCATENATEX( _y, Courses[Course], ", ")
)

Esto dará la lista de Incompleto y No tomar juntos.

@jdbuchanan71

JD hola otra vez. Enchufé su lógica a continuación (tenía que cambiar algunas cosas como "Incompleto" a "No completo" y los nombres de columna adecuados) y tomó la fórmula, pero volvió en blanco cuando la enchufé como una columna, y cuando lo probé como medida, devolvió todos los cursos (9 cursos) por nombre de usuario. Esperaba que la forma de la columna funcionara b/c como usted sabe que me da la opción de hacer un recuento de en lugar de la no resumir, opción, pero no tengo nada cuando lo cambié para contar. Tengo 1's cuando lo cambié a distinto conteo, pero no creo que eso es lo que estoy buscando. Hace lo siguiente se ve correctamente @jdbuchanan71 .

Además, lo que es realmente raro ahora es cuando trato de conectar el incompleto 2 y no tomó 2 medidas que me proporcionó, de vuelta a la mesa, ya no muestra la tabla que había respondido en la respuesta anterior! Muestra cada curso de nuevo por usuario en la medida incompleta 2 y no tomada 2. Los he incluido debajo de la medida incompleta. Muy raro como mi mesa no ha cambiado. Estoy usando la columna de ID de usuario, la columna del curso de la tabla de cursos, y luego las 2 medidas que me dio y funcionó la semana pasada... En última instancia, that's bien si don't trabajar b/c técnicamente que wasn't lo que estaba buscando, pero a solo un FYI de lo que está sucediendo cuando i tratar de traerlos de nuevo en.

Incompleto 3 ?
VAR _x1 - CALCULATETABLE( VALUES ( Compliance[COURSE_NAME] ), Compliance[COURSE_STATUS] á "No completado" )
VAR _x2 - VALORES ( Cumplimiento[COURSE_NAME] )

VAR _y1 - CALCULATETABLE ( Cursos, INTERSECT ( Cursos, _x1 )
VAR _y2 - CALCULATETABLE ( Cursos, EXCEPT ( Cursos, _x2 )

VAR _y - UNION ( _y1, _y2 )

VAR _count - COUNTROWS ( _y )
devolución
SI (
_count de la _count de la página de la casa de la página de la casa de la 0 NO HASONEVALUE ( Cumplimiento[PERSON_NUMBER] ), BLANK(),
CONCATENATEX( _y, Cursos[Cursos], ", ")
)

Incompleto 2 ?
VAR _x - CALCULATETABLE( VALUES ( Compliance[COURSE_NAME] ), Compliance[COURSE_STATUS] á "No completo" )
VAR _y - CALCULATETABLE ( Cursos, INTERSECT ( Cursos, _x )
VAR _count - COUNTROWS ( _y )
devolución
SI (
_count de la _count de la página de la casa de la página de la casa de la 0 NO HASONEVALUE ( Cumplimiento[PERSON_NUMBER] ), BLANK(),
CONCATENATEX( _y, Cursos[Cursos], ", ")
)
Curso no tomado 2 ?
VAR _x - VALORES ( Cumplimiento[COURSE_NAME] )
VAR _y - CALCULATETABLE ( Cursos, EXCEPT ( Cursos, _x )
VAR _count - COUNTROWS ( _y )
devolución
SI (
_count de la _count de la página de la casa de la página de la casa de la 0 NO HASONEVALUE ( Cumplimiento[PERSON_NUMBER] ), BLANK(),
CONCATENATEX( _y, Cursos[Cursos], ", ")
)

@jdbuchanan71

Mi culpa JD, tengo todas las fórmulas para trabajar y la fórmula incompleta 3 ahora está agregando las fórmulas no tomadas y no completas. Pero lo que está haciendo es simplemente mostrarme el nombre de los cursos que faltan y sólo funciona cuando lo asocio en una tabla con el Nombre del curso de la tabla Curso. ¿Hay alguna manera de que la fórmula 3 incompleta devuelva un recuento de cursos no completo por usuario sin estar en un formato de tabla? Si no es posible, entonces cerraré esta pregunta con su solución siendo aceptada, pero espero obtener el recuento de no completo por usuario para que pueda usar esos números para obtener el % completo vs no completo para la población general de usuarios.

@Antonio195754

Si regresas _count en la medida que debería darte lo que estás buscando.

Incomplete 3 =
VAR _x1 =
    CALCULATETABLE (
        VALUES ( Compliance[COURSE_NAME] ),
        Compliance[COURSE_STATUS] = "Not Complete"
    )
VAR _x2 = VALUES ( Compliance[COURSE_NAME] )
VAR _y1 = CALCULATETABLE ( Courses, INTERSECT ( Courses, _x1 ) )
VAR _y2 = CALCULATETABLE ( Courses, EXCEPT ( Courses, _x2 ) )
VAR _y = UNION ( _y1, _y2 )
VAR _count = COUNTROWS ( _y )
RETURN
    _Count

@jdbuchanan71

Eso funcionó!!! ¿Crees que este conde funcionará sin que yo tenga que tirarlo a una mesa? B /c lo que voy a hacer con ese recuento de medidas es básicamente usarlo para darme mi % de no completo. Aún no lo he probado, pero quería preguntarte antes de hacerlo.

@jdbuchanan71

JD lo que está haciendo es dejarme usar sólo la medida en una tabla 😞 Si devuelvo sólo la medida que debería darme el recuento de todos los no completos, devuelve 9; Que es el recuento de cursos de todos los cursos aplicables. Lo que es más interesante es que cuando tengo toda la población en la tabla, devuelve los cursos no completos por usuario, pero el total en la parte inferior de la tabla es 9 en lugar de totalizar todos los cursos que faltan. ¿Qué te parece @jdbuchanan71?

@Antonio195754

Esto se debe a la forma en que los "totales" se calculan en una matriz. Al mirar una fila total, el modelo no tiene idea de los valores de las filas anteriores, todo lo que sabe son los filtros que se aplican a la fila total, lo que significa que está viendo incompleto al menos una vez para cada curso. Debido a todas las variables y recuentos que van a obtener la cantidad correcta por empleado, probablemente sería más fácil utilizar esa medida en un SUMX adicional para obtener el total correcto.

Algo como esto:

Incomplete With Total = SUMX(VALUES(Compliance[Employee]),[Incomplete 3])

@jdbuchanan71 Siento haberte etiquetado 🙂

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.