Voy a trabajar con el modelo que suelo usar frecuente, pero solo con las columnas fechas, provincias, y, cantidad.
El modelo está en rango.
Quiero agregar una nueva columna, y, que reste el valor de la celda C3 menos el valor de la celda C2, así con el resto de las celdas.
Si acepto la expresión anterior, y, arrastro, tendré la resta.
Vemos que hemos dejado a un lado, la celda C2, en dicha celda, no hemos realizado ningún calculo, pero en Power Query, si tenemos que lidiar con esta celda.
Si uso la siguiente expresión, la función FILAS, que nos devuelve el total de filas dentro de un rango, donde dejo como absoluta la primera referencia, obtengo el valor 1, porque en el rango C2:C2, solo hay una fila.
=FILAS($C$2:C2)
Arrastramos, y, obtenemos el numero de filas para cada fila.
Ahora, usare el condicional SI, para preguntar que, si el resultado de FILAS es 1, que ponga un texto en blanco, en caso contrario, que haga la resta, pero la resta es la celda C2 menos C1, operación que no se va a realizar, porque índice es igual a 1.
=SI(FILAS($C$2:C2)=1;"";C2-C1)
Arrastramos, y, ya lo tenemos.
Ahora, vamos a Power Query, para ello, con una celda dentro del modelo, vamos a la pestaña de datos, dentro del grupo obtener y transformar, hacemos clic en desde una tabla o rango.
En Excel, el índice lo hemos creado a través de la función FILAS, aquí lo vamos a hacer agregando una columna de índice, pero como en Excel, tenemos que lidiar con C2, la cual no tiene valor, en Power Query, se trabaja en base cero, quiere decir que el primer elemento es cero, por lo que dicho índice debe de comenzar en -1, de esta manera, el segundo elemento será el elemento cero, es decir, el primer elemento.
Para ello, vamos a la pestaña agregar columna, desplegamos columna de índice, y, seleccionamos personalizado.
Se abre la ventana de agregar columna de índice, en la ventana índice inicial, ponemos -1, y, en la ventana incremento, ponemos 1.
Aceptamos.
Ya tenemos el índice, donde vemos como índice cero, el segundo registro.
Esta columna índice, va a identificar cada registro.
Voy a ir a pasos aplicados, selecciono el paso índice agregado, pulso F2 para cambiar el nombre, y, elimino el espacio.
Como en Excel, para rescatar un valor, debemos de indicar una fila, y, una columna.
Agregamos una columna personalizada.
En la ventana formula de columna personalizada, voy a poner el último paso, y, aceptamos.
Obtenemos una columna llena de tablas.
Vamos a la barra de fórmulas, y, vemos el paso anterior.
= Table.AddColumn(#"Columnas con nombre cambiado"
El nombre de la columna, que no he cambiado.
= Table.AddColumn(#"Columnas con nombre cambiado", "Personalizado",
Después tenemos para cada indiceagregado, es decir, para cada valor de índice.
= Table.AddColumn(#"Columnas con nombre cambiado", "Personalizado", each indiceagregado)
Tenemos que hacer una búsqueda bidireccional, quiere decir que necesitamos una tabla, vamos a volver a la barra de fórmulas, antes el paréntesis de cierre, voy a poner {3}, es lo que se conoce como índice posicional, con esto le estamos indicando que vaya al registro número 3.
= Table.AddColumn(#"Columnas con nombre cambiado", "Personalizado", each indiceagregado {3})
Vemos que ahora en cada fila aparece la palabra registro (record).
Si hacemos clic en cualquier registro, veremos en la parte inferior, el registro numero 3, todos los registros, mostraran el registro número 3, el registro numero 3, seria el registro numero 4, ya que empieza a contar desde el numero cero.
Pero, lo que quiero obtener es la cantidad.
Entonces, si vuelvo a la barra de fórmulas, después del índice posicional 3, abro un corchete, pongo el nombre de la columna cantidad, y, cierro el corchete.
= Table.AddColumn(#"Columnas con nombre cambiado", "Personalizado", each indiceagregado {4} [Cantidad])
Aceptamos, y, accedemos al valor de la columna cantidad del registro número 4.
Es decir, hemos hecho una búsqueda bidireccional, porque hemos especificado una fila, y, una columna.
Pero, necesitamos trabajar con todos los valores de la columna índice, por lo que voy a borrar el índice posicional 3, abro un corchete, ponga la columna índice, y, cierro el corchete.
= Table.AddColumn(#"Columnas con nombre cambiado", "Personalizado", each indiceagregado {[indice]} [Cantidad])
Vemos los valores de la columna índice, pero como primer valor tenemos un error, ¿Por qué?, pues el índice -1, no tiene valor asignado, después, pasa al índice numero 0, que es el valor anterior, es decir, el numero 3, quiere decir que tenemos los valores colocados de manera que ya podemos restar una cantidad con la cantidad anterior, quiere decir, que tenemos acceder a la fila anterior.
Lo siguiente es realizar la resta, entonces, después del paso indiceagregado, ponemos entre corchetes, la columna cantidad, y, la restamos.
= Table.AddColumn(#"Columnas con nombre cambiado", "Personalizado", each indiceagregado {[indice]} [Cantidad]-[Cantidad])
Vemos que obtenemos la misma columna que tenemos en Excel.
Vemos que el primer registro nos devuelve un error, porque no hay calculo que realizar, pues, vamos a usar el condicional IF, para solventarlo, donde pregunto que si la columna índice es igual a -1, que ponga un texto en blanco, aunque, también puede poner NULL, que, en Excel, es una celda vacía, en caso contrario, que haga la resta.
= Table.AddColumn(#"Columnas con nombre cambiado", "Personalizado", each if [indice]=-1 then "" else indiceagregado {[indice]} [Cantidad]-[Cantidad])
Vemos que ya no aparece el error.
Pues ya tenemos el ejercicio realizado, solo tenemos que cerrar y cargar.
Comments