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

Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!

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

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

@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
April AMA free

Microsoft Fabric AMA Livestream

Join us Tuesday, April 09, 9:00 – 10:00 AM PST for a live, expert-led Q&A session on all things Microsoft Fabric!

March Fabric Community Update

Fabric Community Update - March 2024

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

Top Solution Authors