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

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
mcgee
New Member

Llenar un problema de estanque-- hacer referencia a la fila anterior en una columna calculada o personalizada

Estoy tratando de resolver un problema de llenar un estanque. Podemos suponer que el estanque está vacío con una cierta capacidad en el día 0. En el primer día, se podía agregar agua y sacarse del estanque. Si no hay suficiente agua en el estanque para lo que se saca, hay una segunda fuente. Del mismo modo, si queremos poner más agua en el estanque de la que hay capacidad para, se puede enviar a otro lugar. A continuación se muestra una tabla de ejemplo.

En el día 1, se añaden 100 galones y se retiran 50. Esto deja 50 galones en el estanque.

En el día 2, se agregan 200 galones, pero se quitan 400. Debido a que no hay 400 galones disponibles, el estanque está vacío.

Este es un problema fácil en Excel porque puede hacer referencia a la celda de arriba para ver cuán lleno estaba el estanque ayer. No puedo averiguar cómo hacer esto en PBI. He intentado usar los trucos de índice en el código DAX y m sugerido en este foro, pero parece que necesito algún tipo de columna de suma acumulada que 'restablece' cuando el estanque se vacía.

¡Gracias por tu ayuda! Realmente he estado luchando con el problema.

Capacidad de inicio10000Galones
DíaAñadir al estanque (galones)Restar del estanque (galones)Agua en estanque (galones)Agua adicional necesaria (galones)Enviar a otro estanque (galones)
0 0
1100505000
220040001500
350104000
4100509000
5300010308000
640000708000
705006580-65800
8400020100000560
9010000000
1070502000

2 REPLIES 2
mahoneypat
Employee
Employee

Lo descubrí. Olvidé de List.Accumulate que le permite hacer cálculos recursivos. Coloque esta consulta y la siguiente función en power query para que funcione. La consulta contiene los datos de ejemplo que ha publicado. Simplemente copie cada uno en una consulta en blanco independiente.

Consulta con resultados finales

Dejar
Fuente: Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("XY/LDQAhCER74ewmoOKnFrP9t7FGRGQPIvpmhjAGEAQgxFn5FDlvGBBnFxfNqITYeFILicaZs4/unvLsEuIxJ2xeUGSUG qftY/r/vFS1J44WffImkWEWWQ5XERTde1LmYJJKN1h3jR9wM-", BinaryEncoding.Base64), Compression.Deflate)), let _t ((texto de tipo) meta [Serialized.Text ? true]) en la tabla de tipos [Día - _t, "Añadir al estanque (galones)" - _t, "Restar del estanque (galones)" - _t, "Agua en estanque (galones)" - _t, "Agua adicional necesaria (galones)" - _t, "Enviar a otro estanque (galones)" - _t]),
"Tipo cambiado" - Tabla.TransformColumnTypes(Fuente, "Día", Int64.Type, "Añadir al estanque (galones)", Int64.Type, "Restar del estanque (galones)", Int64.Type, "Agua en estanque (galones)", Int64.Type, "Agua adicional necesaria (galones)", Int64.Type, "Enviar a otro estanque(galones)",
"Columnas renombradas" ? Tabla.RenameColumns('Tipo Cambiado'''''Añadir al estanque (galones)", "Agregar","Restar del estanque (galones)", "Eliminar"-,
"Eliminar otras columnas" ? Tabla.SelectColumns(?"Columnas renombradas", "Agregar", "Eliminar", "Agua en estanque (galones)",),
"Añadido personalizado" - Tabla.AddColumn ("Eliminado otras columnas", "Delta", cada [Agregar]-[Quitar]),
"Changed Type1" á Table.TransformColumnTypes('Added Custom'',''Delta',Int64.Type'),
"Función personalizada invocada" - Tabla.AddColumn ("Changed Type1", "Volumen", cada fxDayVolume([Day])),
"Changed Type2" ? Table.TransformColumnTypes("Invoked Custom Function","Volume", Int64.Type,),
Custom1 - Table.TransformColumns("Changed Type2", á"Volume", cada uno si _<0 entonces 0 _))
En
Personalizado1

Función para iterar a través de cada día

fxDayVolume (día) ?>

Dejar
Fuente: List.FirstN(PondAdds[Delta], día),
Custom1 - List.Accumulate(Source,0, (prev, current) ?> si prev < 0 then current else prev + current)
En
Personalizado1





Did I answer your question? Mark my post as a solution! Kudos are also appreciated!

To learn more about Power BI, follow me on Twitter or subscribe on YouTube.


@mahoneypa HoosierBI on YouTube


edhans
Super User
Super User

Esto le mostrará lo que es en el día anterior Agua en estanque total en una columna calculada:

Previous Day = 
VAR CurrentDay = Pond[Day]
VAR PreviousDayTotal = 
MAXX(
    FILTER(
        ALL(Pond),
        Pond[Day] = CurrentDay - 1
    ),
    Pond[Water in Pond (gallons)]
)
RETURN
PreviousDayTotal

Pero no estoy seguro de que sea el mejor enfoque, y se limita a las cantidades diarias. Una medida sería una mejor manera de hacer esto, ya que podría manejar cualquier rango de fechas, pero no entiendo su problema y la solución esperada suficiente para comenzar con eso con la información dada.



Did I answer your question? Mark my post as a solution!
Did my answers help arrive at a solution? Give it a kudos by clicking the Thumbs Up!

DAX is for Analysis. Power Query is for Data Modeling


Proud to be a Super User!

MCSA: BI Reporting

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

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