cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Frequent Visitor

Cálculo de PowerBI utilizando valores de columna separados por 7 días

Hola

He recorrido los foros aquí, pero ninguna de las soluciones que he encontrado trabajo para mi caso. Realmente agradecería cualquier y toda la ayuda que puedo obtener, ya que soy bastante nuevo en PowerBI.

Me gustaría generar la tercera y cuarta columnas en la tabla siguiente (el nombre de la 4a columna es la fórmula de Excel que me gustaría implementar en PowerBI):

Fecha NewObs Obs7DaysPrior LOG((NewObs/Obs7DaysPrior),2)
5/6/2020 67
5/7/2020 68
5/8/2020 69
5/9/2020 70
5/10/2020 71
5/11/2020 72
5/12/2020 80 67 0.255838904
5/13/2020 87 68 0.355480655
5/14/2020 87 69 0.334419039
5/15/2020 87 70 0.313660479
5/16/2020 87 71 0.293196376
5/17/2020 90 72 0.321928095
5/18/2020 90 80 0.169925001
5/19/2020 93 87 0.096215315
5/20/2020 95 87 0.126912112
5/21/2020 95 87 0.126912112
5/22/2020 95 87 0.126912112
5/23/2020 97 90 0.108059746

En el cálculo anterior, la diferencia es de 7 días, pero podría ser 14 o 30 o 5, dependiendo de los requisitos en el futuro.

Muchas gracias,

Cobe.

1 ACCEPTED SOLUTION
Super User III
Super User III

Un par de comentarios:

Su ejemplo habla de 7 días antes, pero en realidad muestra 6 días antes.

¿Seguro que quieres logaritmo dualis?

¿Te referías a columnas cuando escribiste columnas?

Este es el enfoque según su ejemplo.

Tabla LogN en Power Query:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("lZFLDoMwDESvUrGuwJ/Y8ZwFcf9rNJUawEAWXVjK4j05nlnXyRZfhISm9/Rq4/X3OGZ7f6maqBhQkSgMKJypSgOKKWE8wjhhMsLkjMXtXprFLDRApRuajA7ut9OsZiXIzbpRng0chpbCIEU37NHYM2kGqzuVuhv+bPBxB5ThWr0bqTrckmo7hCFB2O+IRyOOX7EDYkTcjVQp9Po9mgkubMp9h6R22+qbweJgYZZu8N+G/G2kzlGvETSDggy1tHS3Dw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Date = _t, #" " = _t, NewObs = _t, #" .1" = _t, #" Obs7DaysPrior " = _t, #" .2" = _t, #"LOG((NewObs/Obs7DaysPrior),2)" = _t]),
    #"Removed Other Columns" = Table.SelectColumns(Source,{"Date", "NewObs"}),
    #"Changed Type" = Table.TransformColumnTypes(#"Removed Other Columns",{{"Date", type date}, {"NewObs", type number}})
in
    #"Changed Type"

Columnas calculadas (!)

Obs7DaysPrior = 
var d = LogN[Date]
return CALCULATE(sum(LogN[NewObs]),all(LogN),LogN[Date]=d-6)

LogN = LOG(divide(LogN[NewObs],LogN[Obs7DaysPrior]),2)

Y el resultado

lbendlin_0-1597789389943.png

View solution in original post

8 REPLIES 8
Super User III
Super User III

Un par de comentarios:

Su ejemplo habla de 7 días antes, pero en realidad muestra 6 días antes.

¿Seguro que quieres logaritmo dualis?

¿Te referías a columnas cuando escribiste columnas?

Este es el enfoque según su ejemplo.

Tabla LogN en Power Query:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("lZFLDoMwDESvUrGuwJ/Y8ZwFcf9rNJUawEAWXVjK4j05nlnXyRZfhISm9/Rq4/X3OGZ7f6maqBhQkSgMKJypSgOKKWE8wjhhMsLkjMXtXprFLDRApRuajA7ut9OsZiXIzbpRng0chpbCIEU37NHYM2kGqzuVuhv+bPBxB5ThWr0bqTrckmo7hCFB2O+IRyOOX7EDYkTcjVQp9Po9mgkubMp9h6R22+qbweJgYZZu8N+G/G2kzlGvETSDggy1tHS3Dw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Date = _t, #" " = _t, NewObs = _t, #" .1" = _t, #" Obs7DaysPrior " = _t, #" .2" = _t, #"LOG((NewObs/Obs7DaysPrior),2)" = _t]),
    #"Removed Other Columns" = Table.SelectColumns(Source,{"Date", "NewObs"}),
    #"Changed Type" = Table.TransformColumnTypes(#"Removed Other Columns",{{"Date", type date}, {"NewObs", type number}})
in
    #"Changed Type"

Columnas calculadas (!)

Obs7DaysPrior = 
var d = LogN[Date]
return CALCULATE(sum(LogN[NewObs]),all(LogN),LogN[Date]=d-6)

LogN = LOG(divide(LogN[NewObs],LogN[Obs7DaysPrior]),2)

Y el resultado

lbendlin_0-1597789389943.png

View solution in original post

¡Gracias por responder! Los 7 días es sólo un marcador de posición como he indicado en mi solicitud. Siéntase libre de usar 6 si lo desea.

Sí, me gustaría usar log(base 2) para los cálculos.

No estoy seguro de su pregunta: "¿Te referías a las columnas cuando escribiste columnas?", pero sí, las cuatro columnas presentadas en la tabla. Los dos primeros son los datos disponibles y los dos últimos son los que me gustaría calcular.

¿Podría ayudarme a recorrer su LogN PowerQuery? Es completamente nuevo para mí. Específicamente, me gustaría entender cómo puedo incorporar estos fragmentos de código en mi libro de trabajo:

Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("lZFLDoMwDESvUrGuwJ/Y8ZwFcf9rNJUawEAWXVjK4j05nl nyXyRZfhISm9/Rq4/X3OGZ7f6maqBhQkSgMKJypSgOKKWE8wjhhMsLkjMXtXprFLDRApRuajA7ut9OsZiXIzbpRng0chpbCIEU37NHYM2kGqzuVuhv+bPBxB5ThWr0bqTrckmo7hCFB2O+IRyOOX7EDYkTcjVQp9Po9mgkubMp9h6R22+qbweJgYZZu8N+G/G2kzlGvETSDggy1tHS3Dw", BinaryEncoding.Base64), Compression.Deflate)), let _t ((type nullable text) meta [Serialized.Text ? true])

