Crear tabla basada en otra tabla según criterios

Un usuario Pregunto ✅

jt024

Hola,

Soy nuevo en PBI y espero que alguien aquí me pueda ayudar, por favor.

Tengo una tabla que ingresa a PBI con la siguiente estructura:

Articulo fecha1 fecha2 fecha3
1 1/1/2020 2/5/2020 3/6/2020
1 2/2/2020 5/5/2020
2 24/02/2020 31/05/2020 6/6/2020
3 20/01/2020 3/6/2020
3 14/02/2020 3/12/2020 5/5/2020
3 3/6/2020
4 5/7/2020
4
5

Me gustaría crear una tabla basada en lo anterior que se vea así:

Articulo fecha1 fecha2 fecha3
1 2/2/2020 5/5/2020
2 24/02/2020 31/05/2020 6/6/2020
3 3/6/2020
4
5

Así que básicamente en la segunda tabla:

1. El artículo tiene que ser único

2. Las reglas para seleccionar las fechas para las columnas Fecha1, Fecha2 y Fecha3 son:

– Si el elemento tiene varias fechas, seleccione la fecha más reciente y colóquela en la tabla. (por ejemplo, en el Elemento 1 en la primera tabla, el Elemento 1 aparece dos veces y hay fechas para cada uno en la columna Fecha1, luego seleccione la última fecha. Igual que Fecha2, hay 2 fechas, así que seleccione la última fecha. Pero en la columna Fecha3 , solo uno tiene una fecha, así que ignórelo/no muestre ningún valor).

– Si el artículo no tiene fecha, entonces no se muestra ningún valor

– Si el elemento aparece más de una vez y uno de ellos no tiene fecha, entonces no se muestra ningún valor (por ejemplo, en el elemento 4 de la primera tabla, el elemento 4 aparece dos veces pero en la columna fecha1 solo se completa 1 fecha). de dos, entonces no se debe mostrar la fecha).

¿Cómo obtengo la Tabla 2 en PowerBI? ¿Debo hacer esto en PowerQuery (¿fórmula M?) o Dax?

¿Puede alguien indicarme el camino correcto?

Gracias de antemano por su ayuda. Es muy apreciado.

~N~

mahoneypat

Esto es más fácil de hacer en la consulta. A continuación se muestra un ejemplo M sobre cómo hacerlo con sus datos. Para ver cómo funciona, simplemente cree una consulta en blanco, vaya al Editor avanzado y reemplace el texto allí con el código M a continuación. El paso modificado #»Filas agrupadas» es el que deberá adaptar a su consulta.

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("bY1BDsAgCAS/YjybIAvaxxj//402GEqNvW3YYXaMzLlkJiZU1CeCmkehvuIsCwPBuxZYsh6r1wDkdfavSGwP9Vhxk5iJNQA+Zx3sJPHtBjXy+i/Sdmn7Zd4=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Item = _t, Date1 = _t, Date2 = _t, Date3 = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Item", Int64.Type}, {"Date1", type date}, {"Date2", type date}, {"Date3", type date}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"Item"}, {{"Date1", each if List.Contains([Date1], null) then null else List.Max([Date1]), type nullable date}, {"Date2", each if List.Contains([Date2], null) then null else List.Max([Date2]), type nullable date}, {"Date3", each if List.Contains([Date3], null) then null else List.Max([Date3]), type nullable date}})
in
    #"Grouped Rows"

Si esto funciona para usted, por favor márquelo como la solución. También se agradecen los elogios. Por favor, hágamelo saber si no.

Saludos,

Palmadita

jt024

Gracias a todos por su ayuda. Estaba pensando en algo complicado como crear cada columna usando una fórmula y todo eso y contar los duplicados y luego compararlos, pero me alegro de que la agrupación en PowerQuery lo hiciera más fácil. Gracias por enseñarme esta característica. ¡Aprecio tu ayuda!

Cristóbal

@ jt024 Aquí hay un truco para evitar su regla especial con celdas vacías. Por cierto, tenga en cuenta que en Power Query las celdas se marcarán como nulas en lugar de vacías.

1. En Power Query, seleccione las tres columnas de fecha y reemplace todas las celdas nulas con una fecha lejana en el futuro, por ejemplo, 9/9/9000.

2. Seleccione la columna del elemento, Transformar > Agrupar por de la siguiente manera:

MaxFechas.png

3. Use replace para volver a cambiar 9/9/9000 a nulo.

Aquí esta el resultado final:

MaxDatesFinal.png

mahoneypat

Esto es más fácil de hacer en la consulta. A continuación se muestra un ejemplo M sobre cómo hacerlo con sus datos. Para ver cómo funciona, simplemente cree una consulta en blanco, vaya al Editor avanzado y reemplace el texto allí con el código M a continuación. El paso modificado #»Filas agrupadas» es el que deberá adaptar a su consulta.

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("bY1BDsAgCAS/YjybIAvaxxj//402GEqNvW3YYXaMzLlkJiZU1CeCmkehvuIsCwPBuxZYsh6r1wDkdfavSGwP9Vhxk5iJNQA+Zx3sJPHtBjXy+i/Sdmn7Zd4=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Item = _t, Date1 = _t, Date2 = _t, Date3 = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Item", Int64.Type}, {"Date1", type date}, {"Date2", type date}, {"Date3", type date}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"Item"}, {{"Date1", each if List.Contains([Date1], null) then null else List.Max([Date1]), type nullable date}, {"Date2", each if List.Contains([Date2], null) then null else List.Max([Date2]), type nullable date}, {"Date3", each if List.Contains([Date3], null) then null else List.Max([Date3]), type nullable date}})
in
    #"Grouped Rows"

Si esto funciona para usted, por favor márquelo como la solución. También se agradecen los elogios. Por favor, hágamelo saber si no.

Saludos,

Palmadita

vdr

Power Query sería un enfoque más fácil con las siguientes transformaciones
1. Use Unpivot Columns -> Seleccionar columna – Elemento y, en Unpivot Columns, seleccione Unpivot otras columnas

2. Use Agrupar por –> En la ventana Agrupar por, seleccione Elemento como columna, Operación – Máx. y valor debajo de la columna

debe tener 1 entrada para un elemento con fecha máxima

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *