Una de las características clave del lenguaje M es su cualidad de ser case sensitive, o sensible a mayúsculas y minúsculas. Esto significa que las palabras clave del lenguaje, las variables, los nombres de las funciones y cualquier otro identificador deben escribirse siempre teniendo en cuenta esta peculiaridad.

Power Query incluye una serie de comparadores integrados en el lenguaje que pueden usarse para determinar la forma en la que realizamos una comparación. Estos son los siguientes:

  • Comparer.Ordinal: se usa para realizar una comparación ordinal exacta.
  • Comparer.OrdinalIgnoreCase: se usa para realizar una comparación ordinal exacta que no distingue mayúsculas de minúsculas.
  • Comparer.FromCulture: se usa para realizar una comparación compatible con referencias culturales.

Probablemente, el que vamos a poder usar en un mayor número de casos sea Comparer.OrdinalIgnoreCase, que nos va a permitir realizar comparaciones ignorando por completo las diferencias que puedan existir en cuanto al uso de mayúsculas y minúsculas en los valores a comparar.

La sintaxis de la función es la siguiente:

  Comparer.OrdinalIgnoreCase(
    x as any,
    y as any
) as number  

Siendo ‘x’ e ‘y’, los valores a comparar entre si. El resultado de la función es:

0, cuando ambos valores son iguales
-1, cuando el valor ‘x’ es menor que el valor ‘y’
+1, cuando el valor ‘x’ es mayor que el valor ‘y’

Por lo tanto, si queremos comparar dos textos que solo se diferencian entre si en el uso de mayúsculas y minúsculas, está función nos devolverá el valor 0, indicando que ambos textos son iguales. Podemos ver un ejemplo sencillo en la siguiente imagen:

Esta función se usa frecuentemente como argumento de otras funciones como Comparer.Equals, List.Distinct o Text.Contains. Por ejemplo, en la siguiente imagen podemos ver cómo utilizar Comparer.OrdinalIgnoreCase con el objetivo de saber si una cadena de texto contiene ‘rol’:

Como podemos observar, la nueva columna nos devuelve siempre el valor lógico TRUE debido a que, al usar Comparer.OrdinalIgnoreCase como argumento de Text.Contains, estamos ignorando por completo las diferencias que puedan existir entre ambos valores por el distinto uso de mayúsculas y minúsculas.