¿Crear columna calculada en DAX para colores hexadecimales aleatorios?

Un usuario Pregunto ✅

PlátanoBanano

Hola, me gustaría generar colores hexadecimales aleatorios en una tabla de películas que he extraído de una lista de sesiones (una tabla diferente). ¿Hay alguna manera de crear una columna calculada con valores de color hexadecimal aleatorios?

Puntos de bonificación si hay una manera de hacerlo uniformemente a través del arco iris usando el número total de películas en la tabla?

¡Gracias!

En respuesta a PlátanoBanano

Hola @BananaBanana,

Debe estar relacionado con la evaluación diferida de funciones aleatorias, que parecen calcular sólo una vez cuando se utilizan en la columna calculada. Puede intentar usar la siguiente fórmula que agregue algún truco para que sea dinámico en cada fila:

RandomColor =
VAR cR =
    RANDBETWEEN ( [Value] - [Value], 255 )
VAR cG =
    RANDBETWEEN ( [Value] - [Value], 255 )
VAR cB =
    RANDBETWEEN ( [Value] - [Value], 255 )
VAR RedP0 =
    MOD ( cR, 16 )
VAR RedP1 =
    MOD ( INT ( cR / 16 ), 16 )
VAR GreenP0 =
    MOD ( cG, 16 )
VAR GreenP1 =
    MOD ( INT ( cG / 16 ), 16 )
VAR BlueP0 =
    MOD ( cB, 16 )
VAR BlueP1 =
    MOD ( INT ( cB / 16 ), 16 )
VAR hexTable =
    ADDCOLUMNS (
        { RedP1, RedP0, GreenP1, GreenP0, BlueP1, BlueP0 },
        "Hex", SWITCH (
            [Value],
            10, "A",
            11, "B",
            12, "C",
            13, "D",
            14, "E",
            15, "F",
            [Value]
        )
    )
RETURN
    "https://community.powerbi.com/t5/Translated-Spanish-Desktop/Crear-columna-calculada-en-DAX-para-colores-hexadecimales/td-p/#" & CONCATENATEX ( hexTable, [Hex], "" )

saludos

Xiaoxin Sheng

PlátanoBanano

Así que lo hice para trabajar, pero es bastante torpe – me encantaría una mejor solution.

Creé una tabla llamada AlternativeBases y la he rellenado con una columna decimal con los números 10-25 y una columna hexadecimal con los valores 0 a F.

Esto se debe a que estoy usando la función MID para extraer los valores de color decimal y no sé cómo hacerlo para valores de menos de 2 dígitos, así que cambié todo por 10.

En mi tabla de películas he creado dos columnas, una columna DecColor con el siguiente DAX *:

DecColor = RANDBETWEEN(16,25) & RANDBETWEEN(16,25) & RANDBETWEEN(16,25) & RANDBETWEEN(16,25) & RANDBETWEEN(16,25) & RANDBETWEEN(16,25)

* Sólo utilicé valores entre 16 y 25 por lo que mi color sería más claro porque el texto anterior es negro.

Y una columna HexColor con el siguiente DAX:

HexColor = "https://community.powerbi.com/t5/Translated-Spanish-Desktop/Crear-columna-calculada-en-DAX-para-colores-hexadecimales/td-p/#" & LOOKUPVALUE(AlternativeBases[Hexadecimal],AlternativeBases[Decimal],value(mid(FilmList[DecColor],1,2))) & LOOKUPVALUE(AlternativeBases[Hexadecimal],AlternativeBases[Decimal],value(mid(FilmList[DecColor],3,2)))& LOOKUPVALUE(AlternativeBases[Hexadecimal],AlternativeBases[Decimal],value(mid(FilmList[DecColor],5,2)))& LOOKUPVALUE(AlternativeBases[Hexadecimal],AlternativeBases[Decimal],value(mid(FilmList[DecColor],7,2)))& LOOKUPVALUE(AlternativeBases[Hexadecimal],AlternativeBases[Decimal],value(mid(FilmList[DecColor],9,2)))& LOOKUPVALUE(AlternativeBases[Hexadecimal],AlternativeBases[Decimal],value(mid(FilmList[DecColor],11,2)))

Eso funciona bien, pero no es bonito.

hola @BananaBanana,

Puede utilizar la siguiente fórmula DAX para generar un color hexadecimal aleatorio:

RandomColor =
VAR cR =
    RANDBETWEEN ( 0, 255 )
VAR cG =
    RANDBETWEEN ( 0, 255 )
VAR cB =
    RANDBETWEEN ( 0, 255 )
VAR RedP0 =
    MOD ( cR, 16 )
