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
Anonymous
Not applicable

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
lbendlin
Super User
Super User

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
lbendlin
Super User
Super User

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

Anonymous
Not applicable

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

Anonymous
Not applicable

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.

Anonymous
Not applicable

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.

Anonymous
Not applicable

¡Muchas gracias! Eso funcionó.

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