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.
Hola a todos,
Actualmente estoy experimentando un problema de rendimiento al usar una cláusula GROUP BY al transformar datos en Power Query Editor en Power BI.
Escenario:
Tengo una mesa muy grande que vale 50 millones de filas. (no se pueden compartir datos debido a la sensibilidad)
Estoy trabajando en la creación de una tabla de dimensiones para mi modelo de datos fusionando la tabla de origen, digamos Tabla de proyecto , con una tabla de 2ª, digamos Tabla de equipo; para extraer información de los miembros del equipo.
Ahora un solo ID de proyecto puede dar lugar a la información de varios miembros del equipo, por lo tanto, termino con varias filas para un ID de proyecto en mi tabla de origen después de la operación de combinación.
Ahora, lo que realmente necesito es combinar estas múltiples filas en una sola fila y obtener información de los miembros del equipo en una sola fila que esté separada por un delimitador; contra un id. de proyecto.
Sé que puedo hacer esto usando Group BY con una combinación de la función Text.Combine( ).
Desafiar:
Ahora el desafío aquí es: la tabla del proyecto tiene casi 50 millones de filas. Después de fusionarme con la tabla Teams , termino con alrededor de 60 millones de filas. Aplicar una transformación Group BY además de esto realmente está creando un desafío de rendimiento para mí y estoy buscando una forma alternativa de hacer esta transformación.
Preguntas:
Espero con interés alguna sugerencia sobre los mejores enfoques aquí y obtener algunos consejos sobre la implementación de la solución.
@parry2k @edhans @Greg_Deckler @MFelix @mwegener @nickyvv @amitchandak
Gracias de antemano! Hágame saber si se necesitan más detalles aquí.
@Pragati11 groupby será lento, creo que DAX será mucho más rápido, adelante y pruébalo.
@Pragati11 ¿De qué tipo es su origen de datos original?
¿Ya puedes hacer la agrupación en la mesa del equipo antes de la unión?
¿Cuáles son los casos en los que no se pueden evitar las entitas computarizadas?
Sí, necesito entidades calculadas aquí, ya que acabo de incluir 2 tablas en mi pregunta, pero también tengo otras tablas.
De hecho, he descifrado la solución para evitar entidades computadas en el flujo de datos. Esto se puede hacer fácilmente asegurándose de que las tablas que esté utilizando para obtener esta entidad calculada, deben deshabilitarse al cargarse. Esto realmente ha resuelto este problema para mí.
Muchas gracias por su respuesta 🙂
@Pragati11 Todavía me inclinaría por mantener esto en Power Query. Puedes hacer la concatenación (TEXT. COMBINE) en la función Agrupar por. Acabo de hacer esto ayer para un cliente.
Pero, el rendimiento no fue excelente. Se agregaron 30 minutos a la transformación. Así que moví esto a un Flujo de datos y lo dejé en el trabajo pesado. Todavía tarda unos 30 minutos, pero se descarga de Power BI y no afecta al desarrollo. Si tiene otras transformaciones pesadas, si también las mueve a flujos de datos, pueden ejecutarse en paralelo y, cuando carga datos de Power BI, es solo una carga directa de tablas materalizadas.
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WSlTSUQpSitWJVkoCsgLALJCYF1zMAy6GkPWHsxzh6lzhrFA4KwSuLhwu5oxmXiqQ5QSX9QazkuEmpwBZfnB1wXBZT7gs0H2xAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Group = _t, Code = _t]),
#"Grouped Rows" =
Table.Group(
Source,
{"Group"},
{
{
"All Rows",
each Text.Combine(_[Code], ", "),
type table [Group=nullable text, Code=nullable text]
}
}
)
in
#"Grouped Rows"
Ese código convierte esto:
a esto en un solo paso.
Dada la cantidad de datos de los que está hablando, enviar más de vuelta a la fuente puede hacer que el modelo funcione mejor, ya que el motor vertipaq puede optimizar la compresión si los datos deben estar en una columna. Si solo necesita estar en una medida, entonces sí, CONCATENATEX() funcionará, pero tendrá muchos más registros ya que no se agrupó antes de cargar.
Así que.... Depende. 😁
Cómo utilizar el código M proporcionado en una consulta en blanco:
1) En Power Query, seleccione Nuevo origen y, a continuación, Consulta en blanco
2) En la cinta de inicio, seleccione el botón "Editor avanzado"
3) Elimina todo lo que ves, luego pega el código M que te he dado en ese cuadro.
4) Prensa Hecho
5) Consulte este artículo si necesita ayuda para usar este código M en su modelo.
muchas gracias por volver con este enfoque detallado.
De hecho, probé la función m-code Text.Combine(), pero fue de una manera diferente. Déjame intentar usar el m-code que has compartido anteriormente. Te haré saber si funciona para mí o no.
@Pragati11 Si ese es el caso, simplemente use la función CONCATENATEX DAX en lugar de hacer el grupo por en PQ
¿El uso de DAX es bueno desde el punto de vista del rendimiento en comparación con la creación de resúmenes en el editor de Power Query?
@Pragati11 Gracias por etiquetar. Solo para aclarar, los datos sin procesar contienen dos tablas:
1 - Tabla de proyectos con proyectos únicos
2 - Tabla de equipo con varios miembros del equipo para cada proyecto
y encima se pueden unir dos tablas en ProjectId que serán de 1 a muchas relaciones, ¿correcto?
Y desea que la salida muestre a los miembros del equipo de cada proyecto separados por una coma, ¿correcto?
Por favor, confirme cuando tenga la oportunidad.
Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City
Check out the April 2024 Power BI update to learn about new features.
User | Count |
---|---|
2 | |
1 | |
1 | |
1 | |
1 |
User | Count |
---|---|
2 | |
2 | |
2 | |
1 | |
1 |