Profesores con estudiantes en común

Un usuario Pregunto ✅

DThayer

Intentar crear una matriz de estudiantes que se cruzan, es decir, qué profesores tienen, cuántos estudiantes en común y, finalmente, poder ver a los estudiantes. La fuente es simplemente 2 columnas, aunque hay un número desconocido de profesores y estudiantes, por lo que un número desconocido de columnas y filas resultantes:

Maestro A Estudiante 1
Maestro A Estudiante 2
Maestro A Estudiante 3
Maestro A Estudiante 4
Maestro B Estudiante 1
Maestro B Estudiante 5
Maestro B Estudiante 7
Maestro B Estudiante 8
Maestro C Estudiante 3
Maestro C Estudiante 4
Maestro C Estudiante 7
Maestro C Estudiante 8
Maestro D Estudiante 5
Maestro D Estudiante 9
Maestro D Estudiante 10

El resultado deseado es:

Maestro A Maestro B Maestro C Maestro D
Maestro A 4 1 2 0
Maestro B 1 4 2 1
Maestro C 2 2 4 0
Maestro D 0 1 0 3

Creo que con una combinación de agrupamiento y poivoting podría llegar allí con un nombre estático y un número de maestros, pero estoy perplejo en cuanto a manejar las variables.

Zubair_Muhammad

En respuesta a Greg_Deckler

@DThayer

He aquí otra forma.

Primero cree una nueva tabla desde la pestaña Modelado >> Nueva tabla

Table =
ALL ( Table1[Teachers] )

Ahora puede usar esta MEDIDA en su Tabla original (digamos Table1)

Measure =
VAR mytable =
    UNION ( VALUES ( Table1[Teachers] ), VALUES ( 'Table'[Teachers] ) )
VAR myrows =
    COUNTROWS ( DISTINCT ( mytable ) )
VAR M1 =
    COUNTROWS (
        FILTER (
            VALUES ( Table1[Students] ),
            CALCULATE ( COUNT ( Table1[Teachers] ), Table1[Teachers] IN mytable )
                = 2
        )
    )
VAR M2 =
    COUNT ( Table1[Students] )
VAR M3 =
    IF ( myrows = 1, M1, M2 )
RETURN
    IF ( ISBLANK ( M3 ), 0, M3 )

Greg_Deckler

@DThayer: publiqué la versión final de esto en la galería de Quick Measure aquí:

https://community.powerbi.com/t5/Quick-Measures-Gallery/In-Common/td-p/382956

Tiene el PBIX y una explicación más larga.

DThayer

En respuesta a Greg_Deckler

Solución Power Query:

Estudiantes de tabla:

Maestro – estudiante

Maestro A Estudiante 1
Maestro A Estudiante 2
Maestro A Estudiante 3
Maestro A Estudiante 4
Maestro B Estudiante 1
Maestro B Estudiante 5
Maestro B Estudiante 7
Maestro B Estudiante 8
Maestro C Estudiante 3
Maestro C Estudiante 4
Maestro C Estudiante 7
Maestro C Estudiante 8
Maestro D Estudiante 5
Maestro D Estudiante 9
Maestro D Estudiante 10

Cree 2 tablas de profesores distintos con una segunda columna de «1» para unir las tablas:

Estudiantes (2):

ProfesorPersonalizado

Maestro A 1
Maestro B 1
Maestro C 1
Maestro D 1

Estudiantes (3):

ProfesorPersonalizado

Maestro A 1
Maestro B 1
Maestro C 1
Maestro D 1

Ahora combine las 2 tablas nuevas, creando una lista de todas las combinaciones posibles de relaciones con los maestros. A continuación, vuelva a fusionar la lista recién creada con «Estudiantes», dos veces, una vez en la columna «Profesor» y luego en la columna «Profesor.1». Agregue una columna para indicar si los estudiantes coinciden, luego filtre los que no coinciden. Agrupe los datos por «Profesor» y «Profesor.1» para obtener el recuento, luego simplemente gire los datos alrededor de «Profesor.1». Aquí está el código real:

