Compartir por


Operadores e identificadores

Nota

Microsoft Power Fx é o novo nome da linguaxe de fórmulas para aplicacións de lenzo. Estes artigos son un traballo en curso a medida que extraemos o idioma das aplicacións de lenzo, o integramos con outros produtos de Microsoft Power Platform e o poñemos a disposición como código aberto. Comece coa Visión xeral de Microsoft Power Fx para ver unha introdución á lingaxe.

Os operadores de Microsoft Power Fx descríbense a continuación. Algúns destes operadores dependen do idioma do autor. Consulte Aplicacións globais para obter máis información.

Símbolo Tipo Sintaxe Descripción
. Seleccionar de propiedades Control deslizante1.Valor
Color.Red
Extrae unha propiedade dun control de táboa ou enumeración. Para unha compatibilidade retroactiva, pódese usar !
.
dependente da lingua
Separador decimal 1.23 Separador entre partes enteiras e fraccionarias dun número. O carácter depende do idioma.
( ) Parénteses Filtro (T, A < 10)

(1 + 2) * 3
Aplica a orde de precedencia e agrupa as subexpresións nunha expresión máis grande
+ Operadores aritméticos 1 + 2 Adición
-   2 - 1 Subtracción e signo
*   2*3 Multiplicación
/   2/3 División (ver tamén a función Mod)
^   2 ^ 3 Potenciación, equivalente á función Power
%   20 % Porcentaxe (equivalente a "* 1/100")
= Operadores de comparación Prezo = 100 Igual que
>   Prezo > 100 Superior a
>=   Prezo >= 100 Maior ou igual que
<   Prezo < 100 Inferior a
<=   Prezo <= 100 Menor ou igual que
<>   Prezo <> 100 Non igual que
& Operador de concatenación de cadeas "ola" & " " & "mundo" Fai que varias cadeas aparezan de forma continua
&& ou E Operadores lóxicos Prezo < 100 && Control deslizante1.Valor = 20
ou Prezo < 100 And Slider1.Value = 20
Conxunción lóxica, equivalente á función And
|| ou Ou   Prezo < 100 || Slider1.Value = 20 ou Prezo < 100 ou Slider1.Value = 20 Disxunción lóxica, equivalente á función Or
! ou Not   !(Prezo < 100) ou Non (Prezo < 100) Negación lóxica equivalente á función Not
exacto Operadores de adhesión Galería1.Seleccionouse exactamente en Elementos gardados Pertencente a unha colección ou unha táboa
exacto   "Windows" exactamente en "Para mostrar as fiestras no sistema operativo Windows..." Proba de subcadea (distingue maiúsculas de minúsculas)
en   Galería1.Seleccionado en Elementos gardados Pertencente a unha colección ou unha táboa
en   "O" en "O teclado e o monitor..." Proba de subcadea (non distingue maiúsculas de minúsculas)
@ Operador de desambiguación A miña táboa[@fieldname] Desambiguación de campos
@   [@MyVariable] Desambiguación global
,
[dependente do idioma]
Separador de lista Se (X < 10, "Baixo", "Bo")
{ X: 12, Y: 32 }
[1, 2, 3]
Separa:
  • argumentos nas chamadas de función
  • campos nun rexistro
  • rexistros nunha táboa
Este carácter depende do idioma.
;
[dependente do idioma]
Encadeamento de fórmulas Recoller (T, A); Navegar (S1, "") Invocacións separadas de funcións nas propiedades de comportamento. O operador de encadeamento depende do idioma.
Como Como operador Todos os clientes como cliente Anula ThisItem e ThisRecord en galerías e funcións co ámbito do rexistro. Como é útil para proporcionar un nome mellor e específico e é especialmente importante en escenarios aniñados.
Eu mesmo Autooperador Auto.Encher Acceso ás propiedades do control actual
Pai Operador principal Pai.Encher Acceso ás propiedades dun contedor de controis
Este elemento Operador ThisItem Este elemento.Nome Acceso aos campos dun control de formulario ou galería
Este Rexistro Operador ThisItem ThisRecord.FirstName Acceso ao rexistro completo e campos individuais do rexistro en ForAll, Sum, With e outras funcións do ámbito do rexistro. Pódese anular co operador As.

Operadores in e exactin

Use os operadores in e exactin para atopar unha cadea nunha orixe de datos, como unha colección ou unha táboa importada. O operador in identifica as coincidencias independentemente do caso e o operador exactin identifica as coincidencias só se usan as mesmas maiúsculas. Este é un exemplo:

  1. Cree ou importe unha colección nomeada Inventario e móstrea nunha galería, como se describe no primeiro procedemento en Mostrar imaxes e texto nunha galería.

  2. Axuste a propiedade Elementos da galería nesta fórmula:
    Filtro (Inventario, "E" en ProductName)

    A galería mostra todos os produtos, excepto Callisto, porque o nome dese produto é o único que non contén a letra que especificou.

  3. Modifique a propiedade Elementos da galería nesta fórmula:
    Filtro(Inventario, "E" exactamente en ProductName)

    A galería só mostra Europa porque só o seu nome contén a letra que especificou no caso especificado.

