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
Syndicate_Admin
Administrator
Administrator

Problemas de rendimiento con la cláusula de grupo por

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:

  1. ¿Existe una forma alternativa de llevar a cabo esta transformación DE GRUPO POR de forma optimizada?
  2. ¿Está más optimizado crear este resumen/agrupación utilizando DAX? (En mi opinión, no es sino buscar escuchar las opiniones de los demás)
  3. Estoy usando un flujo de datos para consumir mis datos en Power BI y estoy intentando realizar la mayoría de las transformaciones en el lado del flujo de datos en el Editor de Power Query en línea. Pero tiene limitaciones ya que el cliente no tiene licencias Premium en su extremo. ¿Cuál es el mejor enfoque aquí, ya que termino creando pocas entidades informáticas que solo son compatibles con Power BI Premium?

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í.

10 REPLIES 10
Syndicate_Admin
Administrator
Administrator

@Pragati11 groupby será lento, creo que DAX será mucho más rápido, adelante y pruébalo.

@PARRY2K ,

Claro, déjame probar esto y responderte.

Syndicate_Admin
Administrator
Administrator

@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?

@mwegener ,

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 🙂

Syndicate_Admin
Administrator
Administrator

@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:

edhans_0-1655223804499.png

a esto en un solo paso.

edhans_1-1655223837470.png

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.

@edhans ,

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.

Syndicate_Admin
Administrator
Administrator

@Pragati11 Si ese es el caso, simplemente use la función CONCATENATEX DAX en lugar de hacer el grupo por en PQ

@PARRY2K ,

¿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?

Syndicate_Admin
Administrator
Administrator

@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.

@parry2k ,

Gracias por responder tan rápido.

Sí, tienes razón al entender mi escenario.

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.