VAR RedP1 =
    MOD ( INT ( cR / 16 ), 16 )
VAR GreenP0 =
    MOD ( cG, 16 )
VAR GreenP1 =
    MOD ( INT ( cG / 16 ), 16 )
VAR BlueP0 =
    MOD ( cB, 16 )
VAR BlueP1 =
    MOD ( INT ( cB / 16 ), 16 )
VAR hexTable =
    ADDCOLUMNS (
        { RedP1, RedP0, GreenP1, GreenP0, BlueP1, BlueP0 },
        "Hex", SWITCH (
            [Value],
            10, "A",
            11, "B",
            12, "C",
            13, "D",
            14, "E",
            15, "F",
            [Value]
        )
    )
RETURN
    "https://community.powerbi.com/t5/Translated-Spanish-Desktop/Crear-columna-calculada-en-DAX-para-colores-hexadecimales/td-p/#" & CONCATENATEX ( hexTable, [Hex], "" )

3.png

saludos

Xiaoxin Sheng

PlátanoBanano

En respuesta a v-shex-msft

Muchas gracias por la respuesta.

¡Eso es tan extraño! Claramente funciona en su captura de pantalla, pero en mi modelo se repite el mismo código hexadecimal todo el camino hasta la columna:

BananaBanana_0-1594950896865.png

En respuesta a PlátanoBanano

Hola @BananaBanana,

Debe estar relacionado con la evaluación diferida de funciones aleatorias, que parecen calcular sólo una vez cuando se utilizan en la columna calculada. Puede intentar usar la siguiente fórmula que agregue algún truco para que sea dinámico en cada fila:

RandomColor =
VAR cR =
    RANDBETWEEN ( [Value] - [Value], 255 )
VAR cG =
    RANDBETWEEN ( [Value] - [Value], 255 )
VAR cB =
    RANDBETWEEN ( [Value] - [Value], 255 )
VAR RedP0 =
    MOD ( cR, 16 )
VAR RedP1 =
    MOD ( INT ( cR / 16 ), 16 )
VAR GreenP0 =
    MOD ( cG, 16 )
VAR GreenP1 =
    MOD ( INT ( cG / 16 ), 16 )
VAR BlueP0 =
    MOD ( cB, 16 )
VAR BlueP1 =
    MOD ( INT ( cB / 16 ), 16 )
VAR hexTable =
    ADDCOLUMNS (
        { RedP1, RedP0, GreenP1, GreenP0, BlueP1, BlueP0 },
        "Hex", SWITCH (
            [Value],
            10, "A",
            11, "B",
            12, "C",
            13, "D",
            14, "E",
            15, "F",
            [Value]
        )
    )
RETURN
    "https://community.powerbi.com/t5/Translated-Spanish-Desktop/Crear-columna-calculada-en-DAX-para-colores-hexadecimales/td-p/#" & CONCATENATEX ( hexTable, [Hex], "" )

saludos

Xiaoxin Sheng

PlátanoBanano

En respuesta a v-shex-msft

Se produce un error «La columna ‘Valor’ no se puede encontrar o no se puede utilizar en esta expresión»

RANDBETWEEN ( [Valor] - [Valor], 255 )

En respuesta a PlátanoBanano

Hola @BananaBanana,

Sustituya [valor] a sus campos que tenga un valor numérico único. (por ejemplo, campo de índice o ID)

saludos

Xiaoxin Sheng

PlátanoBanano

En respuesta a v-shex-msft

Aaaah que lo arregló – duh. Él terminó usando [value] – [value] + 50 para mantener los colores más claros y evitar tener fondos oscuros con texto oscuro.

¡Muchas gracias! Ese es un buen truco usando el índice para forzar la generación del número aleatorio. ¿Crees que es un bicho?

Amitchandak

@BananaBanana, no está claro con la necesidad de Random

recomienda

https: //radacad.com/dax-and-conditional-formatting-better-juntos-find-the-biggest-and-smallest-num …

http://officeusers.blogspot.com/2019/04/dax-using-colors-names-instead-of-hex.html

harshnathani

Hola @BananaBanana,

https: //community.powerbi.com/t5/Desktop/Stablished-randoms-and-different-colors-for-charts-values/t …

https://community.powerbi.com/t5/Desktop/Random-color-in-column-chart/td-p/631060

https://community.powerbi.com/t5/Desktop/Dynamically-changing-colors-in-Bar-chart/td-p/613529

saludos

Áspero Nathani

Apreciar con un Kudos !! (Haga clic en el botón Pulgares arriba)

¿He respondido a tu pregunta? ¡Marca mi puesto como una solución!

Deja un comentario

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