Operadores ThisItem, ThisRecord e As

Algúns controis e funcións aplican fórmulas aos rexistros individuais dunha táboa. Para referirse ao rexistro individual nunha fórmula, use un dos seguintes:

Operador Aplícase a Descripción
Este elemento Galería control
Editar formulario control
Formulario de visualización control
O nome predeterminado do rexistro actual nunha Galería ou control de formulario.
Este Rexistro Para Todos, Filtro, Con, Suma e outros ámbito de rexistro funcións O nome predeterminado para o rexistro actual en ForAll e outras funcións do ámbito do rexistro.
Como nome Galería control
ParaTodos, Filtro, Con, Suma e outras funcións de ámbito de rexistro
Define un nome para o rexistro actual, substituíndo o valor de ThisItem ou ThisRecord predeterminado. Usa As para facilitar as fórmulas para comprender e resolver a ambigüidade ao aniñar.

Operador ThisItem

Por exemplo, no seguinte control de Galería, a propiedade Elementos está definida na orixe de datos de Empregados (como a entidade Empregados incluída coa Mostra de comerciantes de Northwind ):

Employees

Empregados mostrados nunha galería.

O primeiro elemento da galería é un modelo que se replica para cada empregado. Na plantilla, a fórmula da imaxe usa ThisItem para referirse ao elemento actual:

ThisItem.Picture

Fórmula para a imaxe dun empregado.

Do mesmo xeito, a fórmula do nome tamén usa ThisItem:

ThisItem.'First Name' & " " & ThisItem.'Last Name'

Fórmula para o primeiro e apelidos dun empregado.

Operador ThisRecord

ThisRecord utilízase en funcións que teñen un ámbito de rexistro. Por exemplo, podemos usar a función Filter coa propiedade Elementos da nosa galería para que só mostre os nomes que comezan por M:

Filter( Employees, StartsWith( ThisRecord.Employee.'First Name', "M" ) )

Filtrando os empregados en función do nome, usando ThisRecord.

Este Rexistro é opcional e implícito usando os campos directamente, por exemplo, neste caso, poderiamos escribir:

Filter( Employees, StartsWith( 'First Name', "M" ) )

Aínda que sexa opcional, empregar ThisRecord pode facer que as fórmulas sexan máis fáciles de entender e poden ser necesaria en situacións ambiguas onde un nome de campo tamén pode ser un nome de relación. ThisRecord é opcional, mentres que ThisItem sempre é necesario.

Use ThisRecord para facer referencia a todo o rexistro con Patch, Collect e outras funcións do ámbito do rexistro. Por exemplo, a seguinte fórmula establece o estado de todos os empregados inactivos en activos:

With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) },
      ForAll( InactiveEmployees, 
              Patch( Employees, ThisRecord, { Status: 'Status (Employees)'.Active } ) ) )

Operador As

Use o operador As para dar nome a un rexistro nunha función de galería ou do ámbito do rexistro, que anule o valor predeterminado de ThisItem ou ThisRecord. Dar nome ao rexistro pode facer que as súas fórmulas sexan máis fáciles de entender e pode ser necesario en situacións aniñadas para acceder a rexistros noutros ámbitos.

Por exemplo, pode modificar o a propeidade Elementos da nosa galería para usar As para identificar que estamos a traballar cun empregado:

Employees As Employee

Galería de empregados, utilizando o operador As.

As fórmulas para a imaxe e o nome axústanse para usar este nome para o rexistro actual:

Employee.Picture

Imaxe dun empregado usando o nome do empregado definido co operador As.

Employee.'First Name' & " " & Employee.'Last Name'

Primeiro e apelidos dun empregado que usa o nome do empregado definido co operador As.

As tamén se pode usar con funcións de ámbito de rexistro para substituír o nome predeterminado ThisRecord. Podemos aplicar isto ao noso exemplo anterior para aclarar o rexistro co que estamos a traballar:

With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) },
      ForAll( InactiveEmployees As Employee, 
              Patch( Employees, Employee, { Status: 'Status (Employees)'.Active } ) ) )

Ao aniñar galerías e funcións do ámbito do rexistro, ThisItem e ThisRecord refírense sempre ao ámbito máis interno, deixando os rexistros en ámbitos externos non dispoñibles. Use As para facer que todos os ámbitos do rexistro estean dispoñibles dándolle a cada un un nome único.

