cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Highlighted
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

Accepted Solutions
Highlighted
Super User II
Super User II

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
Highlighted
Super User II
Super User II

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

Highlighted

¡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!

Highlighted

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.

Highlighted

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.

Highlighted

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.

Highlighted

¡Muchas gracias! Eso funcionó.

Highlighted

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?

Highlighted

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

Helpful resources

Announcements
Community Conference

Power Platform Community Conference

Check out the on demand sessions that are available now!

Community Conference

Microsoft Power Platform Communities

Check out the Winners!

secondImage

Power Platform 2020 release wave 2 plan

Features releasing from October 2020 through March 2021

Top Solution Authors