Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

The ultimate Microsoft Fabric, Power BI, Azure AI & SQL learning event! Join us in Las Vegas from March 26-28, 2024. Use code MSCUST for a $100 discount. Register Now

Reply
Anonymous
Not applicable

¿Ordenar o ordenar dos veces en otro orden anterior? (en un código M)

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;

havePeticiónPcs en el sitioOffSite PcsPcs para completar la solicitud
609048-109-1012020160100


Tabla B;

ArtículoID de paletPcs de paletas
609048-109-10710
609048-109-101040
609048-109-101220
609048-109-101320
609048-109-10920
609048-109-101140
609048-109-10810

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ículoID de paletPcs de paletas
609048-109-101040
609048-109-101140
609048-109-10920
609048-109-101220
609048-109-101320
609048-109-10710
609048-109-10810

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




3 REPLIES 3
edhans
Super User
Super User

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

edhans_0-1594394767284.png

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"



Did I answer your question? Mark my post as a solution!
Did my answers help arrive at a solution? Give it a kudos by clicking the Thumbs Up!

DAX is for Analysis. Power Query is for Data Modeling


Proud to be a Super User!

MCSA: BI Reporting
Anonymous
Not applicable

Sí, 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;

javiermontess_0-1594421519775.png

Donde debería traerme los próximos palés;

javiermontess_1-1594421640504.png

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

  1. la mesa A son los palés que necesito.
    1. edhans_0-1594502259018.png

  2. La tabla C comienza así:
    1. edhans_1-1594502306585.png

  3. Luego se transforma en esta tabla en base a la necesidad de 100 palets para ese artículo, en orden descendente de las piezas de palet, es decir, obtener los palets qty más grandes primero
    1. edhans_2-1594502401572.png

  4. Y eso es lo que se carga en el modelo.

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 )
    )

edhans_3-1594503081746.png

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.



Did I answer your question? Mark my post as a solution!
Did my answers help arrive at a solution? Give it a kudos by clicking the Thumbs Up!

DAX is for Analysis. Power Query is for Data Modeling


Proud to be a Super User!

MCSA: BI Reporting

Helpful resources

Announcements
Fabric Community Conference

Microsoft Fabric Community Conference

Join us at our first-ever Microsoft Fabric Community Conference, March 26-28, 2024 in Las Vegas with 100+ sessions by community experts and Microsoft engineering.

February 2024 Update Carousel

Power BI Monthly Update - February 2024

Check out the February 2024 Power BI update to learn about new features.

Fabric Career Hub

Microsoft Fabric Career Hub

Explore career paths and learn resources in Fabric.

Fabric Partner Community

Microsoft Fabric Partner Community

Engage with the Fabric engineering team, hear of product updates, business opportunities, and resources in the Fabric Partner Community.

Top Solution Authors