Increment y decrement — contadores
Se usan cuando hace falta un contador corrido en lugar de un valor aleatorio: un id secuencial o número de fila (1, 2, 3…), una serie de SKU que sube con un paso fijo, o una cuenta regresiva que baja hasta cero.
Los dos viven dentro de una <sequence>: la
secuencia se calcula una sola vez como arreglo, y cada fila de salida toma el
siguiente valor mediante la
interpolación ${{Nombre}}.
De un vistazo
| Atributo | Se aplica a | Por defecto | Qué hace |
|---|---|---|---|
value | increment, decrement | 0 | Valor inicial |
step | increment, decrement | 1 | Cuánto sumar o restar en cada fila |
Ambos contadores son posicionales y deterministas: cada fila simplemente toma el
siguiente valor de la corrida. Ignoran por completo el
seed (a diferencia de los generadores
aleatorios), así que la secuencia es idéntica en cada ejecución — las salidas de esta
página son exactas, no solo ilustrativas.
increment — un contador que sube
Cada fila es el valor anterior más step. Con los valores por
defecto (value="0", step="1") cuenta de uno en uno, pero el caso común es una
columna de id que arranca en 1.
<sequence name="Id"><gen type="increment" value="1"/></sequence>
1 2 3 4 5
Conviene usarlo siempre que se necesite un id o número de fila estable y sin huecos: cada registro recibe un valor secuencial distinto, y es reproducible entre corridas.
decrement — un contador que baja
Cada fila es el valor anterior menos step. Los mismos dos
atributos; solo se invierte la dirección.
<sequence name="Countdown"><gen type="decrement" value="100"/></sequence>
100 99 98 97 96
Eche mano de decrement cuando necesite una cuenta regresiva, una columna de
cantidad restante o cualquier numeración inversa que empiece alto y vaya bajando.
step — el paso
step define cuánto se mueve el contador entre filas.
Por defecto vale 1. Apunte el mismo arranque (value="1") a dos pasos distintos y
lo único que cambia es la zancada: a la izquierda cuenta de uno en uno, a la derecha
de cinco en cinco:
<sequence name="ByOne"><gen type="increment" value="1"/></sequence>
<sequence name="ByFive"><gen type="increment" value="1" step="5"/></sequence>
...
<data>${{ByOne}} ${{ByFive}}</data>
step=1 step=5 1 1 2 6 3 11 4 16 5 21 6 26
step funciona igual con decrement: controla qué tan grande es cada bajada:
<sequence name="Full"><gen type="decrement" value="1000"/></sequence>
<sequence name="ByHundred"><gen type="decrement" value="1000" step="100"/></sequence>
step=1 step=100 1000 1000 999 900 998 800 997 700 996 600
Use un step propio para series que no avanzan de uno en uno: SKU espaciados de 5 en
5, un precio que cae una cantidad fija, un medidor que marca de diez en diez.
Pasos fraccionarios
step (y también value) acepta un número real, no solo entero — muy útil para
precios, porcentajes o cualquier magnitud medida que se mueve en fracciones:
<sequence name="Price"><gen type="decrement" value="9.99" step="0.50"/></sequence>
9.99 9.49 8.99 8.49 7.99
Determinista por diseño
Los contadores nunca tocan el motor aleatorio, así que la misma configuración produce
la misma corrida sin importar el seed. Dos
ejecuciones con semillas distintas dan columnas de contador idénticas byte por byte:
<gen type="increment" value="1" step="10"/>
seed=alpha seed=omega 1 1 11 11 21 21 31 31 41 41
Eso convierte a los contadores en la columna vertebral confiable de un conjunto de datos: las columnas de id y los números de fila se quedan en su lugar aunque se revuelva todo lo aleatorio a su alrededor.
¿Solo necesita el número de fila?
Si lo único que quiere es el número de fila actual dentro de la plantilla de salida,
existe el valor integrado ${{_count}} — no hace falta
ninguna secuencia. Arranca en 1 y sube de uno en uno con cada registro.
Eche mano de una secuencia increment cuando necesite el contador como valor con
nombre: algo que reutilizar en varios lugares, dar formato con una
máscara, empezar en algo distinto de 1 o avanzar con
un paso distinto de 1.
Vea también
- Secuencias — el contenedor donde viven ambos contadores.
- Valores integrados —
_count,_first,_last,_total. - Determinismo — por qué la misma semilla reproduce los mismos datos (y por qué los contadores lo ignoran).