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
pelowski
Helper III
Helper III

Combinación de varias columnas mediante parámetros derivados de una tabla agregada

Tengo un conjunto de datos que se basa en la configuración y especificación del usuario, lo que es esencialmente la misma columna se puede enumerar de varias maneras diferentes. Aquí hay un ejemplo...

  1. Empresa
  2. Empresa
  3. Company_name
  4. company_or_organization

He desarrollado una serie de pasos que me acercan mucho a lo que quiero. Hay algunas suposiciones limitadas que se están haciendo en el código, pero en última instancia llego a una lista "NamesToCombine" y una columna "Nombre para usar". Lo que tengo dificultades para hacer a continuación se da dado que esta tabla puede tener 10 o más filas de largo, ¿cómo puedo ejecutar una función Table.CombineColumns utilizando parámetros en cada fila de mi tabla resultante para combinar todas las columnas que quiero combinar? Expression.Evaluate combinado con un List.Generate o algo así?

	// Look at the columns, sort the list regardless of capitalization
	ColumnNames = List.Sort(Table.ColumnNames(PreviousStep), each Text.Lower(_)),

	// All of the following is an attempt to get to a consistent column name
		#"Convert to Table" = Table.FromList(ColumnNames, Splitter.SplitByNothing(), {"Column Name"}, null, ExtraValues.Error),
		#"Add Generic Name" = Table.AddColumn(#"Convert to Table", "Generic Column Name", each Text.Replace(Text.Replace(Text.Lower([Column Name]), "_", ""), " ", "")),
		#"Add Index" = Table.AddIndexColumn(#"Add Generic Name", "Index", 0, 1, Int64.Type),
		SynonymReplacements = {{"companyname", "company"}, {"companyororganization", "company"}, {"educationalinstitution", "company"}, {"jobtitle", "title"}, {"phonenumber", "phone"}, {"titleorrole", "title"}},
		#"Replacements for Existing Columns" = List.ReplaceMatchingItems(#"Add Generic Name"[Generic Column Name], SynonymReplacements),
		#"Add New Synonym Replacements Column" = Table.AddColumn(#"Add Index", "Synonym Replacements", each #"Replacements for Existing Columns"{[Index]}),
		#"Add List of Characters" = Table.AddColumn(#"Add New Synonym Replacements Column", "List of Characters", each List.Sort(List.Distinct(Text.ToList([Column Name]))), type list),
		LowerCaseCharacters = {"a".."z"},
		UpperCaseCharacters = {"A".."Z"},
		Uppercase = Table.AddColumn(#"Add List of Characters", "Uppercase", each if List.ContainsAny([List of Characters], UpperCaseCharacters) then 2 else 0, Int64.Type),
		Lowercase = Table.AddColumn(Uppercase, "Lowercase", each if List.ContainsAny([List of Characters], LowerCaseCharacters) then 1 else 0, Int64.Type),
		SpacesOrUnderscore = Table.AddColumn(Lowercase, "SpacesOrUnderscore", each if List.ContainsAny([List of Characters], {"_", " "}) then 1 else 0, Int64.Type),
		#"Add Name Score" = Table.AddColumn(SpacesOrUnderscore, "Name Score", each [Uppercase] + [Lowercase] + [SpacesOrUnderscore], Int64.Type),
		#"Names To Replace Table" = Table.SelectRows(Table.Group(#"Add Name Score", {"Synonym Replacements"}, {{"ColumnMatchCount", each Table.RowCount(_), Int64.Type}, {"Name To Use", each Table.Sort(_, {{"Name Score", Order.Descending}})[Column Name]{0}}}), each [ColumnMatchCount] > 1),
		#"Merged Queries" = Table.NestedJoin(#"Names To Replace Table", {"Synonym Replacements"}, #"Add Name Score", {"Synonym Replacements"}, "NamesToReplace", JoinKind.LeftOuter),
		#"Add NamesToCombine" = Table.AddColumn(#"Merged Queries", "NamesToCombine", each [NamesToReplace][Column Name], type list),

Gracias por cualquier ayuda que pueda proporcionar.

4 REPLIES 4
lbendlin
Super User
Super User

Yo lo forzaría. Haga un archivo Table.Combine simple que ignore las diferentes ortografías de la columna y, a continuación, después de combinar agregue una columna personalizada que concatena el contenido de todas las variaciones ortográficas en un nuevo valor.

Lo siento @lbendlin,pero supongo que no entiendo lo que estás diciendo. Tengo una tabla con varios conjuntos de columnas que quiero combinar. No estaría agregando una columna personalizada, estaría agregando una nueva columna para cada conjunto de combinaciones que quiero combinar y es ese bucle que no sé cómo hacer. Aquí hay una captura de pantalla de los resultados de resumen de mis pasos de combinación de nombres. Entonces quiero fusionar esto de nuevo en qué cantidades en este caso a 12 columnas diferentes. (La tabla original tiene algo así como 50 o 60 columnas.)

After running a bunch of steps to identify the columns I'd like to combine.Después de ejecutar un montón de pasos para identificar las columnas que me gustaría combinar.

En última instancia, se trata de un origen de datos donde el sistema permite a las personas configurar sus propios nombres de columna para cada nuevo formulario y aunque me gustaría que hubiera algún tipo de coherencia forzada, no lo hay. La buena noticia es que cuando hay algún tipo de campo "Empresa" o "País", es 99% probable que sólo habrá un valor. (Haré algunas comprobaciones después de que pueda hacer las concatenaciones dinámicas para verificar que esto es cierto.)

Una vez más, lo siento si me perdí algo que estás tratando de conseguir aquí, pero no veo cómo Table.Combine ayuda. Todavía estoy en la situación en la que necesito ejecutar dinámicamente 12 creaciones de columnas personalizadas diferentes y luego quitar las 31 columnas que se muestran aquí que se han combinado juntas.

¿Las tablas entrantes tienen la misma estructura? Significado, ¿están las columnas en el mismo orden, incluso si se escriben de manera diferente?

Es sólo una tabla con un número fluctuante/siempre en expansión de columnas. Cada vez que alguien agrega un nuevo formulario en la GUI, se pueden agregar nuevas columnas a la estructura de salida. Dependiendo de las etiquetas de cada columna (de forma predeterminada las etiquetas se usan como nombres de campo) las nuevas columnas pueden agregarse a la salida la próxima vez que realice una exportación. Esta es la razón por la que ejecuto los pasos para tratar de determinar qué columnas combinar en una salida de columna porque no importa si el creador del formulario escribe "empresa", "Empresa", "Nombre de la empresa", "Organización", etc. en la creación del formulario, todo significa lo mismo y para cualquier fila dada (envío de formulario) sólo habrá un valor total en todas esas columnas para esa fila.

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.