Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Trabalhar com dados de texto às vezes pode ser confuso. Por exemplo, o nome da cidade de Redmond pode ser representado em um banco de dados usando diferentes invólucros ("Redmond", "redmond" e "REDMOND"). Isso pode causar um problema ao transformar os dados no Power Query porque a linguagem de fórmula do Power Query M é sensível a maiúsculas e minúsculas.
Felizmente, o Power Query M fornece funções para limpar e normalizar o caso de dados de texto. Existem funções para converter texto em minúsculas (abc), maiúsculas (ABC) ou capitalização correta (Abc). Além disso, o Power Query M também fornece várias maneiras de ignorar a distinção entre maiúsculas e minúsculas.
Este artigo mostra como alterar a capitalização de palavras em texto, listas e tabelas. Ele também descreve várias maneiras de ignorar maiúsculas e minúsculas ao manipular dados em texto, listas e tabelas. Além disso, este artigo discute como classificar de acordo com o caso.
Alterar maiúsculas e minúsculas no texto
Existem três funções que convertem texto em minúsculas, maiúsculas e capitalização inicial. As funções são Text.Lower, Text.Uppere Text.Proper. Os exemplos simples a seguir demonstram como essas funções podem ser usadas em texto.
Converter todos os caracteres do texto em minúsculas
O exemplo a seguir demonstra como converter todos os caracteres de uma string em minúsculas.
let
Source = Text.Lower("The quick brown fox jumps over the lazy dog.")
in
Source
Este código produz a seguinte saída:
the quick brown fox jumps over the lazy dog.
Converter todos os caracteres do texto em maiúsculas
O exemplo a seguir demonstra como converter todos os caracteres em uma cadeia de texto em maiúsculas.
let
Source = Text.Upper("The quick brown fox jumps over the lazy dog.")
in
Source
Este código produz a seguinte saída:
THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG.
Converter todas as palavras em maiúsculas iniciais
O exemplo a seguir demonstra como converter todas as palavras da frase em maiúsculas iniciais.
let
Source = Text.Proper("The quick brown fox jumps over the lazy dog.")
in
Source
Este código produz a seguinte saída:
The Quick Brown Fox Jumps Over The Lazy Dog.
Alterar maiúsculas e minúsculas em listas
Ao alterar maiúsculas e minúsculas em listas, a função mais comum a ser usada é List.Transform. Os exemplos simples a seguir demonstram como essa função pode ser usada em listas.
Converter todos os itens em minúsculas
O exemplo a seguir mostra como alterar todos os itens de uma lista para minúsculas.
let
Source = {"Squash", "Pumpkin", "ApPlE", "pear", "orange", "APPLE", "Pear", "pear"},
#"Lower Case" = List.Transform(Source, Text.Lower)
in
#"Lower Case"
Este código produz a seguinte saída:
Converta todos os itens em letras maiúsculas
O exemplo a seguir demonstra como alterar todos os itens em uma lista para maiúsculas.
let
Source = {"Squash", "Pumpkin", "ApPlE", "pear", "orange", "APPLE", "Pear", "pear"},
#"Upper Case" = List.Transform(Source, Text.Upper)
in
#"Upper Case"
Este código produz a seguinte saída:
Converta todos os itens para maiúsculas iniciais
O exemplo a seguir demonstra como alterar todos os itens em uma lista para maiúsculas iniciais.
let
Source = {"Squash", "Pumpkin", "ApPlE", "pear", "orange", "APPLE", "Pear", "pear"},
#"Proper Case" = List.Transform(Source, Text.Proper)
in
#"Proper Case"
Este código produz a seguinte saída:
Alterar maiúsculas e minúsculas em tabelas
Ao alterar maiúsculas e minúsculas em tabelas, a função mais frequentemente utilizada é Table.TransformColumns. Há também uma função que pode utilizar para alterar o caso do texto contido em uma fila, chamada Table.TransformRows. No entanto, esta função não é usada com tanta frequência.
Os exemplos simples a seguir demonstram como a Table.TransformColumns
função pode ser usada para alterar o caso em tabelas.
Converter todos os itens de uma coluna da tabela em minúsculas
O exemplo a seguir demonstra como alterar todos os itens em uma coluna de tabela para minúsculas, neste caso, os nomes de clientes.
let
Source = #table(type table [CUSTOMER = text, FRUIT = text],
{
{"Tulga", "Squash"},
{"suSanna", "Pumpkin"},
{"LESLIE", "ApPlE"},
{"Willis", "pear"},
{"Dilbar", "orange"},
{"ClaudiA", "APPLE"},
{"afonso", "Pear"},
{"SErgio", "pear"}
}),
#"Lower Case" = Table.TransformColumns(Source, {"CUSTOMER", Text.Lower})
in
#"Lower Case"
Este código produz a seguinte saída:
Converter todos os itens de uma coluna da tabela em maiúsculas
O exemplo a seguir demonstra como alterar todos os itens numa coluna da tabela para maiúsculas, neste caso, os nomes de frutas.
let
Source = #table(type table [CUSTOMER = text, FRUIT = text],
{
{"Tulga", "Squash"},
{"suSanna", "Pumpkin"},
{"LESLIE", "ApPlE"},
{"Willis", "pear"},
{"Dilbar", "orange"},
{"ClaudiA", "APPLE"},
{"afonso", "Pear"},
{"SErgio", "pear"}
}),
#"Upper Case" = Table.TransformColumns(Source, {"FRUIT", Text.Upper})
in
#"Upper Case"
Este código produz a seguinte saída:
Converter todos os itens de uma tabela para a primeira letra maiúscula
O exemplo a seguir demonstra como alterar todos os itens em ambas as colunas da tabela para a forma correta, com a primeira letra de cada palavra em maiúscula.
let
Source = #table(type table [CUSTOMER = text, FRUIT = text],
{
{"Tulga", "Squash"},
{"suSanna", "Pumpkin"},
{"LESLIE", "ApPlE"},
{"Willis", "pear"},
{"Dilbar", "orange"},
{"ClaudiA", "APPLE"},
{"afonso", "Pear"},
{"SErgio", "pear"}
}),
#"Customer Case" = Table.TransformColumns(Source, {"CUSTOMER", Text.Proper}),
#"Proper Case" = Table.TransformColumns(#"Customer Case", {"FRUIT", Text.Proper})
in
#"Proper Case"
Este código produz a seguinte saída:
Ignorando o caso
Em muitos casos, ao pesquisar ou substituir itens, talvez seja necessário ignorar o caso do item que está procurando. Como a linguagem de fórmula do Power Query M diferencia maiúsculas de minúsculas, as comparações entre itens que são idênticos mas têm diferenças de maiúsculas e minúsculas resultam na identificação dos itens como diferentes, não idênticos. Um método para ignorar maiúsculas e minúsculas envolve a utilização da Comparer.OrdinalIgnoreCase função em funções que incluem um parâmetro equationCriteria
ou um parâmetro comparer
. Outro método de ignorar maiúsculas e minúsculas envolve o uso da IgnoreCase
opção (se disponível) em funções que incluem um options
parâmetro.
Ignorando caso no texto
Às vezes, ao procurar texto, é necessário ignorar maiúsculas e minúsculas para encontrar todas as ocorrências do texto pesquisado. As funções de texto geralmente usam a função Comparer.OrdinalIgnoreCase
no parâmetro comparer
para ignorar maiúsculas e minúsculas ao testar a igualdade.
O exemplo a seguir mostra como ignorar maiúsculas e minúsculas ao determinar se uma frase contém uma palavra específica, independentemente de maiúsculas e minúsculas.
let
Source = Text.Contains(
"The rain in spain falls mainly on the plain.",
"Spain",
Comparer.OrdinalIgnoreCase
)
in
Source
Este código produz a seguinte saída:
true
O exemplo a seguir mostra como recuperar a posição inicial da última ocorrência da palavra "o" na frase, independentemente do caso.
let
Source = Text.PositionOf(
"THE RAIN IN SPAIN FALLS MAINLY ON THE PLAIN.",
"the",
Occurrence.Last,
Comparer.OrdinalIgnoreCase
)
in
Source
Este código produz a seguinte saída:
34
Ignorando casos em listas
Qualquer função de lista que contenha um parâmetro opcional equationCriteria
pode usar a função Comparer.OrdinalIgnoreCase para ignorar diferenças de maiúsculas e minúsculas na lista.
O exemplo a seguir verifica se uma lista contém um item específico, ignorando maiúsculas e minúsculas. Neste exemplo, List.Contains só pode comparar um item na lista, não pode comparar uma lista com uma lista. Para isso, você precisa usar List.ContainsAny.
let
Source = List.Contains(
{"Squash", "Pumpkin", "ApPlE", "pear", "orange", "APPLE", "Pear", "pear"},
"apple",
Comparer.OrdinalIgnoreCase
)
in
Source
Este código produz a seguinte saída:
true
Os exemplos a seguir verificam se uma lista contém todos os itens especificados no segundo parâmetro (value
), ignorando maiúsculas ou minúsculas. Se algum item não estiver contido na lista, como cucumber
no segundo exemplo, a função retornará FALSE.
let
Source = List.ContainsAll(
{"Squash", "Pumpkin", "ApPlE", "pear", "orange", "APPLE", "Pear", "pear"},
{"apple", "pear", "squash", "pumpkin"},
Comparer.OrdinalIgnoreCase
)
in
Source
Este código produz a seguinte saída:
true
let
Source = List.ContainsAll(
{"Squash", "Pumpkin", "ApPlE", "pear", "orange", "APPLE", "Pear", "pear"},
{"apple", "pear", "squash", "pumpkin", "cucumber"},
Comparer.OrdinalIgnoreCase
)
in
Source
Este código produz a seguinte saída:
false
O exemplo a seguir verifica se algum dos itens na lista são maçãs ou peras, ignorando maiúsculas e minúsculas.
let
Source = List.ContainsAny(
{"Squash", "Pumpkin", "ApPlE", "PEAR", "orange", "APPLE", "Pear", "peaR"},
{"apple","pear"},
Comparer.OrdinalIgnoreCase
)
in
Source
Este código produz a seguinte saída:
true
O exemplo a seguir mantém apenas itens exclusivos, ignorando maiúsculas e minúsculas.
let
Source = List.Distinct(
{"Squash", "Pumpkin", "ApPlE", "PEAR", "orange", "APPLE", "Pear", "peaR"},
Comparer.OrdinalIgnoreCase
)
in
Source
Este código produz a seguinte saída:
No exemplo anterior, a saída exibe o caso do primeiro item exclusivo encontrado na lista. Assim, embora existam duas maçãs (ApPlE
e APPLE
), apenas o primeiro exemplo encontrado é exibido.
O exemplo a seguir mantém apenas itens exclusivos sem considerar maiúsculas e minúsculas, mas também retorna todos os resultados em minúsculas.
let
Source = List.Distinct(
{"Squash", "Pumpkin", "ApPlE", "PEAR", "orange", "APPLE", "Pear", "peaR"},
Comparer.OrdinalIgnoreCase
),
#"Lower Case" = List.Transform(Source, Text.Lower)
in
#"Lower Case"
Este código produz a seguinte saída:
Ignorando caso em tabelas
As tabelas têm várias maneiras de ignorar a diferença entre maiúsculas e minúsculas. Funções de tabela como Table.Contains, Table.Distincte Table.PositionOf todas contêm equationCriteria
parâmetros. Esses parâmetros podem usar a função Comparer.OrdinalIgnoreCase para ignorar diferenças de maiúsculas e minúsculas em tabelas, da mesma forma que as listas nas seções anteriores. As funções de tabela, como Table.MatchesAnyRows que contêm um parâmetro condition
, também podem usar Comparer.OrdinalIgnoreCase encapsuladas em outras funções de tabela para ignorar maiúsculas e minúsculas. Outras funções de tabela, especificamente para correspondência difusa, podem usar a IgnoreCase
opção.
O exemplo a seguir demonstra como selecionar linhas específicas que contêm a palavra "pera" ignorando maiúsculas e minúsculas. Este exemplo usa o parâmetro condition
de Table.SelectRows com Text.Contains como condicional para fazer as comparações ignorando maiúsculas e minúsculas.
let
Source = #table(type table[CUSTOMER = text, FRUIT = text],
{
{"Tulga", "Squash"},
{"suSanna", "Pumpkin"},
{"LESLIE", "ApPlE"},
{"Willis", "pear"},
{"Dilbar", "orange"},
{"ClaudiA", "APPLE"},
{"afonso", "Pear"},
{"SErgio", "pear"}
}),
#"Select Rows" = Table.SelectRows(
Source, each Text.Contains([FRUIT], "pear", Comparer.OrdinalIgnoreCase))
in
#"Select Rows"
Este código produz a seguinte saída:
O exemplo a seguir mostra como determinar se alguma das linhas de uma tabela contém um pear
na FRUIT
coluna. Este exemplo usa Comparer.OrdinalIgnoreCase numa função Text.Contains utilizando o parâmetro condition
da função Table.MatchesAnyRows.
let
Source = #table(type table [CUSTOMER = text, FRUIT = text],
{
{"Tulga", "Squash"},
{"suSanna", "Pumpkin"},
{"LESLIE", "ApPlE"},
{"Willis", "PEAR"},
{"Dilbar", "orange"},
{"ClaudiA", "APPLE"},
{"afonso", "Pear"},
{"SErgio", "peAR"}
}),
#"Select Rows" = Table.MatchesAnyRows(Source,
each Text.Contains([FRUIT], "pear", Comparer.OrdinalIgnoreCase))
in
#"Select Rows"
Este código produz a seguinte saída:
true
O exemplo a seguir demonstra como pegar uma tabela com valores inseridos por usuários que contém uma coluna listando suas frutas favoritas, usando nenhum formato definido. Esta coluna é primeiro comparada utilizando correspondência difusa para extrair os nomes das suas frutas favoritas, que são então exibidos na sua própria coluna, chamada Cluster. Em seguida, a coluna Cluster é examinada para determinar os diferentes frutos distintos que estão na coluna. Uma vez que os frutos únicos são determinados, um passo final é mudar todos os nomes dos frutos para minúsculas.
let
// Load a table of user's favorite fruits into Source
Source = #table(type table [Fruit = text], {{"blueberries"},
{"Blue berries are simply the best"}, {"strawberries"}, {"Strawberries = <3"},
{"Apples"}, {"'sples"}, {"4ppl3s"}, {"Bananas"}, {"fav fruit is bananas"},
{"Banas"}, {"My favorite fruit, by far, is Apples. I simply love them!"}}
),
// Create a Cluster column and fuzzy match the fruits into that column
#"Cluster fuzzy match" = Table.AddFuzzyClusterColumn(
Source, "Fruit", "Cluster",
[IgnoreCase = true, IgnoreSpace = true, Threshold = 0.5]
),
// Find the distinct fruits from the Cluster column
#"Ignore cluster case" = Table.Distinct(
Table.SelectColumns(#"Cluster fuzzy match", "Cluster"),
Comparer.OrdinalIgnoreCase
),
// Set all of the distinct fruit names to lower case
#"Set lower case" = Table.TransformColumns(#"Ignore cluster case",
{"Cluster", Text.Lower}
)
in
#"Set lower case"
Este código produz a seguinte saída:
Caso e ordenação
Listas e tabelas podem ser classificadas usando um List.Sort ou Table.Sort, respectivamente. No entanto, a classificação do texto depende do caso dos itens associados na lista ou tabela para determinar a ordem de classificação real (crescente ou decrescente).
A forma mais comum de classificação usa texto que está todo em minúsculas, todo em maiúsculas, ou capitalizado como em títulos. Se houver uma mistura desses casos, a ordem de classificação crescente é a seguinte:
- Qualquer texto na coluna da lista ou tabela que comece com uma letra maiúscula é o primeiro.
- Se houver texto correspondente, mas um for em maiúsculas e outro em maiúsculas, a versão em maiúsculas será a primeira.
- As letras minúsculas são então classificadas.
Por ordem decrescente, as etapas listadas anteriormente são processadas no sentido inverso.
Por exemplo, o exemplo a seguir tem uma mistura de texto todo em minúsculas, todo em maiúsculas e com capitalização própria, a serem classificados em ordem crescente.
let
Source = { "Alpha", "Beta", "Zulu", "ALPHA", "gamma", "alpha",
"beta", "Gamma", "Sierra", "zulu", "GAMMA", "ZULU" },
SortedList = List.Sort(Source, Order.Ascending)
in
SortedList
Este código produz a seguinte saída:
Embora não seja comum, você pode ter uma mistura de letras maiúsculas e minúsculas no texto para classificar. A ordem de classificação crescente neste caso é:
- Qualquer texto na coluna da lista ou tabela que comece com uma letra maiúscula é o primeiro.
- Se houver texto correspondente, o texto com o número máximo de letras maiúsculas à esquerda é processado a seguir.
- As letras minúsculas são então ordenadas, com o maior número de letras maiúsculas deslocadas para a direita primeiro.
Em qualquer caso, pode ser mais conveniente converter o texto em um caso consistente antes de classificar.
Normalização do Power BI Desktop
O Power Query M é sensível a maiúsculas e minúsculas e distingue entre diferentes capitalizações do mesmo texto. Por exemplo, "Foo", "foo" e "FOO" são tratados como diferentes. No entanto, quando os dados são carregados no Power BI Desktop, os valores de texto são normalizados, o que significa que o Power BI Desktop os trata como o mesmo valor, independentemente de suas maiúsculas. Portanto, se você precisar transformar dados enquanto mantém a diferenciação de maiúsculas e minúsculas em seus dados, deverá manipular a transformação de dados no Power Query antes de carregar os dados no Power BI Desktop.
Por exemplo, a tabela seguinte no Power Query mostra casos diferentes em cada linha da tabela.
Quando esta tabela é carregada no Power BI Desktop, os valores de texto tornam-se normalizados, resultando na tabela seguinte.
A primeira instância de "foo" e a primeira instância de "too" determinam o caso de "foo" e "too" no restante das linhas na tabela do Power BI Desktop. Neste exemplo, todas as instâncias de "foo" são normalizadas para o valor "Foo" e todas as instâncias de "too" são normalizadas para o valor "TOO".