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: 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:
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.
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.
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
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
Do mesmo xeito, a fórmula do nome tamén usa ThisItem:
ThisItem.'First Name' & " " & ThisItem.'Last Name'
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" ) )
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
As fórmulas para a imaxe e o nome axústanse para usar este nome para o rexistro actual:
Employee.Picture
Employee.'First Name' & " " & Employee.'Last Name'
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:
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
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
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 )
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:
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:
Despois de seleccionar a suxestión, "Campo personalizado" móstrase na barra de fórmulas e os datos recupéranse:
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:
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:
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.