Filtrar colunas de opção do Dataverse com fórmulas do Power Fx

Concluído

Quando você tem uma tabela do Dataverse com coluna de escolha, geralmente deseja filtrar os dados usando uma coluna de opção. Os cenários de filtragem mais comuns são:

  • Filtrar as linhas de tabela para exibição em uma galeria.

  • Ter um menu suspenso ou controle de caixa de combinação com a lista de valores de escolha e deixar o usuário selecionar um ou mais. Em seguida, você pode usar os valores selecionados para filtrar as linhas da tabela mostradas na galeria.

Por exemplo, se tiver um campo de opção Categoria na tabela Contas, você poderá usar a seguinte lógica para filtrar somente os clientes preferenciais:

Filter(
  Accounts,
  Category = 'Category (Accounts)'.'Preferred Customer'
)

Não use somente a cadeia de caracteres 'Cliente Preferencial' (como a imagem abaixo) porque é uma comparação inválida. Ela apresentará o erro 'Tipos incompatíveis para comparação'. Como a 'Categoria' é uma tabela (ou um conjunto de opções), você não pode comparar o valor da tabela com um valor de texto. Portanto, você precisa usar a referência totalmente qualificada: 'Category (Accounts)'.'Preferred Customer' (também exibida como [@Category].'Preferred Customer').

Captura de tela da fórmula inválida do Power Fx: Filter ( Accounts, Category =

Frequentemente, você desejará usar um menu suspenso ou uma caixa de combinação para que os usuários possam determinar os valores filtrados para a galeria. No exemplo a seguir, uma caixa de combinação é usada para permitir a exibição de várias seleções de categorias de contas.

Captura de tela de um formulário de informações de conta parcial, mostrando uma lista suspensa com várias categorias selecionadas: Cliente Padrão e Preferencial.

Primeiro, você adiciona uma caixa de combinação à tela e, em seguida, define a propriedade Items usando a função Choices.

Captura de tela da seguinte expressão como uma fórmula para a propriedade Items: Choices (Accounts.Category).

A função Choices() prepara uma lista de valores para seu usuário selecionar usando os metadados para a coluna de opção Accounts.Category.

Em seguida, você modificará a fórmula Items para que a galeria a inclua usando a propriedade SelectedItems de caixa de combinação.

Filter(Accounts, Category in ComboBoxCategory.SelectedItems)

O uso do operador in permite que a fórmula filtre qualquer uma das categorias selecionadas.

Essa fórmula só mostrará linhas na galeria quando pelo menos uma categoria for selecionada. Se desejar mostrar todas as linhas quando nenhuma categoria estiver selecionada, você poderá adicionar uma verificação isEmpty à fórmula.

Filter(
  Accounts, Category in ComboBoxCategory.SelectedItems
  || IsEmpty(ComboBoxCategory.SelectedItems)
)

Filtrar colunas de opções

A filtragem de linhas da tabela em uma coluna de opções é complicada devido à maneira como os dados são armazenados no Dataverse como uma lista separada por vírgulas. Como resultado, qualquer filtro que você redigir que envolva uma coluna de opções receberá um aviso de delegação, como ilustrado no exemplo a seguir.

Captura de tela da fórmula Filter(Accounts,Text(Dropdown1.Selected.Value in 'Preferred Delivery').

Uma abordagem que você pode executar é criar uma exibição de tabela do Dataverse que filtre os valores das opções e, em seguida, usá-la nos critérios da função Filter(). Essa abordagem ajudará a evitar o desafio de delegação, mas não permitirá que o usuário do aplicativo forneça os valores dos critérios de filtro. A captura de tela a seguir mostra um exemplo de um filtro de exibição do Dataverse para a coluna de opções Entrega Preferencial.

Captura de tela dos critérios de filtro de edição de exibição do Dataverse mostrando a filtragem na coluna de opções Entrega Preferencial.

Você pode usar essa exibição do Dataverse chamada Entrega de Segunda-feira usando a seguinte função de Filter():

Filter(
  Accounts,
  'Accounts (Views)'.'Monday Delivery'
)

Além disso, você ainda pode incluir critérios inseridos pelo usuário para outras colunas além da exibição. Por exemplo, a função Filter() a seguir mostra a adição da coluna de opção Categoria, que é filtrada de acordo com o valor que o usuário selecionou na lista suspensa.

Filter(
  Accounts,
  'Accounts (Views)'.'Monday Delivery',
  Category = Dropdown1.Selected.Value
)

Devido à lista padronizada de valores, as colunas de opção e opções são úteis para fornecer maneiras consistentes de filtrar as linhas da tabela.