Columna personalizada Rand between

Un usuario Pregunto ✅

Asamadi

Quiero crear una columna personalizada (entorno del editor de consultas) y generar números aleatorios entre, por ejemplo, 500 a 1000.

He probado esta fórmula: Number.RandomBetween(500,1000)

pero crea el mismo valor en todas las celdas de Columna.

¿Cómo puedo hacer esto?

Asamadi

En respuesta a Marcel Beug

Encontré la solución:

Si agrego la columna de índice, la fórmula funciona correctamente.

Marcel Beug

En tales casos, usaría otra columna de números, como en:

let
    Source = Table.FromColumns({List.Numbers(0,20,1)},type table[Number = Int64.Type]),
    #"Added Custom" = Table.AddColumn(Source, "Random", each Number.RandomBetween(500+[Number]-[Number],1000))
in
    #"Added Custom"

La parte [Number]-[Number] fuerza el recálculo del número aleatorio para cada fila. Puede usar cualquier columna numérica para esto.

smpa01

En respuesta a Marcel Beug

Hola @MarcelBeug,

Usé su método aquí http://community.powerbi.com/t5/Desktop/Randomly-assiginng-a-specific-value-to-one-of-the-rows/mp/3….

Datos sin procesar: https://drive.google.com/open?id=1osjur8vQtLnW5UL4_E-17D2FKFpmsPjQj2_v61rlPkk

Código

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Email", type text}}),
    #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 1, 1),
    #"Added Custom" = Table.AddColumn(#"Added Index", "Custom", each 1),
    #"Added Custom1" = Table.AddColumn(#"Added Custom", "Custom.1", each Number.RandomBetween(1+[Index]-[Index],100000)),
    #"Changed Type1" = Table.TransformColumnTypes(#"Added Custom1",{{"Custom.1", Int64.Type}}),
    #"Inserted Division" = Table.AddColumn(#"Changed Type1", "Division", each [Custom.1] / 100, type number),
    #"Grouped Rows" = Table.Group(#"Inserted Division", {"Custom"}, {{"Max", each List.Max([Division]), type number}, {"AD", each _, type table}}),
    #"Expanded AD" = Table.ExpandTableColumn(#"Grouped Rows", "AD", {"Email", "Index", "Division"}, {"AD.Email", "AD.Index", "AD.Division"}),
    #"Added Custom2" = Table.AddColumn(#"Expanded AD", "Custom.1", each if [AD.Division]=[Max] then 2 else 1)
in
    #"Added Custom2"

Ahora, una vez que el código realiza la aleatorización por primera vez en el paso – Custom1 agregado, no quiero que se vuelva a calcular en los siguientes pasos, ya que tengo la intención de hacer mi cálculo de seguimiento basado en el valor de la columna «Custom.1» derivado en Custom1 agregado .

¿Hay una manera de hacer eso?

Gracias de antemano.

Marcel Beug

En respuesta a Marcel Beug

De manera alternativa y similar, puede crear una columna (temporal) con el valor límite inferior en cada fila.

let
    Source = Table.FromColumns({List.Numbers(500,20,0)},type table[NumberFrom = Int64.Type]),
    #"Added Custom" = Table.AddColumn(Source, "Random", each Number.RandomBetween([NumberFrom],1000))
in
    #"Added Custom"

Asamadi

En respuesta a Marcel Beug

Encontré la solución:

Si agrego la columna de índice, la fórmula funciona correctamente.

bspilar

En respuesta a Asamadi

Agregar el índice antes de que funcione la función rand. ¡Gracias!

rayoOC

En respuesta a Asamadi

tienes el codigo que usaste?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *