mah65
Tengo una tabla que está construida por entradas de useres. El problema que enfrento es el resultado de múltiples entradas del mismo usuario (un usuario envía varias veces). Básicamente, necesito conservar todas las entradas para el filtrado y los cálculos posteriores, pero tener nombres repetidos inhibirá la relación de uno a muchos y otros filtros.
Por ejemplo, si recibo esta tabla sin procesar:
Usuario | Correo electrónico | Valor |
John Smith |
john@gmail.com | 45 |
Mickeal Jackson | michael@gmail.com | 56 |
Andrew Dari | andrew@gmail.com | 56 |
John Smith | john@gmail.com | 32 |
John Smith | john@gmail.com | 19 |
Mickeal Jackson | michael@gmail.com | 78 |
Helen Ravadi | helen@gmail.com | 10 |
Ann Hong | ann@gmail.com | 00 |
Una solución es cambiarlo a la siguiente tabla para resolver el problema de los nombres de usuario repetidos:
Usuario | Correo electrónico | Valor |
John Smith 1 |
john@gmail.com | 45 |
Mickeal Jackson 1 | michael@gmail.com | 56 |
Andrew Dari | andrew@gmail.com | 56 |
John Smith 2 | john@gmail.com | 32 |
John Smith 3 | john@gmail.com | 19 |
Mickeal Jackson 2 | michael@gmail.com | 78 |
Helen Ravadi | helen@gmail.com | 10 |
Ann Hong | ann@gmail.com | 00 |
¿Alguien puede ayudarme a automatizar este proceso? Hay muchos usuarios en la lista.
Por cierto, si tiene alguna sugerencia mejor para solucionar este problema, hágamelo saber. Gracias.
Ashish_Mathur
En respuesta a mah65
Hola,
Este código M funciona
let
Source = Excel.CurrentWorkbook(){[Name="Data"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"User", type text}, {"Email", type text}, {"Value", Int64.Type}}),
Partition = Table.Group(#"Changed Type", {"User"}, {{"Partition", each Table.AddIndexColumn(_, "Index",1,1), type table}}),
#"Expanded Partition" = Table.ExpandTableColumn(Partition, "Partition", {"Email", "Value", "Index"}, {"Email", "Value", "Index"}),
#"Grouped Rows" = Table.Group(#"Expanded Partition", {"User"}, {{"GroupTables", each _, type table [User=text, Email=text, Value=number, Index=number]}}),
#"Added Custom" = Table.AddColumn(#"Grouped Rows", "CountRows", each Table.RowCount([GroupTables])),
#"Expanded GroupTables" = Table.ExpandTableColumn(#"Added Custom", "GroupTables", {"Email", "Value", "Index"}, {"Email", "Value", "Index"}),
#"Added Custom1" = Table.AddColumn(#"Expanded GroupTables", "Custom", each if [CountRows]=1 then [User] else [User] & Number.ToText([Index])),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom1",{"User", "Index", "CountRows"})
in
#"Removed Columns"
Espero que esto ayude.
Ashish_Mathur
Hola,
Este código M funciona
let
Source = Excel.CurrentWorkbook(){[Name="Data"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"User", type text}, {"Email", type text}, {"Value", Int64.Type}}),
Partition = Table.Group(#"Changed Type", {"User"}, {{"Partition", each Table.AddIndexColumn(_, "Index",1,1), type table}}),
#"Expanded Partition" = Table.ExpandTableColumn(Partition, "Partition", {"Email", "Value", "Index"}, {"Email", "Value", "Index"}),
#"Merged Columns" = Table.CombineColumns(Table.TransformColumnTypes(#"Expanded Partition", {{"Index", type text}}, "en-IN"),{"User", "Index"},Combiner.CombineTextByDelimiter(" ", QuoteStyle.None),"Merged")
in
#"Merged Columns"
Espero que esto ayude.
mah65
En respuesta a Ashish_Mathur
@Ashish_Mathur
Gracias.
¿Puede hacer que su solución funcione solo con valores duplicados? Los nombres de usuario no repetidos no deben cambiar.
Ashish_Mathur
En respuesta a mah65
Hola,
Este código M funciona
let
Source = Excel.CurrentWorkbook(){[Name="Data"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"User", type text}, {"Email", type text}, {"Value", Int64.Type}}),
Partition = Table.Group(#"Changed Type", {"User"}, {{"Partition", each Table.AddIndexColumn(_, "Index",1,1), type table}}),
#"Expanded Partition" = Table.ExpandTableColumn(Partition, "Partition", {"Email", "Value", "Index"}, {"Email", "Value", "Index"}),
#"Grouped Rows" = Table.Group(#"Expanded Partition", {"User"}, {{"GroupTables", each _, type table [User=text, Email=text, Value=number, Index=number]}}),
#"Added Custom" = Table.AddColumn(#"Grouped Rows", "CountRows", each Table.RowCount([GroupTables])),
#"Expanded GroupTables" = Table.ExpandTableColumn(#"Added Custom", "GroupTables", {"Email", "Value", "Index"}, {"Email", "Value", "Index"}),
#"Added Custom1" = Table.AddColumn(#"Expanded GroupTables", "Custom", each if [CountRows]=1 then [User] else [User] & Number.ToText([Index])),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom1",{"User", "Index", "CountRows"})
in
#"Removed Columns"
Espero que esto ayude.
mah65
En respuesta a Ashish_Mathur
Gracias por todas sus respuestas.
Desarrollé este código de Python para modificar solo valores duplicados. Es mas simple 🙂
dataset.loc[dataset.duplicated(‘FullName’, keep=False),»FullName»] = dataset.loc[dataset.duplicated(‘FullName’, keep=False),»FullName»] + «» + (conjunto de datos[dataset.duplicated(‘FullName’, keep=False)].groupby («Nombre completo»). cumcount () + 1) .astype (str)
Sin embargo, Python tiene problemas para trabajar en app.powerbi en línea. ¡Realmente frustrante!
MFelix
Hola @ mah65,
Cree que la mejor opción es crear un modelo de esquema en estrella y crear una tabla para usar en un lado de la relación solo con el usuario y el correo electrónico, de esa manera puedes hacer que las relaciones funcionen correctamente.
Piense que es más fácil que hacer cambios en los datos de esa manera, perderá ese John Smith como 3 entradas y obtendrá John Smith 1, 2, 3.
mah65
En respuesta a MFelix
Tengo esta tabla de usuarios que tiene todos los nombres y correos electrónicos y todos los demás valores (que se muestran arriba). Lo estoy usando como una tabla de dimensiones. Pero con usuarios repetidos, debería haber una relación de muchos a muchos que dificulta la visualización. Especialmente, no todos los usuarios repetidos se muestran en una visualización de tabla.
Si construyo la tabla solo con nombres y correos electrónicos, ¿qué debo hacer con las columnas de valor? También tengo otra tabla de hechos a la que esta tabla de usuario está conectada.
También probé el modelo de copo de nieve. Es decir, construí una tabla con nombres únicos y la puse en la parte superior de la tabla de información del usuario. No resolvió el problema.
mahoneypat
En respuesta a mah65
Hacer otra tabla que haga referencia a su tabla de ejemplo en el editor de consultas es el camino a seguir. A continuación se muestra una consulta de ejemplo que muestra los pasos para hacerlo con sus datos de ejemplo. Una vez que cargue esta tabla también, puede establecer relaciones con su tabla original y las otras tablas en su modelo desde la columna de correo electrónico (o el nombre). Para ver cómo funciona, simplemente cree una consulta en blanco, vaya al Editor avanzado y reemplace el texto allí con el código M a continuación.
let
Source = OriginalTable,
#"Removed Other Columns" = Table.SelectColumns(Source,{"User", "Email"}),
Custom1 = Table.Distinct(#"Removed Other Columns")
in
Custom1
Si esto le funciona, márquelo como la solución. Las felicitaciones también son apreciadas. Por favor avíseme si no es así.
Saludos,
Palmadita
mah65
En respuesta a mahoneypat
Gracias por tu sugerencia. Como mencioné anteriormente, ya construí dicha tabla. Ver figura.
Pero, todavía no está cumpliendo mi propósito. No hay ningún problema en contar usuarios (solicitantes), pero cuando quiero mostrar información de usuarios repetidos en una visualización de ‘tabla’, solo muestra el primero, no las tres repeticiones, por ejemplo.
¿Qué debo hacer con eso?
Por cierto, también tengo algunos cálculos que deberían hacerse por cada aplicación (no por usuario). Entonces, si hay usuarios con el mismo nombre / correo electrónico, ¡estos cálculos cubrirán todo! Tampoco podré elegir al usuario como un segmento de filtro, porque cubrirá todas sus aplicaciones. Si tengo John Smith 1, John Smith 2, etc., ¡la selección y los cálculos serán mucho más fáciles en todos los campos!
¿Alguna idea de cómo cambiar el nombre automáticamente?