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

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
Syndicate_Admin
Administrator
Administrator

Cómo buscar el segundo valor para el elemento seleccionado en Power BI DAX y mostrarlo como nuevo valor de columna

Hola a todos,

Estoy luchando para encontrar una manera de calcular el segundo valor alto de otra tabla.

Los datos de ejemplo son los siguientes. Ambas tablas están conectadas en ItemID

ADDHOPE_3-1669045458072.pngDatos del pedido

ADDHOPE_4-1669045496582.pngDatos de reparación

La Tabla 1 son los datos de pedido y la Tabla 2 son los datos de reparación.

Mi objetivo es encontrar el 2º país de movimiento y luego si está presente 3º.

Resultado previsto:

ADDHOPE_2-1669045196446.png

Aquí: Fecha de reparación Decide el rango

(Primer país de reparación = Fecha de reparación más temprana)

(Segundo país de reparación = Segunda fecha de reparación más temprana)

Cualquier ayuda será muy apreciada.

¡Gracias de antemano!

Saludos

6 REPLIES 6
Syndicate_Admin
Administrator
Administrator

Hi, @ADDHOPE

De acuerdo con su descripción, desea " encontrar el 2º país de movimiento y luego si está presente 3º ".

Estos son los pasos que puede consultar:

(1) Mis datos de prueba son los mismos que los tuyos.

(2) Podemos modificar nuestra 'Tabla2' en Power Query Editor, puedes poner esto en el "Editor avanzado":

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUXJPLcpNzKsEskz0DU31jQyMDJRidSBybkWJecmpQIalvrEBQsoYKOKZl5KZCKQNDfUNTUBSRmApI5BUSWJOJViTkTlIxhDTPLguAyy6DI2gumIB", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [ItemId = _t, RepaireCountry = _t, RepairDate = _t]),
    test = Table.TransformColumnTypes(Source,{{"ItemId", Int64.Type}, {"RepaireCountry", type text}, {"RepairDate", type date}}),
    Custom1 = Table.Group(test,"ItemId",{"test",(x)=>Table.AddIndexColumn(Table.Sort(x,"RepairDate"),"Index",1,1,Int64.Type)      }),
    #"Expanded test" = Table.ExpandTableColumn(Custom1, "test", {"RepaireCountry", "RepairDate", "Index"}, {"RepaireCountry", "RepairDate", "Index"}),
    #"Changed Type" = Table.TransformColumnTypes(#"Expanded test",{{"Index", Int64.Type}})
in
    #"Changed Type"

Entonces podemos obtener esta tabla2:

vyueyunzhmsft_0-1669087613159.png

(3) Luego aplicamos los datos al Power BI Desktop y podemos hacer clic en "Nueva tabla" para crear una tabla:

Table = SELECTCOLUMNS( 'Table1' , "ItemID" ,[ItemId] , "CountrySold" , [CountrySold] , "First repair country" ,var _item = [ItemId] return MAXX(FILTER('Table2' , 'Table2'[Index]=1 && 'Table2'[ItemId]=_item ),[RepaireCountry]) ,"Second repair country", var _item = [ItemId] return MAXX(FILTER('Table2' , 'Table2'[Index]=2 && 'Table2'[ItemId]=_item ),[RepaireCountry]),"Third repair country",var _item = [ItemId] return MAXX(FILTER('Table2' , 'Table2'[Index]=3 && 'Table2'[ItemId]=_item ),[RepaireCountry])   )

(4) Entonces podemos satisfacer su necesidad, el resultado es el siguiente:

vyueyunzhmsft_1-1669087664428.png

Gracias por su tiempo y uso compartido, y gracias por su apoyo y comprensión de PowerBI.

Saludos

Aniya Zhang

Si esta publicación ayuda, considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Aniya Zhang,

Gracias por su respuesta, funciona en los datos de prueba.

Pero, ¿puede explicar esta línea de código para que pueda implementarla también en mi informe real?

ADDHOPE_0-1669125694400.png

Tengo curiosidad al respecto.

Saludos

, @ADDHOPE

Este código significa:

Agrupe según [ItemID], luego ordene de menor a mayor según [RepairDate], y luego numere la tabla "1,2,3...", y luego podemos obtener los primeros tres valores correspondientes según [Índice].

Gracias por su tiempo y uso compartido, y gracias por su apoyo y comprensión de PowerBI.

Saludos

Aniya Zhang

Si esta publicación ayuda, considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Hola Aniya Zhang,

Gracias de nuevo.

Tengo una pregunta más. Continuando con mi evaluación, ahora tengo que averiguar la identificación que tiene diferentes países de ventas y diferentes países de reparación. Puedo hacerlo fácilmente para el 1er país de reparación por esta fórmula.

1st Repair = CALCULATE(COUNT('Table1'[ItemID],'Table2'[RepairCountry] <> SELECTEDVALUE('Table1'[SalesCountry]))

Pero ahora tengo que encontrar todas las identificaciones que tienen un país de reparación diferente al país de ventas. es decir, también quiero obtener esas identificaciones si los países de reparación 2nd o 3rd no coinciden.

Por lo tanto, la tabla debe enumerar todos los ItemID donde el país de reparación no coincide con el país de ventas, independientemente de la instancia, donde sucedió en 3rd o 2nd.

¿Puede por favor ayudarnos? 🙂

Saludos

Syndicate_Admin
Administrator
Administrator

@ADDHOPE,

Cree un rango para la fecha de reparación para el mismo ItemID y utilícelo como filtros para obtener la segunda, tercera fecha de reparación, etc.

Rank = RANKX(FILTER('Table','Table'[ItemID]=EARLIER('Table'[ItemID])),'Table'[RepairDate],,ASC,DENSE)

¿Funciona para ti? ¡Marque esta publicación como una solución si lo hace!
Consulte este blog mío: Cómo exportar datos de telemetría de Azure IoT Central a Power BI

Hola Shaurya,

Gracias por su rápida respuesta. Pero me muestra a continuación el error.

ADDHOPE_0-1669057756067.png

¿Puedes ayudarme con esto?

Gracias.

Helpful resources

Announcements
LearnSurvey

Fabric certifications survey

Certification feedback opportunity for the community.

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

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

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.