March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount! Early bird discount ends December 31.
Register NowBe one of the first to start using Fabric Databases. View on-demand sessions with database experts and the Microsoft product team to learn just how easy it is to get started. Watch now
Hola, comunidad,
Recientemente me publicó para un poco de ayuda y el complejo me dio este código M que funciona correctamente para lo que me preguntó;
let Source á Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjOwNDCx0DU0sARiJR0lCyA2N1kk1cGUMjIEEobG2CWNjUGSBjgkTfDotDDDI2lpDiTMDJRiYwE", BinaryEncoding.Base64), Compression.Deflate)), let _t ?((tipo de texto que acepta valores NULL) meta [Serialized.Text ? true]) en la tabla de tipos [Item ? _t, ''ID de paleta' _t _t ' Int64.Type, "Pallet Pcs", Int64.Type, "Añadidas suficientes piezas" - Table.AddColumn( "Changed Type", "Enough Pieces", each let varItemNeeded á [Item], varPalletId á [ID de paleta], varPiecesNeeded á Table.SelectRows('"Tabla A'", cada [Elemento] á varItemNeeded)[Pcs to complete request]{0} en List.Sum( Table.SelectRows('"Changed Type", cada [ID de paleta] <'varPalletId')[Pallet Pcs] ) "Added Pallet Needed" - Table.AddColumn('Added Enough Pieces'", "Pallet Needed", each let varLastPallet ? List.Min( Table.SelectRows('Add Enough Pieces'", cada [Piezas suficientes] - true)[Pallet ID] ) en [Pallet ID] <- varLastPallet, tipo logical ), "Filas filtradas para mantener lo que se necesita" , cada uno ([Pallet Needed] á true)), "Eliminado otras columnas" - Table.SelectColumns("Filas filtradas para mantener lo que se necesita","Item", "PALLET ID", "Pallet Pcs" ) en "Eliminado otras columnas"
Pero ahora, necesito un poco más de ayuda; ¿Cómo puedo editar este código M para hacer una ordenación en la ordenación anterior?
Permítanme explicarles con un ejemplo.
Tabla A;
have | Petición | Pcs en el sitio | OffSite Pcs | Pcs para completar la solicitud |
609048-109-10 | 120 | 20 | 160 | 100 |
Tabla B;
Artículo | ID de palet | Pcs de paletas |
609048-109-10 | 7 | 10 |
609048-109-10 | 10 | 40 |
609048-109-10 | 12 | 20 |
609048-109-10 | 13 | 20 |
609048-109-10 | 9 | 20 |
609048-109-10 | 11 | 40 |
609048-109-10 | 8 | 10 |
El código M me traerá los pallets 7, 8, 9, 10 y 11 porque estos palets, con el fin de ordenar por Pallet ID, sumar 120 uds para completar los 100 solicitados. ¿Correcto?
Pero, ¿Es posible editar el código M para ordenar primero por Pallet Pcs, y luego, por Pallet ID? (Algo así como la siguiente tabla).
Porque si es posible, el código M podría devolverme sólo los Pallets 10, 11 y 9, estos palets sumar 100 piezas.
Artículo | ID de palet | Pcs de paletas |
609048-109-10 | 10 | 40 |
609048-109-10 | 11 | 40 |
609048-109-10 | 9 | 20 |
609048-109-10 | 12 | 20 |
609048-109-10 | 13 | 20 |
609048-109-10 | 7 | 10 |
609048-109-10 | 8 | 10 |
¿Es posible?
Espero que pueda ayudarme de nuevo comunidad...
¡Ten un buen día!
El color azul en las tablas no tiene ninguna relación con el texto azul de la Medida, es sólo para puede diferenciar las columnas.
¡Hombre, la persona que hizo ese código M es un genio! Ese es un hermoso código M!!!!! 😂😂 🤣🤣 🤣 🤣 😂😂
Prueba este código. Necesitaba clasificar los palets y las cantidades debido a los lazos en cantidad, mientras que la última vez sólo me importaba el primer palet en golpear la cantidad necesaria. El Pallet ID era mi índice único. Así que ordené por cantidad descendente e ID de palet ascendente, luego agregué un índice. Luego ajustó algunas otras cosas. Sin embargo, esto debería funcionar. El archivo PBIX está aquí. No me molesé en rehacer el código DAX.
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjOwNDCx0DU0sARiJR0lcyAGMmJ1MKXAhAkOOSMgYYRDzhi3nCUebYa4rbOAujIWAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Item = _t, #"Pallet ID" = _t, #"Pallet Pcs" = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Item", type text}, {"Pallet ID", Int64.Type}, {"Pallet Pcs", Int64.Type}}),
#"Sorted Rows" = Table.Sort(#"Changed Type",{{"Pallet Pcs", Order.Descending}, {"Pallet ID", Order.Ascending}}),
#"Added Index" = Table.AddIndexColumn(#"Sorted Rows", "Index", 0, 1),
#"Added Enough Pieces" =
Table.AddColumn(
#"Added Index",
"Enough Pieces",
each
let
varItemNeeded = [Item],
varIndex = [Index],
varPiecesNeeded = Table.SelectRows(#"Table A", each [Item] = varItemNeeded)[Pcs to complete request]{0}
in
List.Sum(
Table.SelectRows(#"Added Index", each [Index] >= varIndex)[Pallet Pcs]
) <= varPiecesNeeded,
type logical
),
#"Added Pallet Needed" =
Table.AddColumn(#"Added Enough Pieces", "Pallet Needed",
each
let
varLastIndex =
List.Min(
Table.SelectRows(#"Added Enough Pieces", each [Enough Pieces] = true)[Index]
)
in
[Index] <= varLastIndex,
type logical
),
#"Filtered Rows To Keep What Is Needed" = Table.SelectRows(#"Added Pallet Needed", each ([Pallet Needed] = true)),
#"Removed Other Columns" = Table.SelectColumns(#"Filtered Rows To Keep What Is Needed",{"Item", "Pallet ID", "Pallet Pcs"})
in
#"Removed Other Columns"
DAX is for Analysis. Power Query is for Data Modeling
Proud to be a Super User!
MCSA: BI ReportingSí, es brillante, y estoy de acuerdo: el código M es hermoso.
Pero ahora me siento como un tonto. Yo uso el código que u me dio @edhans,pero ahora no sé lo que estoy haciendo mal...
Sólo cambié el origen de las tablas A, B y C, y cuando actualo, el código M me trae palets incorrectos.
Me trae esto;
Donde debería traerme los próximos palés;
Este es mi archivo PBIX, ¿qué puedo hacer para solucionarlo?
Como dije: Sólo cambio las fuentes de mis mesas locales...
Este PBIX me está volviendo loco.
@javiermontess - No pude mirar el código M en su archivo PBIX porque estaba vinculado a archivos de Excel en su disco duro.
Pero esto es lo que hice en el archivo al que me vinculé.
Si desea representarlo en DAX, puede utilizar la función CONCATENATEX().
Pallet Summary =
CONCATENATEX(
'Table C',
"Pallet "
& FORMAT(
'Table C'[Pallet ID],
"#"
) & ", "
& FORMAT(
'Table C'[Pallet Pcs],
"#"
) & "pcs",
", "
& UNICHAR( 10 )
)
Ignorar la tabla B. Eso fue uno en el que lo hicimos antes 100% DAX y requería una medida DAX mucho más compleja. Además, no estoy seguro de cómo haría la medida ahora, ya que no se puede agregar un índice a una tabla DAX en la memoria - que soy consciente de.
Así que creo que la combinación de Power Query para dar forma a los datos para traer lo que necesita y DAX para analizar y resumir es el mejor método frente a tratar de hacer el 100% del ejercicio en cada lado.
Puede obtener el archivo desde el mismo enlace que el anterior. Guardé los cambios con esta medida en ella. La primera tabla de esa pestaña De Power Query es básicamente solo una matriz que muestra lo que hay en los datos sin que DAX los resuma.
DAX is for Analysis. Power Query is for Data Modeling
Proud to be a Super User!
MCSA: BI ReportingMarch 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!