cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Syndicate_Admin
Administrator
Administrator

calcular la fecha entre dos fechas y en orden consecutivo

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 Nofecha de iniciofecha de vencimientoDiferencia de días
12344/10/20214/13/2021
12344/15/20214/18/2021=fechado(4/18/2021 - 4/13/2021)
12345/1/20215/12/2021=fechado(5/12/2021 - 4/18/2021)
12345/17/20215/21/2021la misma lógica que la anterior
12353/12/20215/1/2021la misma lógica que la anterior
12354/12/20215/3/2021la misma lógica que la anterior
12355/2/20215/10/2021la misma lógica que la anterior
12355/8/20215/16/2021la misma lógica que la anterior

Muchas gracias

2 ACCEPTED SOLUTIONS
Syndicate_Admin
Administrator
Administrator

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"

Si necesitas ayuda, por favor avísame.
Si respondiera a su pregunta, estaría feliz si pudiera marcar mi publicación como una solución ✔️ y darle un pulgar hacia arriba 👍
Saludos
Denis

View solution in original post

Syndicate_Admin
Administrator
Administrator

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.

Untitled.png

View solution in original post

8 REPLIES 8
Syndicate_Admin
Administrator
Administrator

@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

Syndicate_Admin
Administrator
Administrator

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.

Untitled.png

View solution in original post

Syndicate_Admin
Administrator
Administrator

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"

Si necesitas ayuda, por favor avísame.
Si respondiera a su pregunta, estaría feliz si pudiera marcar mi publicación como una solución ✔️ y darle un pulgar hacia arriba 👍
Saludos
Denis

View solution in original post

@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?

Si necesitas ayuda, por favor avísame.
Si respondiera a su pregunta, estaría feliz si pudiera marcar mi publicación como una solución ✔️ y darle un pulgar hacia arriba 👍
Saludos
Denis

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

Helpful resources

Announcements
PBI User Groups

Welcome to the User Group Public Preview

Check out new user group experience and if you are a leader please create your group!

MBAS on Demand

2021 Release Wave 2 Plan

Power Platform release plan for the 2021 release wave 2 describes all new features releasing from October 2021 through March 2022.

July 2021 Update 768x460.png

Check it out!

Click here to read more about the July 2021 Updates

Top Solution Authors