dejar
Fuente = Table.NestedJoin (# «Estudiantes (3)», {«Personalizado»}, # «Estudiantes (2)», {«Personalizado»}, «Estudiantes (2)», JoinKind.LeftOuter),
# «Estudiantes expandidos (2)» = Table.ExpandTableColumn (Fuente, «Estudiantes (2)», {«Profesor»}, {«Profesor.1»}),
# «Columnas eliminadas» = Table.RemoveColumns (# «Estudiantes expandidos (2)», {«Personalizado»}),
# «Consultas fusionadas» = Table.NestedJoin (# «Columnas eliminadas», {«Profesor»}, Estudiantes, {«Profesor»}, «Estudiantes», JoinKind.LeftOuter),
# «Estudiantes expandidos» = Table.ExpandTableColumn (# «Consultas combinadas», «Estudiantes», {«Estudiante»}, {«Estudiante»}),
# «Merged Queries1» = Table.NestedJoin (# «Expanded Students», {«Teacher.1»}, Students, {«Teacher»}, «Students», JoinKind.LeftOuter),
# «Expanded Students1» = Table.ExpandTableColumn (# «Consultas fusionadas1», «Estudiantes», {«Estudiante»}, {«Estudiante.1»}),
# «Agregado personalizado» = Table.AddColumn (# «Estudiantes expandidos1», «Coincidencia», cada uno si [Student] = [Student.1] luego 1 más 0),
# «Filtered Rows» = Table.SelectRows (# «Personalizado agregado», cada ([Match] = 1)),
# «Removed Columns1» = Table.RemoveColumns (# «Filtered Rows», {«Student», «Student.1»}),
# «Grouped Rows» = Table.Group (# «Removed Columns1», {«Teacher», «Teacher.1»}, {{«Count», each Table.RowCount (_), type number}}),
# «Columna dinámica» = Table.Pivot (# «Filas agrupadas», List.Distinct (# «Filas agrupadas»[Teacher.1]), «Teacher.1», «Count», List.Sum)
en
# «Columna dinámica»

MargueriteMadera

Hola, estudio en la Universidad. Tengo una lección de programación. Allí también hicimos una matriz de alumnos y profesores. Fue interesante. En nuestra universidad hay diez alumnos por cada profesor que se ocupa de ello. Pero solo de acuerdo con las escrituras que tenemos para cada alumno hay un maestro. Porque escribir es muy importante. Nuestro grupo envía sus trabajos escritos en papel, incluidas las coincidencias, www.au.papersowl.com al servicio para su verificación. Considero que es muy correcto deshacer mucha atención a la escritura, por eso recomiendo mi universidad. Gracias.

Greg_Deckler

@DThayer: publiqué la versión final de esto en la galería de Quick Measure aquí:

https://community.powerbi.com/t5/Quick-Measures-Gallery/In-Common/td-p/382956

Tiene el PBIX y una explicación más larga.

DThayer

En respuesta a Greg_Deckler

Lo siento por el retraso en la respuesta. Olvidé mencionar en mi publicación inicial que estoy usando Power Query y Power Pivot, no PowerBI. Sin embargo, basándome en la publicación de Greg y Zubair, pude ver cómo resolver el problema con Power Query y lo logré. Sin embargo, no estoy seguro de poder aceptar ninguna de las respuestas como solución, ya que no puedo probar ninguna de las dos.

También me alegró encontrar la «Galería de medidas rápidas», que podría ser útil para el desarrollo futuro.

Gracias a ambos.

Ashish_Mathur

En respuesta a DThayer

Hola @DThayer,

Esto también se puede resolver solo con PowerPivot. Si está interesado en obtener esa solución, vuelva a publicarla.

Greg_Deckler

En respuesta a DThayer

¿Podría publicar lo que hizo en Power Query para ayudar a otras personas con problemas similares en el futuro?

DThayer

En respuesta a Greg_Deckler

Solución Power Query:

Estudiantes de tabla:

Maestro – estudiante

Maestro A Estudiante 1
Maestro A Estudiante 2
Maestro A Estudiante 3
Maestro A Estudiante 4
Maestro B Estudiante 1
Maestro B Estudiante 5
Maestro B Estudiante 7
Maestro B Estudiante 8
Maestro C Estudiante 3
Maestro C Estudiante 4
Maestro C Estudiante 7
Maestro C Estudiante 8
Maestro D Estudiante 5
Maestro D Estudiante 9
Maestro D Estudiante 10

Cree 2 tablas de profesores distintos con una segunda columna de «1» para unir las tablas:

Estudiantes (2):

ProfesorPersonalizado

Maestro A 1
Maestro B 1
Maestro C 1
Maestro D 1

Estudiantes (3):

ProfesorPersonalizado

Maestro A 1
Maestro B 1
Maestro C 1
Profesor D 1

Ahora combine las 2 tablas nuevas, creando una lista de todas las combinaciones posibles de relaciones con los maestros. A continuación, vuelva a fusionar la lista recién creada con «Estudiantes», dos veces, una vez en la columna «Profesor» y luego en la columna «Profesor.1». Agregue una columna para indicar si los estudiantes coinciden, luego filtre los que no coinciden. Agrupe los datos por «Profesor» y «Profesor.1» para obtener el recuento, luego simplemente gire los datos alrededor de «Profesor.1». Aquí está el código real:

dejar
Fuente = Table.NestedJoin (# «Estudiantes (3)», {«Personalizado»}, # «Estudiantes (2)», {«Personalizado»}, «Estudiantes (2)», JoinKind.LeftOuter),
# «Estudiantes expandidos (2)» = Table.ExpandTableColumn (Fuente, «Estudiantes (2)», {«Profesor»}, {«Profesor.1»}),
# «Columnas eliminadas» = Table.RemoveColumns (# «Estudiantes expandidos (2)», {«Personalizado»}),
# «Consultas fusionadas» = Table.NestedJoin (# «Columnas eliminadas», {«Profesor»}, Estudiantes, {«Profesor»}, «Estudiantes», JoinKind.LeftOuter),
# «Estudiantes expandidos» = Table.ExpandTableColumn (# «Consultas combinadas», «Estudiantes», {«Estudiante»}, {«Estudiante»}),
# «Merged Queries1» = Table.NestedJoin (# «Expanded Students», {«Teacher.1»}, Students, {«Teacher»}, «Students», JoinKind.LeftOuter),
# «Expanded Students1» = Table.ExpandTableColumn (# «Consultas fusionadas1», «Estudiantes», {«Estudiante»}, {«Estudiante.1»}),
# «Agregado personalizado» = Table.AddColumn (# «Estudiantes expandidos1», «Coincidencia», cada uno si [Student] = [Student.1] luego 1 más 0),
# «Filtered Rows» = Table.SelectRows (# «Personalizado agregado», cada ([Match] = 1)),
# «Removed Columns1» = Table.RemoveColumns (# «Filtered Rows», {«Student», «Student.1»}),
# «Grouped Rows» = Table.Group (# «Removed Columns1», {«Teacher», «Teacher.1»}, {{«Count», each Table.RowCount (_), type number}}),
# «Columna dinámica» = Table.Pivot (# «Filas agrupadas», List.Distinct (# «Filas agrupadas»[Teacher.1]), «Teacher.1», «Count», List.Sum)
en
# «Columna dinámica»

Greg_Deckler

Hubiera pensado que sería algo como esto, pero no puedo hacer que funcione correctamente.

Measure 2 = 
VAR students1 = CALCULATETABLE(StudentTeachers,ALLEXCEPT(Teachers2,Teachers2[Teacher]))
VAR students1a = SELECTCOLUMNS(students1,"Student",[Student])
VAR students2 = CALCULATETABLE(StudentTeachers,ALLEXCEPT(Teachers,Teachers[Teacher]))
VAR students2a = SELECTCOLUMNS(students2,"Student",[Student])
VAR myvar = COUNTROWS(INTERSECT(students1a, students2a))
RETURN myvar

Greg_Deckler

En respuesta a Greg_Deckler

Bien, no estoy seguro de por qué el primero no funcionó, pero este sí.

Measure 4 = 
VAR students1 = FILTER(ALL(StudentTeachers),[Teacher]=MAX(Teachers[Teacher]))
VAR students1a = SELECTCOLUMNS(students1,"MyStudent",[Student])
VAR students2 = FILTER(ALL(StudentTeachers),[Teacher]=MAX(Teachers2[Teacher]))
VAR students2a = SELECTCOLUMNS(students2,"MyStudent",[Student])
VAR myvar = COUNTROWS(INTERSECT(students1a,students2a))
RETURN myvar

Tenga en cuenta que tengo dos tablas que enumeran los maestros únicos Maestros y los Maestros dos, pero probablemente solo necesite uno de esos. Están relacionados con StudentTeachers (su tabla) de forma obvia.

Zubair_Muhammad

En respuesta a Greg_Deckler

@DThayer

He aquí otra forma.

Primero cree una nueva tabla desde la pestaña Modelado >> Nueva tabla

Table =
ALL ( Table1[Teachers] )

Ahora puede usar esta MEDIDA en su Tabla original (digamos Table1)

Measure =
VAR mytable =
    UNION ( VALUES ( Table1[Teachers] ), VALUES ( 'Table'[Teachers] ) )
VAR myrows =
    COUNTROWS ( DISTINCT ( mytable ) )
VAR M1 =
    COUNTROWS (
        FILTER (
            VALUES ( Table1[Students] ),
            CALCULATE ( COUNT ( Table1[Teachers] ), Table1[Teachers] IN mytable )
                = 2
        )
    )
VAR M2 =
    COUNT ( Table1[Students] )
VAR M3 =
    IF ( myrows = 1, M1, M2 )
RETURN
    IF ( ISBLANK ( M3 ), 0, M3 )

Zubair_Muhammad

En respuesta a Zubair_Muhammad

@DThayer

Archivo adjunto aquí

PROFESORES.png

Deja un comentario

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