Por exemplo, esta fórmula produce un padrón de taboleiro de xadrez como unha cadea de texto ao aniñar dúas funcións ForAll:

Concat( 
    ForAll( Sequence(8) As Rank,
        Concat( 
            ForAll( Sequence(8) As File, 
                    If( Mod(Rank.Value + File.Value, 2) = 1, " X ", " . " ) 
            ),
            Value 
        ) & Char(10) 
    ), 
    Value 
)

Ao configurar a propiedade Texto dun control de Etiqueta nesta fórmula móstrase:

O texto do taboleiro de xadrez móstrase nun control de etiqueta.

Descifremos o que está pasando aquí:

  • Comezamos por repetir unha táboa sen nome de 8 rexistros numerados a partir da función Sequence. Este bucle é para cada liña do taboleiro, ao que se denomina comunmente Rango e así lle damos este nome.
  • Para cada liña, repetimos outra táboa sen nome de 8 columnas e dámoslle o nome común Ficheiro.
  • Se Rango.Valor + Ficheiro.Valor é un número impar, o cadrado obtén un X, se non, un punto. Esta parte da fórmula fai referencia a ambos bucles ForAll, posible mediante o uso do operador As.
  • Concat utilízase dúas veces, primeiro para montar as columnas e despois as filas, cun Char(10) para crear unha nova liña.

Un exemplo similar é posible con controis de Galería aniñados en vez de funcións ForAll. Comecemos coa galería vertical para Rango. Este control da galería terá unha fórmula de Elementos de:

Sequence(8) as Rank

Ilustración da galería exterior que proporciona a iteración Rank.

Dentro desta galería, colocaremos unha galería horizontal para Ficheiro, que se replicará para cada Rango, cunha propiedade de Elementos de:

Sequence(8) as File

Ilustración da galería interior que proporciona a iteración do ficheiro.

E finalmente, dentro desta galería, engadiremos un contorl de Etiqueta que se replicará para cada Ficheiro e cada Rango. Dimensionarémolo para cubrir todo o espazo e empregar a propiedade Encher para proporcionar a cor con esta fórmula:

If( Mod( Rank.Value + File.Value, 2 ) = 1, Green, Beige )

Control de etiquetas dentro das dúas galerías que proporciona as cores alternas para o taboleiro de xadrez.

Operadores autónomos e principais

Hai tres xeitos de referirse a un control e ás súas propiedades dentro dunha fórmula:

Método Descripción
Por nome do control Pódese facer referencia a calquera control polo nome desde calquera parte da aplicación.

Por exemplo, Label1.Fill refírese á propiedade de recheo do control cuxo nome é Etiqueta1.
Auto operador Con frecuencia é conveniente facer referencia a outra propiedade do mesmo control cando se escribe unha fórmula. En lugar de usar unha referencia absoluta por nome, é máis sinxelo e portátil usar unha referencia relativa a unmesmo. O operador Auto ofrece acceso sinxelo ao control actual.

Por exemplo, Self.Fill fai referencia á cor de recheo do control actual.
Operador nai Algúns controis acollen outros controis, como os de Pantalla e Galería. O control de aloxamento dos controis interiores chámase principal. Como o operador Automático, o operador Principal ofrece unha referencia relativa doada ao control do contedor.

Por exemplo, Parent.Fill fai referencia á propiedade de recheo do control que é o recipiente para o control actual.

Self e Pai son operadores e non propiedades dos propios controis. Non se admite facer referencia a Parent.Parent, Self.Parent ou Parent.Self.

Nomes de identificadores

Os nomes de variables, orixes de datos, columnas e outros obxectos poden conter calquera Unicode.

Empregue comiñas simples ao redor dun nome que conteña un espazo ou outro carácter especial.
Use dúas comiñas simples xuntas para representar unha única cita no nome. Os nomes que non conteñan caracteres especiais non precisan comiñas simples.

Aquí están algúns exemplos de nomes de columnas que pode atopar nunha táboa e como se representan nunha fórmula:

Nome de columna nunha base de datos Referencia de columna nunha fórmula
SimpleName SimpleName
NameWith123Numbers NameWith123Numbers
Nome con espazos 'Name with spaces'
Nome con comiñas "dobres" 'Name with "double" quotes'
Nome con comiñas 'simples' 'Name with ''single'' quotes'
Nome cun signo @ 'Name with an @ at sign'

As comiñas dobres úsanse para designar cadeas de texto.

Nomes para mostrar e nomes lóxicos

