The ultimate Microsoft Fabric, Power BI, Azure AI, and SQL learning event: Join us in Stockholm, September 24-27, 2024.
Save €200 with code MSCUST on top of early bird pricing!
Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more. Get started
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 ReportingJoin the community in Stockholm for expert Microsoft Fabric learning including a very exciting keynote from Arun Ulag, Corporate Vice President, Azure Data.
Check out the August 2024 Power BI update to learn about new features.