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:
3. Use replace para volver a cambiar 9/9/9000 a nulo.
Aquí esta el resultado final:
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