Algunhas orixes de datos, como SharePoint e Microsoft Dataverse, teñen dous nomes diferentes para referirse á mesma táboa ou columna de datos:

  • Nome lóxico : un nome que se garante que é único, que non cambia despois de ser creado, que normalmente non permite espazos nin outros caracteres especiais e non está localizado en idiomas diferentes. Como resultado, o nome pode ser críptico. Estes nomes úsanos os programadores profesionais. Por exemplo, cra3a_customfield. Este nome tamén se pode denominar nome do esquema ou simplemente nome.

  • Nome de visualización : un nome de fácil uso e destinado a ser visto polos usuarios finais. Este nome pode non ser único, pode cambiar co paso do tempo, pode conter espazos e calquera carácter Unicode e pode localizarse en diferentes idiomas. En correspondencia co exemplo anterior, o nome para mostrar pode ser un Campo personalizado con espazo entre as palabras.

Dado que os nomes para mostrar son máis fáciles de entender, Power Fx suxeriraos como opcións e non suxerirá nomes lóxicos. Aínda que os nomes lóxicos non se suxiren, poden usarse se se escriben indirectamente.

Por exemplo, imaxine que engadiu un Campo personalizado a unha entidade en Dataverse. O sistema asignaralle un nome lóxico que só pode modificar ao crear o campo. O resultado sería semellante ao seguinte:

Entidade de contas con campo personalizado engadido, que mostra un nome para mostrar

Ao crear unha referencia a un campo de Contas, farase unha suxestión para usar "Campo personalizado", xa que este é o nome para mostrar. Débense empregar as comiñas simples porque este nome ten un espazo:

Barra de fórmulas de Studio que amosa suxestións para os nomes de campo das contas co nome para mostrar

Despois de seleccionar a suxestión, "Campo personalizado" móstrase na barra de fórmulas e os datos recupéranse:

Barra de fórmulas de Studio que mostra o uso do nome para mostrar

Aínda que non se suxire, tamén poderiamos usar o nome lóxico para este campo. Isto fará que se recuperen os mesmos datos. Non se requiren comiñas simples, xa que este nome non contén espazos nin caracteres especiais:

Barra de fórmulas de Studio que mostra o uso do nome lóxico cr5e3_customfield para o campo.

En segundo plano, mantense unha asignación entre os nomes para mostrar que aparecen nas fórmulas e os nomes lóxicos subxacentes. Dado que os nomes lóxicos deben usarse para interactuar coa orixe de datos, esta asignación úsase para converter automaticamente do nome para mostrar actual ao nome lóxico e iso é o que se ve no tráfico da rede. Esta asignación tamén se usa para volver converter en nomes lóxicos para cambiar a novos nomes para mostrar, por exemplo, se un nome para mostrar cambia ou un fabricante nun idioma diferente edita a aplicación.

Nota

Os nomes lóxicos non se traducen ao mover unha aplicación entre ambientes. No caso dos nomes de campos e entidades do sistema de Dataverse, isto non debería ser un problema, xa que os nomes lóxicos son coherentes nos ambientes. No entanto, os campos personalizados, como cra3a_customfield neste exemplo anterior, poden ter un prefixo de ambiente diferente (cra3a neste caso). Os nomes para mostrar teñen preferencia, xa que poden coincidir cos nomes para mostrar do novo ambiente.

Desambiguación de nomes

Dado que os nomes para mostrar non son únicos, o mesmo nome para mostrar pode aparecer máis dunha vez na mesma entidade. Cando isto ocorre, o nome lóxico engadirase ao final do nome para mostrar entre parénteses para un ou máis dos nomes en conflito. Baseándose no exemplo anterior, se houbese un segundo campo co mesmo nome para mostrar de Campo personalizado cun nome lóxico de cra3a_customfieldalt, mostraríanse as suxestións:

Barra de fórmulas de Studio que mostra o uso do nome lóxico cr5e3_customfieldalt para desambiguar as dúas versións de

As cadeas de desambiguación de nomes engádense noutras situacións nas que se producen conflitos de nomes, como os nomes de entidades, conxuntos de opcións e outros elementos de Dataverse.

Operador de desambiguación

Algunhas funcións crean ámbitos de rexistro para acceder aos campos da táboa ao procesar cada rexistro, como Filter, AddColumns e Sum. Os nomes de campos engadidos co ámbito de rexistro anulan os mesmos nomes doutros lugares da aplicación. Cando isto sucede, aínda pode acceder a valores desde fóra do ámbito de rexistro co operador de desambiguación @:

  • Para acceder a valores desde ámbitos de rexistro aniñados, use o operador @ co nome da táboa que se opera ao usar este padrón:
    Táboa[@Nome de campo]
  • Para acceder a valores globais, como orixes de datos, coleccións e variables de contexto, use o padrón [@ObjectName] (sen designación de táboa).

Para máis información e exemplos, consulte ámbitos de rexistro.