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

Power BI is turning 10! Let’s celebrate together with dataviz contests, interactive sessions, and giveaways. Register now.

Reply
Syndicate_Admin
Administrator
Administrator

Aplicar un cambio a los datos de la columna en función del valor de la columna siguiente

Hola, en otro tema, estaba dando una solución para agregar una columna que identifique si un correo electrónico en la columna anterior es válido o inválido:

if Text.Contains([Email], "@") and Text.Contains(Text.Range([Email], Text.PositionOf([Email], "@")), ".") then "valid" else "invalid"

Lo que debo hacer es cambiar la entrada a null si el correo electrónico tiene un formato no válido. Por ejemplo, vemos varias cosas como "No hay correo electrónico", "No hay dirección de correo electrónico" o correos electrónicos mal escritos sin punto o signo @. Todos estos necesito convertirlos en nulos, ya que preferiría tenerlos en nuestro sistema como nulos que como algo que no es una dirección de correo electrónico. No estoy seguro de cómo aplicar este cambio en función del valor de la siguiente columna y, a continuación, quitar la columna válida/no válida.

1 ACCEPTED SOLUTION

Esta parece ser la mejor respuesta que he visto:

= Table.AddColumn(#"Replaced Value1", "Custom", each if [Main Email Address] = null then null else if Text.Contains([Main Email Address], "@") and Text.Contains(Text.Range([Main Email Address], Text.PositionOf([Main Email Address], "@")), ".") then [Main Email Address] else null)

View solution in original post

12 REPLIES 12
Syndicate_Admin
Administrator
Administrator

@83dons ,

Gracias por ponerse en contacto con el Foro de la comunidad de Microsoft.

Siga los pasos a continuación.

1. Crear datos de muestra. Por favor, consulte SNAP.

vdineshya_0-1749649878815.png

2. Se creó una nueva columna, con el código M por debajo en el editor de consultas.

= Table.AddColumn(#"Tipo cambiado", "Personalizado", cada uno si Text.Contains([Email], "@") y Text.Contains(Text.Range([Email], Text.PositionOf([Email], "@")), ".") then [Email] else null)

3. Consulte el ajuste de salida y el archivo PBIX adjunto.

vdineshya_1-1749649997623.png

Si esta información es útil, por favor "Acéptalo como una solución" y dar un "Felicitaciones" para ayudar a otros miembros de la comunidad a resolver problemas similares de manera más eficiente.
Gracias.

Hola @v-dineshya , no creo que eso funcione del todo. Cuando agrego un nuevo paso para filtrar solo a filas con null dentro de la nueva columna personalizada, se bloquea después de un par de roles. ¿Cómo puedo sentir que esto se comprueba más a fondo? Espero ver alrededor de 195 filas enumeradas, ya que tengo 115 con null ya en la dirección de correo electrónico principal, que aún debería ser null, y alrededor de 80 con direcciones de correo electrónico no válidas que esto debería cambiar a null.

powerbi10.png

¿Alguna idea para solucionar problemas @v-dineshya ?

@83dons ,

Reemplace su código M con el código a continuación.

= Table.SelectRows(#"Added Custom", cada [Custom] = null o [Custom] = "")

o

= Table.SelectRows(#"Agregado Personalizado", cada [Personalizado] es nulo)

Si esta información es útil, por favor "Acéptalo como una solución" y dar un "Felicitaciones" para ayudar a otros miembros de la comunidad a resolver problemas similares de manera más eficiente.
Gracias.

Hola @v-dineshya , realmente no necesito el paso Filas filtradas, simplemente estaba allí para poder verificar que apareciera la cantidad correcta de valores nulos en la nueva columna Personalizado. Ese s colunn debería poder filtrarse a nulls solo sin que aparezca una fila de error (ya que esto sugiere que el paso anterior tiene un error). No entiendo por qué arrojaba un error como lo hizo. El código que proporcionó también arroja el siguiente error:

powerbi11.png

Al mirar más a fondo, el problema parece estar con el paso anterior, ya que produce un error al tratar con valores nulos en el campo de dirección de correo electrónico principal existente. Creo que necesita lógica adicional incorporada para tratar con valores nulos. ¿Alguna idea @v-dineshya ? Intente agregar algunos valores nulos en su columna de correo electrónico principal de prueba y verá por sí mismo lo que sucede.

powerbi12.png

Esta parece ser la mejor respuesta que he visto:

= Table.AddColumn(#"Replaced Value1", "Custom", each if [Main Email Address] = null then null else if Text.Contains([Main Email Address], "@") and Text.Contains(Text.Range([Main Email Address], Text.PositionOf([Main Email Address], "@")), ".") then [Main Email Address] else null)

@83dons ,

No hemos tenido noticias suyas sobre la última respuesta y solo estábamos revisando para ver si tiene una resolución yet.do haga clic en Aceptar respuesta y Sí para si esta respuesta fue útil. Y, si tienes más dudas, háznoslo saber.

Gracias.

Syndicate_Admin
Administrator
Administrator

Agregue una columna condicional que devuelva la dirección de correo electrónico si su columna válida / inválida es "válida", de lo contrario, devuelva null. A continuación, elimine la columna original que contiene la dirección de correo electrónico y la columna válida/no válida.

Syndicate_Admin
Administrator
Administrator

Table.TransformColumns(
    YourPreviousStep,
    {
        "Email", 
        each if 
            Text.Contains(_, "@") and 
            Text.Contains(Text.Range(_, Text.PositionOf(_, "@")), ".") and 
            not List.Contains({"no email", "no email address"}, Text.Lower(Text.Trim(_)))
        then _ 
        else null
    }
)

Por favor, marque esta publicación como una solución si le ayuda. Agradezco felicitaciones.

Syndicate_Admin
Administrator
Administrator

@83dons ,

Puede actualizar fácilmente los datos en Power Query para que cualquier valor marcado como "no válido" en la columna de validación se convierta en null. A continuación te explicamos cómo puedes hacerlo paso a paso:

1. Agregue la columna de validación (si aún no lo ha hecho) Ya tiene una fórmula para verificar si los correos electrónicos son válidos. Por ejemplo:

m
if Text.Contains([Email], "@") and Text.Contains(Text.Range([Email], Text.PositionOf([Email], "@")), ".") then "valid" else "invalid"

Supongamos que esta nueva columna se llama EmailStatus.

2. Reemplace los correos electrónicos no válidos por null Agregue una nueva columna utilizando la siguiente lógica:

  • Vaya a Agregar columna > columna personalizada
  • Usa esta fórmula:
m
if [EmailStatus] = "invalid" then null else [Email]

Esto devolverá null para cualquier correo electrónico marcado como no válido y mantendrá el valor original para los correos electrónicos válidos.

3. (Opcional) Eliminar la columna de validación Si ya no necesita la columna EmailStatus, simplemente haga clic con el botón derecho y elimínela.

Resumen:

  • Utilice la lógica de validación para crear una columna de estado.
  • Cree una nueva columna que establezca los correos electrónicos no válidos en null.
  • Elimine la columna auxiliar/estado si lo desea.

¡Hazme saber si deseas el código M exacto o ayuda para manejar casos extremos!

Hola @burakkaragoz esto parece estar bien, aparte de que no se ocupa del hecho de que la columna ya tiene valores nulos legítimamente. ¿Lo siguiente requiere editado ya que los valores nulos también deben aparecer como válidos, por el momento no reciben ninguna clasificación?

if Text.Contains([Email], "@") and Text.Contains(Text.Range([Email], Text.PositionOf([Email], "@")), ".") then "valid" else "invalid"

Helpful resources

Announcements
June 2025 Power BI Update Carousel

Power BI Monthly Update - June 2025

Check out the June 2025 Power BI update to learn about new features.

June 2025 community update carousel

Fabric Community Update - June 2025

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

Top Solution Authors