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

Join the FabCon + SQLCon recap series. Up next: Power BI, Real-Time Intelligence, IQ and AI, and Data Factory take center stage. All sessions are available on-demand after the live show. Register now

Reply
Syndicate_Admin
Administrator
Administrator

Cómo agregar 1 al valor de la fila anterior si la fila actual es nula en POWERQuery

Hola a todos

Estoy buscando una solución alternativa para la siguiente cae.

La fila actual es nula y añadimos 1 al valor de la fila anterior y la colocamos en la fila actual

Singh_10_0-1720080423536.png

Quiero rellenar estos valores nulos agregando 1 al valor de la fila anterior en Power Query

3 REPLIES 3
Syndicate_Admin
Administrator
Administrator

Hola @Singh_10 ,

Basándome en su descripción, creé estos datos.

vlinhuizhmsft_1-1720089073084.png

Por favor, siga estos pasos:

1. Agregue una columna personalizada.

if [Column1] = null then "NULL" else Text.From([Column1])

vlinhuizhmsft_2-1720089279473.png

2.Filas agrupadas

vlinhuizhmsft_3-1720089539822.png

3.Amplíe los datos.

vlinhuizhmsft_4-1720089585956.png

4.Elija la columna1 y rellene hacia abajo.

vlinhuizhmsft_5-1720089608920.png

5. Agregue una columna personalizada.

if [Custom] = "NULL" then [Column1] + [Index] else Number.FromText([Custom])

vlinhuizhmsft_6-1720089670398.png

El resultado final es el que se muestra en la imagen a continuación, y puede eliminar las columnas que no necesite.

vlinhuizhmsft_7-1720089733060.png

El código M general es el siguiente:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjRUitWJVjI2BlMIwtQUTcDMTCk2FgA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", Int64.Type}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each if [Column1] = null then "NULL" else Text.From([Column1])),
    #"Grouped Rows" = Table.Group(#"Added Custom", {"Custom"}, {{"Data", each Table.AddIndexColumn(_, "Index", 1, 1, Int64.Type)}}, GroupKind.Local),
    #"Expanded Data" = Table.ExpandTableColumn(#"Grouped Rows", "Data", {"Column1", "Index"}, {"Column1", "Index"}),
    #"Filled Down" = Table.FillDown(#"Expanded Data",{"Column1"}),
    #"Added Custom1" = Table.AddColumn(#"Filled Down", "Custom2", each if [Custom] = "NULL" then [Column1] + [Index] else Number.FromText([Custom]))
in
    #"Added Custom1"

Si tiene alguna otra pregunta, no dude en ponerse en contacto conmigo.

Saludos
Zhu
Equipo de apoyo a la comunidad

Si hay alguna publicación que ayude, considere Aceptarla como la solución para ayudar a los demás miembros a encontrarla más rápidamente.
Si no entiendo sus necesidades o aún tiene problemas con él, no dude en hacérnoslo saber. ¡Muchas gracias!

Syndicate_Admin
Administrator
Administrator

Buen día @Singh_10 ,

Un enfoque consiste en generar una nueva lista para cada columna iterando a través de cada columna y generando un valor que es el valor de la lista original o el valor anterior más uno. Estas nuevas listas pueden reemplazar las columnas originales. Aquí hay algo de código.

  1. Lo primero que hay que notar es la función fnFillNulls (que está hacia el final del código): toma una lista (en este caso, una columna) y genera una nueva lista.
  2. Se llama a fnFillNulls para la columna value_min y la columna value_max.
  3. Una nueva tabla se construye utilizando los encabezados de la tabla original como encabezados, pero las dos nuevas listas como columnas.
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjYwMjUyMlfSAbEsLAwMlWJ1oiFsYyOwqLGRsYk5VNTYyMTMDCJqamluARbNK83JAQqBKVrwTQzAACgEZBmCWBiqYgE=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [value_min = _t, value_max = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"value_min", Int64.Type}, {"value_max", Int64.Type}}),

fillMins = fnFillNulls(#"Changed Type"[value_min]),
fillMaxs = fnFillNulls(#"Changed Type"[value_max]),
tblHeaders = Table.ColumnNames(#"Changed Type"),
tblColumns = {fillMins} & {fillMaxs},
combined = Table.FromColumns(tblColumns, tblHeaders),
#"Changed Type1" = Table.TransformColumnTypes(combined,{{"value_min", Int64.Type}, {"value_max", Int64.Type}}),

fnFillNulls = (col as list) as list =>
List.Generate( ()=>
[i=0, output=col{0}],
each [i] < List.Count(col),
each [i=[i]+1, output = if col{i}=null then [output]+1 else col{i}],
each [output]
)
in
#"Changed Type1"

El resultado es (agregué filas después de sus datos para mostrar "volver a la normalidad" después de una serie de valores nulos).

collinsg_0-1720083724799.png

Espero que esto ayude.

Hola @collinsg

Gracias por la respuesta.

Necesito esto sobre la base de ID, necesito agrupar por ID, un ID tiene varias filas en función de las fechas, donde algunas fechas tienen valores nulos y necesito llenarlos agregando 1 al valor anterior, mínimo o máximo, en función de la fecha o el valor de fecha y hora y el ID

Helpful resources

Announcements
April Power BI Update Carousel

Power BI Monthly Update - April 2026

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

New to Fabric survey Carousel

New to Fabric Survey

If you have recently started exploring Fabric, we'd love to hear how it's going. Your feedback can help with product improvements.

Power BI DataViz World Championships carousel

Power BI DataViz World Championships - June 2026

A new Power BI DataViz World Championship is coming this June! Don't miss out on submitting your entry.

FabCon and SQLCon Highlights Carousel

FabCon &SQLCon Highlights

Experience the highlights from FabCon & SQLCon, available live and on-demand starting April 14th.

Top Kudoed Authors