Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!
Estimada comunidad:
Me gustaría calcular la diferencia de fecha entre las dos fechas por nivel de ID, en orden consecutivo. en el mismo orden no, segunda fecha - primera fecha, luego tercera fecha - segunda fecha, luego cuarta fecha - tercera fecha.. hasta la fecha máxima - la segunda fecha máxima.... no hay una idea clara de cuántos registros habrá por cada orden No.
aquí están los datos de muestra. alguna idea de cómo hacer eso? Gracias.
Orden No | fecha de inicio | fecha de vencimiento | Diferencia de días |
1234 | 4/10/2021 | 4/13/2021 | |
1234 | 4/15/2021 | 4/18/2021 | =fechado(4/18/2021 - 4/13/2021) |
1234 | 5/1/2021 | 5/12/2021 | =fechado(5/12/2021 - 4/18/2021) |
1234 | 5/17/2021 | 5/21/2021 | la misma lógica que la anterior |
1235 | 3/12/2021 | 5/1/2021 | la misma lógica que la anterior |
1235 | 4/12/2021 | 5/3/2021 | la misma lógica que la anterior |
1235 | 5/2/2021 | 5/10/2021 | la misma lógica que la anterior |
1235 | 5/8/2021 | 5/16/2021 | la misma lógica que la anterior |
Muchas gracias
Solved! Go to Solution.
Hey @freshpeper ,
desde mi punto de juicio, la forma más fácil está en Power Query. Como es parte de la transformación también creo que ese es el lugar adecuado para hacer la transformación.
Puede hacerlo con una columna Index y, a continuación, tomar el valor de la última fila y hacer sus cálculos.
Marque mi ejemplo en la consulta de energía:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjQyNlHSUTLRNzTQNzIwMoSwjWFsBaVYHWRFpkiKLGBs25TEktSUzLQ0Dbiogq4C3BhNZDNM9Q1h2oBMI0wj4KIQIyywGmGOMMMIbl5xYm6qQk5+emayQmKxQmJSflkqTJspUNoYyTokVxDQZYKiy5hIXUBnIVllQLQuCyRdZnh1xQIA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Order No" = _t, #"start date" = _t, #"due date" = _t, #"Days difference" = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Order No", Int64.Type}, {"start date", type text}, {"due date", type text}, {"Days difference", type text}}),
#"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1, Int64.Type),
#"Add Value Last Row" = Table.AddColumn(#"Added Index", "due date last row", each if [Index] > 0 then #"Added Index"{ [Index] -1 }[due date] else 0),
#"Changed Type with Locale" = Table.TransformColumnTypes(#"Add Value Last Row", {{"start date", type date}, {"due date", type date}, {"due date last row", type date}}, "en-US"),
#"Add Oder No Last Row" = Table.AddColumn(#"Changed Type with Locale", "Order No last row", each if [Index] = 0 then [Order No] else #"Added Index"{ [Index] -1 }[Order No] ),
#"Added DaysDifference" = Table.AddColumn(#"Add Oder No Last Row", "DaysDifference", each if [Index] <> 0 and [Order No] = [Order No last row] then Duration.Days([due date] - [due date last row]) else null ),
#"Removed Columns" = Table.RemoveColumns(#"Added DaysDifference",{"Index", "due date last row", "Order No last row"})
in
#"Removed Columns"
hola
Esta fórmula de columna calculada funciona
=if(ISBLANK(CALCULATE(MAX(Data[due date]),FILTER(Data,Data[Order No]=EARLIER(Data[Order No])&&Data[due date]<EARLIER(Data[due date])))),BLANK(),1*(Data[due date]-CALCULATE(MAX(Data[due date]),FILTER(Data,Data[Order No]=EARLIER(Data[Order No])&&Data[due date]<EARLIER(Data[due date])))))
Espero que esto ayude.
@selimovd @Ashish_Mathur Es genial!!! He aprendido dos maneras diferentes de resolver esto. muy apreciado ~~
Hey @freshpeper ,
¡es una gran noticia!
Ahora usted sabe cómo resolverlo en power query y también en DAX.
No olvides marcar ambos como solución. Así, la siguiente persona que está leyendo el post sabe qué enfoques funcionan.
Saludos
Denis
hola
Esta fórmula de columna calculada funciona
=if(ISBLANK(CALCULATE(MAX(Data[due date]),FILTER(Data,Data[Order No]=EARLIER(Data[Order No])&&Data[due date]<EARLIER(Data[due date])))),BLANK(),1*(Data[due date]-CALCULATE(MAX(Data[due date]),FILTER(Data,Data[Order No]=EARLIER(Data[Order No])&&Data[due date]<EARLIER(Data[due date])))))
Espero que esto ayude.
Hey @freshpeper ,
desde mi punto de juicio, la forma más fácil está en Power Query. Como es parte de la transformación también creo que ese es el lugar adecuado para hacer la transformación.
Puede hacerlo con una columna Index y, a continuación, tomar el valor de la última fila y hacer sus cálculos.
Marque mi ejemplo en la consulta de energía:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjQyNlHSUTLRNzTQNzIwMoSwjWFsBaVYHWRFpkiKLGBs25TEktSUzLQ0Dbiogq4C3BhNZDNM9Q1h2oBMI0wj4KIQIyywGmGOMMMIbl5xYm6qQk5+emayQmKxQmJSflkqTJspUNoYyTokVxDQZYKiy5hIXUBnIVllQLQuCyRdZnh1xQIA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Order No" = _t, #"start date" = _t, #"due date" = _t, #"Days difference" = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Order No", Int64.Type}, {"start date", type text}, {"due date", type text}, {"Days difference", type text}}),
#"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1, Int64.Type),
#"Add Value Last Row" = Table.AddColumn(#"Added Index", "due date last row", each if [Index] > 0 then #"Added Index"{ [Index] -1 }[due date] else 0),
#"Changed Type with Locale" = Table.TransformColumnTypes(#"Add Value Last Row", {{"start date", type date}, {"due date", type date}, {"due date last row", type date}}, "en-US"),
#"Add Oder No Last Row" = Table.AddColumn(#"Changed Type with Locale", "Order No last row", each if [Index] = 0 then [Order No] else #"Added Index"{ [Index] -1 }[Order No] ),
#"Added DaysDifference" = Table.AddColumn(#"Add Oder No Last Row", "DaysDifference", each if [Index] <> 0 and [Order No] = [Order No last row] then Duration.Days([due date] - [due date last row]) else null ),
#"Removed Columns" = Table.RemoveColumns(#"Added DaysDifference",{"Index", "due date last row", "Order No last row"})
in
#"Removed Columns"
@selimovd puedo preguntar por qué agrega #"Added Index" delante de la instrucción if-then? gracias de antemano
Hey @freshpeper ,
¿Probaste la solución?
Esto está utilizando el resultado del paso anterior (#"Índice agregado") está navegando a la fila anterior ([Índice] -1) y, a continuación, está seleccionando la columna ([fecha de vencimiento] o [Orden No]) de esa fila.
Así obtienes el valor de la última fila.
¿Tiene sentido?
Sí, lo intenté y funcionó perfectamente, pero no entendí por qué. Nunca antes había usado una consulta de este tipo para llamar a otro valor mediante el índice de la misma fila. gran gracias 🙂
también significa #" Índice añadido" es llamar al paso anterior, {[index] - 1} es la posición a la que debe referirse, [fecha de vencimiento] es el valor que debe mostrarse en el paso actual.
Hey @freshpeper ,
Sí, es una manera muy agradable. En realidad {[index] - 1} es sólo una forma dinámica de obtener la fila. También puede escribir {4} para obtener la 4ª fila del paso que mencionó. Por ejemplo, el valor de la 4ª fila de la columna Índice:
= Table.AddColumn(#"Add Value Last Row", "IndexColumn 4th value", each #"Add Value Last Row"{ 4 }[Index] )
Y también puede hacer referencia a todos los pasos de Power Query. Por ejemplo, en el último paso puede hacer referencia a una columna en el primer paso que ya eliminó hace unos pasos:
= Table.AddColumn(#"Add IndexColumn 4th value", "Description from Sourcee", each #"Add Value Last Row"{ [Index] } [Days difference] )
Compruebe mis ejemplos:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjQyNlHSUTLRNzTQNzIwMoSwjWFsBaVYHWRFpkiKLGBs25TEktSUzLQ0Dbiogq4C3BhNZDNM9Q1h2oBMI0wj4KIQIyywGmGOMMMIbl5xYm6qQk5+emayQmKxQmJSflkqTJspUNoYyTokVxDQZYKiy5hIXUBnIVllQLQuCyRdZnh1xQIA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Order No" = _t, #"start date" = _t, #"due date" = _t, #"Days difference" = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Order No", Int64.Type}, {"start date", type text}, {"due date", type text}, {"Days difference", type text}}),
#"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1, Int64.Type),
#"Add Value Last Row" = Table.AddColumn(#"Added Index", "due date last row", each if [Index] > 0 then #"Added Index"{ [Index] -1 }[due date] else 0),
#"Add IndexColumn 4th value" = Table.AddColumn(#"Add Value Last Row", "IndexColumn 4th value", each #"Add Value Last Row"{ 4 } [Index] ),
#"Added Description from Source" = Table.AddColumn(#"Add IndexColumn 4th value", "Description from Sourcee", each #"Add Value Last Row"{ [Index] } [Days difference] )
in
#"Added Description from Source"
Es genial, ¿no?
Si tienes más preguntas, avísame.
Saludos
Denis