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í