vicentekatoh
Hola,
Necesita ayuda para convertir debajo de DAX a lenguaje M.
Después de lo cual, ¿cómo agrego el código de idioma M? ¿En a) «Agregar columna personalizada» ob) «Editor avanzado»?
MaxAttempts = CALCULATE ( MAX ( 'Table1'[attempts] ), FILTER ( 'Table1', 'Table1'[Student] = EARLIER ( 'Table1'[Student] ) && Table1[subject] = EARLIER ( 'Table1'[subject] ) ) )
ImkeF
En respuesta a vicentekatoh
Claro: https://1drv.ms/u/s!Av_aAl3fXRbehasTVNp_izcVIvgFrA
Con un par de millones de filas, la carga podría ser más rápida con el enfoque «rápido» (usando Table.Group).
En cuanto a la memoria: actualmente puede omitir la columna «Intentos» y contar las filas en su lugar (List.Count en lugar de List.Max); en realidad, esto también podría acelerar la carga. Pero sus datos de muestra pueden dar una visión demasiado simplificada de su situación real.
ImkeF
En respuesta a vicentekatoh
¡No hay problema! Debe hacer referencia al paso anterior (que era «Fuente» en mi consulta y es #»Tipo cambiado» en la suya):
let Source = Excel.Workbook(File.Contents("C:UsersFinal Test Results.xlsx"), null, true), #"Raw data_no results_Sheet" = Source{[Item="Raw data_no results",Kind="Sheet"]}[Data], #"Promoted Headers" = Table.PromoteHeaders(#"Raw data_no results_Sheet", [PromoteAllScalars=true]), #"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"Student", Int64.Type}, {"Subject", type text}, {"Attempts", Int64.Type}, {"test result", type text}}) #"Custom1" = Table.Join(#"Changed Type", {"Student", "Subject"}, Table.Group(#"Changed Type", {"Student", "Subject"}, {{"Max", each List.Max(_[Attempts])}}), {"Student", "Subject"}), in #"Custom1"
greg_deckler
Mi sospecha es que va a ser bastante difícil convertir al lenguaje M debido al hecho de que M esencialmente se ocupa principalmente de las cosas en un nivel de fila. Para la primera parte de eso, podría agregar una columna personalizada con una expresión Table.Max quizás. En cualquier caso, tal vez @ImkeF tenga algunas ideas para ti.
ImkeF
En respuesta a greg_deckler
Puedes hacer ambas cosas 🙂
a) se parece más a la lógica DAX pero es lento:
= Table.AddColumn(Table1, "Slow", each List.Max(Table.SelectRows(Table1, (table1)=> table1[Student]=[Student] and table1[Subject]=[Subject]) [Attempts])
)
Si hace esto a través de la interfaz de usuario, solo tiene que pegar el código de la fila 2-5 en el campo de diálogo.
b) es rápido y un poco más avanzado:
= Table.Join(Table1, {"Student", "Subject"},
Table.Group(Table1, {"Student", "Subject"}, {{"Max", each List.Max(_[Attempts])}}), {"Student", "Subject"}
)
Esta fila debe ingresarse en el editor avanzado o en la barra de fórmulas en el editor de consultas.
Vincentakatoh
En respuesta a ImkeF
Hola @ImkeF,
Intenté tanto A) como B) pero obtuve mensajes de error para ambos. ¿Puedes enviarme una muestra de pbix con ambos? Gracias.
Mi solución actual usa «Columna calculada» (DAX). Esperaba usar «Columna personalizada» (M), pensando que M consumirá menos recursos del sistema que DAX. Para este caso, ¿estoy en lo cierto? Los datos reales son unos pocos millones de filas. Como tal, el recurso del sistema es importante.
Estudiante | Sujeto | intentos | resultado de la prueba |
111 | Prueba_A | 1 | Fail1 |
111 | Prueba_A | 2 | Fail2 |
111 | Test_A | 3 | Fail3 |
111 | Prueba_A | 4 | Fail4 |
111 | Test_B | 1 | Fail1 |
111 | Prueba_B | 2 | Fail2 |
111 | Prueba_B | 3 | Pase3 |
222 | Prueba_A | 1 | Fail1 |
222 | Prueba_A | 2 | Fail2 |
222 | Prueba_A | 3 | Fail3 |
222 | Prueba_B | 1 | Pase1 |
333 | Prueba_C | 1 | Fail1 |
333 | Prueba_C | 2 | Pase2 |
ImkeF
En respuesta a vicentekatoh
Claro: https://1drv.ms/u/s!Av_aAl3fXRbehasTVNp_izcVIvgFrA
Con un par de millones de filas, la carga podría ser más rápida con el enfoque «rápido» (usando Table.Group).
En cuanto a la memoria: actualmente puede omitir la columna «Intentos» y contar las filas en su lugar (List.Count en lugar de List.Max); en realidad, esto también podría acelerar la carga. Pero sus datos de muestra pueden dar una visión demasiado simplificada de su situación real.
vicentekatoh
En respuesta a ImkeF
Hola @ImkeF,
Soy realmente un muñeco M. ¡Por favor ayuda!
¿Puede aconsejarme cómo agregar el enfoque «Rápido» directamente en la tabla original, Editor avanzado? O puede proporcionar una muestra (sin crear una tabla separada «Rápido»). Agregado a continuación, pero recibió un mensaje de error.
let Source = Excel.Workbook(File.Contents("C:UsersFinal Test Results.xlsx"), null, true), #"Raw data_no results_Sheet" = Source{[Item="Raw data_no results",Kind="Sheet"]}[Data], #"Promoted Headers" = Table.PromoteHeaders(#"Raw data_no results_Sheet", [PromoteAllScalars=true]), #"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"Student", Int64.Type}, {"Subject", type text}, {"Attempts", Int64.Type}, {"test result", type text}}) #"Custom1" = Table.Join(Source, {"Student", "Subject"}, Table.Group(Source, {"Student", "Subject"}, {{"Max", each List.Max(_[Attempts])}}), {"Student", "Subject"}), in #"Custom1"
Se agregó el código pero hay un mensaje de error.
SI una nueva tabla «Rápida» es imprescindible, ¿puede aconsejarme cómo?
ImkeF
En respuesta a vicentekatoh
¡No hay problema! Debe hacer referencia al paso anterior (que era «Fuente» en mi consulta y es #»Tipo cambiado» en la suya):
let Source = Excel.Workbook(File.Contents("C:UsersFinal Test Results.xlsx"), null, true), #"Raw data_no results_Sheet" = Source{[Item="Raw data_no results",Kind="Sheet"]}[Data], #"Promoted Headers" = Table.PromoteHeaders(#"Raw data_no results_Sheet", [PromoteAllScalars=true]), #"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"Student", Int64.Type}, {"Subject", type text}, {"Attempts", Int64.Type}, {"test result", type text}}) #"Custom1" = Table.Join(#"Changed Type", {"Student", "Subject"}, Table.Group(#"Changed Type", {"Student", "Subject"}, {{"Max", each List.Max(_[Attempts])}}), {"Student", "Subject"}), in #"Custom1"
vicentekatoh
En respuesta a ImkeF
Hola @ImkeF,
Resuelto de nuevo. gracias por su paciencia. ¡PowerBI, soporte de energía!
vicentekatoh
En respuesta a vicentekatoh
Hola @ImkeF y @Greg_Deckler,
Solo quería comentar mi observación. La conclusión es usar «Columna calculada» (DAX).
Con gran ayuda de @ImkeF, convertí el DAX a M. No obstante, en los datos reales, el PBI se bloqueó cuando terminaron más datos.
Como tal, tal vez para mi propósito específico, Columna calculada es más eficiente en recursos.