Editor de consultas: columna personalizada, List.Max, fórmula

Un usuario Pregunto ✅

vicentekatoh

Hola,

Intentando agregar una columna personalizada (AttemptsMax) para mostrar los intentos máximos por estudiante y por materia.

Necesita ayuda con la fórmula de la columna personalizada. Supongo que debería estar usando la función List.Max. También quería evitar el uso de la función «Agrupar por».

2017-06-30 18_13_00-Resultados finales de la prueba - Excel.png

Hola @vincentakatoh,

¿Le gustaría agregar una columna calculada en la tabla? Probé una fórmula, similar a la siguiente, como una columna calculada en una tabla con 3 millones de filas. Está terminado en menos de un minuto. Tal vez puedas intentarlo.

MaxAttempts =
CALCULATE (
    MAX ( 'Table1'[attempts] ),
    FILTER (
        'Table1',
        'Table1'[Student] = EARLIER ( 'Table1'[Student] )
            && Table1[subject] = EARLIER ( 'Table1'[subject] )
    )
)

¡Atentamente!

Valle

Hola @vincentakatoh,

¿Le gustaría agregar una columna calculada en la tabla? Probé una fórmula, similar a la siguiente, como una columna calculada en una tabla con 3 millones de filas. Está terminado en menos de un minuto. Tal vez puedas intentarlo.

MaxAttempts =
CALCULATE (
    MAX ( 'Table1'[attempts] ),
    FILTER (
        'Table1',
        'Table1'[Student] = EARLIER ( 'Table1'[Student] )
            && Table1[subject] = EARLIER ( 'Table1'[subject] )
    )
)

¡Atentamente!

Valle

Anónimo

En respuesta a v-jiascu-msft

BUEN día, cuando aplico esto en Power Query me da un error de expresión, Nale CALCULATE no fue reconocido

tommartens

En respuesta a Anónimo

Hola @Anónimo,

debe tener en cuenta que la solución aceptada provista por @v-jiascu-msft se basa en DAX, por esta razón, este enfoque no se puede usar dentro de Power Query. Power Query se basa en M (un lenguaje de programación funcional) y el modelo de datos usa DAX.

Saludos,

Tomás

vicentekatoh

En respuesta a v-jiascu-msft

Hola @v-jiascu-msft,

Impresionante. Funciona en <1 min con datos reales (280 mb).

No obstante, puede aconsejar cómo agregar el equivalente utilizando el Editor de consultas «Columna personalizada» (lenguaje M), en lugar de «Columna calculada» (DAX). La razón es que eventualmente necesitará agregar más columnas y obtener imágenes como Pareto.

Realmente aprecio tu respuesta. Pasé días sin éxito.

vicentekatoh

En respuesta a vicentekatoh

Hola @v-jiascu-msft,

Para tu información, intenté usar el equivalente M (Editor avanzado) en el Editor de consultas, pero tuve el mismo problema (usando Group-by) ya que PBI se bloquea cuando se cargan más datos.

Realmente aprecio su idea de usar Columna calculada. Para este propósito específico, la Columna calculada (DAX) es más eficiente en recursos que la Columna personalizada/Editor avanzado (M).

tommartens

Mmm,

En realidad, no entiendo por qué desea evitar la función de columna personalizada GroupBy.

Si quiero agregar un valor agregado, por ejemplo, MAX (intentos) a un grupo (subconjunto) de valores sin perder los valores detallados, hago lo siguiente:

Agrupar Por.png

la columna «expansión» es solo una columna «ficticia» que no se usa más.

Después de esto, solo tengo que expandir la tabla y seleccionar la columna Valor.

Tal vez esto ayude incluso si involucra GroupBy Transform

vicentekatoh

En respuesta a tommartens

Hola @TomMartens,

Gracias. Usé «Groupby», pero el problema es que el Editor de consultas se bloquea o falla cuando ejecuto con mis datos reales (> 500 000 filas, 70 MB, por día).

Como tal, espero poder intentar agregar una columna personalizada con fórmula en su lugar.

tommartens

En respuesta a vicentekatoh

Está bien, entiendo el problema.

Entonces, aquí tenemos que crear de manera muy eficiente «una lista» desde donde List.Max tiene que determinar el valor MAX. Esto tiene que hacerse para cada fila una y otra vez…

¿Ha probado un método de fuerza bruta (o Power BI también se bloquea aquí)?

  • cree una tabla con el valor agrupado (MAX) y luego (en SQL Server esto sería CTE)
  • combine la tabla agregada con la tabla base (en SQL Server esto sería Unirse a la tabla base con el CTE)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *