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

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Semipro211
Regular Visitor

Uso de valores de dos tablas para crear una columna DAX calculada con la instrucción Switch()/IN()

Buenas tardes

Soy nuevo miembro de la comunidad de PBI, pero he estado trabajando con Power BI durante un par de años en el trabajo. Finalmente me he encontrado con algo a lo que no pude encontrar una respuesta a través de la búsqueda de los foros. Mi problema es el siguiente:

Tengo un gran número de dispositivos informáticos en toda mi organización, 15.000 euros. Los nombres de estas máquinas reflejan en qué región se encuentran (tenemos 147 regiones). Lo que estoy intentando hacer es crear una columna que examina el nombre del equipo y usa algo como una instrucción switch para dar un resultado del código de región. El desafío es que a veces, debido a algunas convenciones de nomenclatura anteriores, el nombre de la máquina puede contener un código numérico en lugar del código alfa para la región, por lo que estoy tratando de ver si básicamente puedo almacenar los valores de una columna en una tabla y usar los que están dentro de una fórmula para calcular la nueva columna.

Estos son algunos ejemplos de lo que tengo y lo que estoy tratando de obtener. En la Tabla1, la"Región" es lo que estoy tratando de conseguir con la forumula.

Tabla1

Tabla1

NombredeequipoRegión (columna calculada)
WLABCD1234Abcd
ELDEFG4567DEFG
26381WLTEGHIK

Tabla2

RegionNumberRegionCode
1234Abcd
4567DEFG
26381GHIK

Lo que estoy intentando hacer con la fórmula es mirar ComputerName en Table1 y si encuentra una secuencia de letras que coincide con un RegionCode en Table2, coloca ese código en la columna De región, de lo contrario, si una secuencia numérica coincide con RegionNumber, úsela para obtener el valor de RegionCode y agregarlo a la columna. No estoy en contra de usar varias columnas si es necesario, pero mi método actual usaría una instrucción Switch con más de 500 casos, y esperaba que hubiera una manera más eficiente de hacerlo. Aquí está la fórmula que tengo hasta ahora, gracias a @v-yuta-msft en un post anterior.

Region =
SWITCH(
     TRUE(),
     ISERROR( FIND( "ABCD", 'Table1'[ComputerName])) <> TRUE(), "ABCD",
     ISERROR( FIND( "1234", 'Table1'[ComputerName])) <> TRUE(), "ABCD",
     ISERROR( FIND( "DEFG", 'Table1'[ComputerName])) <> TRUE(), "DEFG",
     ISERROR( FIND( "4567", 'Table1'[ComputerName])) <> TRUE(), "DEFG",
     ISERROR( FIND( "GHIK", 'Table1'[ComputerName])) <> TRUE(), "GHIK",
     ISERROR( FIND( "26381", 'Table1'[ComputerName])) <> TRUE(), "GHIK",
...

Como puede ver, hacer esto para cada valor que tengo en Table2 crearía una fórmula SWITCH() muy larga. Esperaba encontrar algo como lo que he hecho en PowerShell donde puedo almacenar o leer los valores en Table2 y usar un IN ('Table1'[ComputerName]) o algo similar.

Cualquier ayuda es muy apreciada!

3 REPLIES 3
Mariusz
Community Champion
Community Champion

Hola @Semipro211

Consulte el archivo adjunto con una solución en Power Query

Saludos
Mariusz

Si este post ayuda,entonces por favor considere aceptarlo como la solución.

Por favor, siéntase libre de conectarse conmigo.
Linkedin

Hola @Mariusz

Gracias por tomarse el tiempo para responder. Me sorprende lo simple que es el código M para hacer esto! Aunque me encontré con un problema. Cuando intento duplicar este código en mi propio proyecto pbix, mi columna personalizada expandida me da valores nulos. Debido a la naturaleza sensible de la información real con la que estoy trabajando, no puedo publicar mi archivo pbix, pero al menos puedo dar la estructura de las dos tablas reales con sus nombres de columna reales y algunos datos ficticios. Todas las columnas son columnas de texto.

AD Completado

Cn
TWWSOV00985231N
LWYKTC21443004L
EXANNZ20187333M
NCOM20071133W

CLC_CSI

ClcCsi
985WSOV
21443YKTC
20187ANNZ
20071ANNZ

let
  (ommitted for brevity)
  #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each 
        Table.SelectRows( 
            CLC_CSI, (b) => Text.Contains( [CN], b[CLC] ) 
        )
    ),
  #"Expanded Custom" = Table.ExpandTableColumn(#"Added Custom", "Custom", {"CSI"}, {"CSI"})
in
    #"Expanded Custom"

No recibo ningún error, pero cada valor es null.

@Mariusz Permítanme corregirme, debo haber malinterpretado parte del código M en su solución, cuando cambié b[CLC] a b[CSI], la columna ahora funciona según lo esperado/esperado.

¡Gracias!

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

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

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.