Y:

en la tabla de tipos [Fecha , _t, " , _t, NewObs , _t, "LOG", .1" , _t, "Obs7DaysPrior", _t "_t" , ".2" , _t "LOG((NewObs/Obs7DaysPrior),2)"

Por último, ¿existe una función similar a "IFERROR" de Excel para deshacerse de los valores "infinitos"" ?

¡Gracias!

El código de Power Query debe tomarse tal cual y colocarlo en el editor avanzado de una consulta en blanco, reemplazando cualquier código reutilizable que haya.

Las dos primeras líneas de que son básicamente los datos y el esquema de la tabla de ejemplo.

Power BI tiene un concepto de "columnas calculadas" y "medidas": son dos cosas muy diferentes con cálculos diferentes. Elegiste columnas, eso es lo que sirven las fórmulas.

El código DIVIDE() permite resultados alternativos para evitar dividir por cero, y DAX también tiene patrones IF(ISBLANK()) para ayudarle a decidir qué hacer en caso de que no se devuelva nada.

Gracias. Por lo tanto, PowerQuery ha creado una tabla denominada "LogN" con una sola columna denominada "LogN", que almacena solo un valor de texto, que es el propio código PowerQuery.

LogN.PNG

No estoy seguro de si esto era intencionado.

No. No así.

Cree una consulta en blanco. Haga clic con el botón derecho. Seleccione Editor avanzado. Reemplace el código existente por el de mi publicación.

Sólo un seguimiento rápido. Me doy cuenta de que los datos están codificados de forma rígida desde el json. ¿Cómo puedo apuntar NewsObs a la columna real de la tabla de datos que va más allá de estas fechas en mi ejemplo?

Cambie la línea "Origen " para que apunte a sus datos reales.

¡Muchas gracias! Eso funcionó.

Helpful resources

Announcements
secondImage

Happy New Year from Power BI

This is a must watch for a message from Power BI!

December Update

Check it Out!

Click here to read more about the December 2020 Updates!

Community Blog

Check it Out!

Click here to read the latest blog and learn more about contributing to the Power BI blog!

Get Ready for Power BI Dev Camp

Get Ready for Power BI Dev Camp

Mark your calendars and join us for our next Power BI Dev Camp!.

Top Solution Authors