Споделяне чрез


Оператори и идентификатори

Бележка

Microsoft Power Fx е новото име за езика на формули за приложения за платно. Тези статии са в процес на разработка, тъй като извличаме езика от приложенията на платното и го интегрираме с други продукти на Microsoft Power Platform и го направете достъпен като отворен код. Започнете с общ преглед на Microsoft Power Fx за въведение в езика.

Операторите в Microsoft Power Fx са описани по-долу. Някои от тези оператори зависят от езика на автора. Вижте Глобални приложения за повече информация.

Символ Тип Синтаксис Описание
. Селектор за свойства Плъзгач1.Стойност
Color.Red
Извлича свойство от контрола на таблица или изброяване. За обратна съвместимост може да се използва !.
.
Езикова зависимост
Десетичен разделител 1.23 Разделител между цели и частични части на число. Знакът зависи от езика.
( ) Скоби Филтър (T, A < 10)

(1 + 2) * 3
Укрепва приоритетния ред и групира под-изразите в по-голям израз
+ Аритметични оператори 1 + 2 Събиране
-   2 - 1 Изваждане и знак
*   2 * 3 Умножение
/   2 / 3 Деление (виж също функция Mod)
^   2 ^ 3 Експоненция, еквивалентна на функцияPower
%   20% Процент (еквивалентен на "* 1/100")
= Оператори за сравнение Цена = 100 Равно на
>   Цена > 100 Е по-голямо от
>=   Цена > = 100 По-голямо или равно на
<   Цена < 100 Е по-малко от
<=   Цена < = 100 По-малко или равно на
<>   Цена <> 100 Не е равно на
& Оператор за свързване на низове "здравей" & " " и "свят" Прави множеството низове да се появяват непрекъснато
&& or и Логически оператори Цена < 100 && Плъзгач1.Стойност = 20
или Цена < 100 и Slider1.Value = 20
Логическо свързване, еквивалентно на функцията And
|| или Или   Цена < 100 || Плъзгач1.Стойност = 20 или Цена < 100 или Плъзгач1.Стойност = 20 Логическо прекъсване на връзката, еквивалентно на функцията Or
! или Не   ! (Цена < 100) или не (Цена < 100) Логическо отрицание, еквивалентно на функцията Not
Точен Оператори на членство Галерия1.Избрани точни запазени елементи Принадлежност към колекция или маса
Точен   "Windows" точно "За показване на прозорци в операционната система Windows..." Тест на подниза (чувствителен към регистър)
в   Галерия1.Избрано в ЗапазениЕлементи Принадлежност към колекция или маса
в   "The" в "Клавиатурата и мониторът..." Тест на подниза (нечувствителен към регистър)
@ Оператор за пояснение MyTable[@fieldname] Разграничаване на поле
@   [@MyVariable] Глобално разграничение
,
[зависимо от езика]
Разделител на списък Ако( x < 10, "Ниско", "Добро")
{ X: 12, Y: 32 }
[ 1, 2, 3 ]
Разделя:
  • аргументи във функционални обаждания
  • полета в запис
  • полета в таблица
Този знак зависи от езика.
;
[зависимо от езика]
Верижно свързване на формули Събиране (T, A); Навигация (S1, "") Отделни извиквания на функции в свойства на поведение. Операторът за верижно свързване зависи от езика.
Като Като оператор AllCustomers като клиент Замества ThisItem и ThisRecord в галериите и функциите за обхват на запис. Тъй като е полезно за предоставяне на по-добро, конкретно име и е особено важно във вложени сценарии.
Самостоятелно Самостоятелен оператор Самозапълване Достъп до свойства на текущото управление
Родител Оператор родител Родител.Попълване Достъп до свойства на контролен контейнер
ТозиАртикул Оператор ThisItem ThisItem.FirstName Достъп до полета на галерия или контрол на формуляри
Този запис Оператор ThisItem ThisRecord.FirstName Достъп до пълния запис и отделните полета на записа в ForAll, Сума, Със и другите функции на обхват на запис. Може да се замени с оператора Като.

в и точно оператори

Използвайте операторите in и exactin за търсене на низ в източник на данни, като колекция или импортирана таблица. Операторът в идентифицира съвпадения независимо от случая и exactin операторът идентифицира съвпадения, само ако са написани с главни букви по същия начин. Ето един пример:

  1. Създайте или импортирайте колекция с име Инвентар, и го покажете в галерия, както първата процедура в Показвайте изображения и текст в галерия описва.

  2. Задайте свойството Елементи на галерията на тази формула:
    Filter(Inventory, "E" в ProductName)

    Галерията показва всички продукти с изключение на Callisto, тъй като името на този продукт е единственото, което не съдържа буквата, която сте посочили.

  3. Променете свойството Елементи на галерията на тази формула:
    Филтър (инвентар, "E" точно в името на продукта)

    Галерията показва само Европа, защото само нейното име съдържа буквата, която сте посочили в случая, който сте посочили.

Оператори ThisItem, ThisRecord и As

Няколко контроли и функции прилагат формули за отделни записи в таблица. За да видите отделния запис във формула, използвайте някой от следните:

Оператор Приложимо за Описание
ТозиАртикул Контрол на галерията
Контрола за редактиране на формуляр
Контрола на формуляра за показване
Името по подразбиране за текущия запис в контрола на галерия или формуляр.
Този запис ForAll, Filter, With, Sum и други функции на обхвата на записа Името по подразбиране за текущия запис във ForAll и други функции за обхват на запис.
Катоиме Контрол на галерията
ForAll, Filter, With, Sum и други функции на обхвата на записа
Определя име за текущия запис, като замества името по подразбиране ThisItem или ThisRecord. Използвайте As, за да улесните разбирането на формулите и да отстраните двусмислеността при влагане.

Оператор ThisItem

Например в следващата контрола Галерия свойството Елементи е зададено на източник на данни Служители (като обекта Служители, включен в примера за Northwind Traders):

Employees

Служители, показани в галерия.

Първият елемент в галерията е шаблон, който се репликира за всеки служител. В шаблона формулата за снимката използва ThisItem за препратка към текущия елемент:

ThisItem.Picture

Формула за снимка на служител.

По същия начин формулата за името също използва ThisItem:

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

Формула за име и фамилно име на служител.

Оператор ThisRecord

ThisRecord се използва във функции, които имат обхват на записа. Например можем да използваме функцията Филтър със свойството Елементи на галерията, за да се показват само собствените имена, които започват с М:

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

Филтриране на служителите въз основа на името, като се използва ThisRecord.

ThisRecord не е задължителен и се подразбира чрез директно използване на полетата, например в този случай можехме да напишем:

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

Въпреки, че е по избор, използването на ThisRecord може да направи формулите по-лесни за разбиране и може да се изисква в двусмислени ситуации, когато име на поле може да бъде и име на релация. ThisRecord не е задължителен, докато ThisItem винаги е задължителен.

Използвайте ThisRecord за препратка към целия запис Patch, Collect и други функции за обхват на записа. Например следващата формула задава състоянието на всички неактивни служители като активно:

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

Като оператор

Използвайте оператора As за наименоване на запис в галерия или функция за обхват на запис, като заместите имената по подразбиране ThisItem или ThisRecord. Наименуването на записа може да направи формулите по-лесни за разбиране и може да е необходимо в ситуации с влагане за достъп до записи в други обхвати.

Например може да промените свойството Елементи на галерията да използва As за определяне, че работим със служител:

Employees As Employee

Галерия от служители, използващи оператора As.

Формулите за снимката и името са коригирани, за да се използва това име за текущия запис:

Employee.Picture

Снимка на служител, използващ името на служителя, зададено с оператора Като.

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

Собствено и фамилно име на служител, използващ името Служител, зададено с оператора As.

Може да се използва и с функции за обхват на запис за замяна на името по подразбиране ThisRecord. Можем да приложим това към предишния ни пример, за да поясним записа, с който работим:

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

Когато влагате галерии и функции за обхват на запис, ThisItem и ThisRecord винаги посочват най-вътрешния обхват, като записите във външните обхвати остават недостъпни. Използвайте As, за да направите всички обхвати на записа достъпни, като им зададете уникално име.

Например тази формула създава модел на шахматна дъска като текстови низ чрез влагане на две функции 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 
)

Задаването на свойството Текст на контролата Етикет към тази формула показва:

Текст на шахматната дъска, показан в контрола на етикета.

Нека да разопаковаме това, което се случва тук:

  • Започваме с итерация на таблица без име с 8 номерирани записа от функцията Sequence. Този цикъл е за всеки ред на таблото, който обикновено се нарича Ранг, затова му даваме това име.
  • За всеки ред итерираме друга таблица без име с 8 колони и въвеждаме общото име Файл.
  • Ако Rank.Value + File.Value е нечетно число, квадратчето получава X, в противен случай – точка. Тази част от формулата посочва и двата цикъла ForAll, които са възможни чрез оператора As.
  • Concat се използва два пъти, първо за сглобяване на колоните, а след това и на редовете, с Char(10), хвърлен за създаване на нов ред.

Подобен пример е възможен с вложени контроли за галерия вместо функции ForAll. Нека започнем с вертикалната галерия за ранга. Тази контрола на галерията ще има формула за елементи:

Sequence(8) as Rank

Илюстрация на външната галерия, която предоставя итерацията на Rank.

В рамките на тази галерия поставяме хоризонтална галерия за файла, който ще се репликира за всеки ранг, със свойство Елементи:

Sequence(8) as File

Илюстрация на вътрешната галерия, която предоставя итерацията на файла.

И накрая, в рамките на тази галерия ще добавим контрола Етикет, която ще се репликира за всеки файл и всеки ранг. Ще го оразмерим, за да запълним цялото пространство и да използваме свойството Запълване, за да предоставим цвета с тази формула:

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

Контрол на етикета в двете галерии, който осигурява редуващите се цветове за шахматната дъска.

Оператори Self и Parent

Има три начина за препращане към контрола и неговите свойства във формула:

Метод Описание
По име на контрола Всеки контрол може да се посочва по име от всяко място в приложението.

Например, Label1.Fill се отнася до свойството за запълване на контролата с името Label1.
Самостоятелен оператор Често е удобно да се посочва друго свойство на същия контрол, когато пишете формула. Вместо да използвате абсолютна препратка по име, е по-лесно и по-преносимо да използвате относителна препратка към self. Операторът Self осигурява лесен достъп до текущото управление.

Например Self.Fill се отнася до цвета на запълване на текущото управление.
Оператор родител Някои контроли съдържат други контроли, като например контролите Екран и галерия. Хостинг контролът на контролите в него се нарича родител. Подобно на Self оператора, операторът Parent осигурява лесна относителна препратка към контрола на контейнера.

Например, Parent.Fill се отнася до свойството за запълване на контрола, което е контейнерът за текущото управление.

Self и Parent са оператори, а не свойства на самите контроли. Отнасящи се до Parent.Parent, Self.Parent или Parent.Self не се поддържа.

Имената на идентификаторите

Имената на променливи, източници на данни, колони и други обекти могат да съдържат всякакъв Unicode.

Използвайте единични кавички около име, което съдържа интервал или друг специален символ.
Използвайте две единични кавички заедно, за да представите един единствен цитат в името. Имената, които не съдържат специални символи, не изискват единични кавички.

Ето някои примерни имена на колони, които може да срещнете в таблица и как са представени във формула:

Име на колоната в база данни Позоваване на колона във формула
SimpleName SimpleName
NameWith123Numbers NameWith123Numbers
Име с интервали 'Name with spaces'
Наименование с "двойни" кавички 'Name with "double" quotes'
Наименование с 'единични' кавички 'Name with ''single'' quotes'
Име със знак @ при знак 'Name with an @ at sign'

Двойните кавички се използват за посочване на текстови низове.

Показване на имена и логически имена

Някои източници на данни като SharePoint и Microsoft Dataverse имат две различни имена, за да се позовават на една и съща таблица или колона от данни:

  • Логическо име - Име, което е гарантирано уникално, не се променя след създаването си, обикновено не позволява интервали или други специални знаци и не е локализирано на различни езици. В резултат името може да е кодирано. Тези имена се използват от професионални разработчици. Например cra3a_customfield. Това име може също да бъде посочено като име на схемата или просто име.

  • Показвано име - Име, което е удобно за потребителя и е предназначено да се вижда от крайните потребители. Това име може да не е уникално, може да се променя с течение на времето, може да съдържа интервали и всеки Unicode символ и може да бъде локализирано на различни езици. Подобно на примера по-горе, показваното име може да бъде персонализирано поле с интервал между думите.

Тъй като показваните имена са по-лесни за разбиране, Power Fx ще ги предложи като избор, а не логични имена. Въпреки че не се предлагат логически имена, те все пак могат да се използват, ако са не са въведени директно.

Например, представете си, че сте добавили Персонализирано поле на обект в Dataverse. Логическото име ще бъде присвоено от системата и можете да го променяте само при създаване на полето. Резултатът ще изглежда подобен на:

Обект на акаунти с добавено персонализирано поле, показващ показвано име на

При създаване на препратка към поле на Акаунти, предложението ще бъде използвано „Персонализирано поле“, тъй като това е името за показване. Трябва да се използват единичните кавички, тъй като в това име има интервал:

Лента с формули в Studio, показваща предложения за имена на полета на акаунти с маркирано показвано име

След като изберете предложението, „Персонализирано поле“ се показва в лентата с формули и данните се извличат:

Студийна лента с формули, показваща използването на показваното име

Въпреки че не се предлага, бихме могли да използваме и логическото име за това поле. Това ще доведе до извличане на същите данни. Не се изискват единични кавички, тъй като това име не съдържа интервали или специални символи:

Студийна лента с формули, показваща използването на cr5e3_customfield на логическото име за полето.

Зад кулисите се поддържа картографиране между показваните имена, видени във формули, и основните логически имена. Тъй като логичните имена трябва да се използват за взаимодействие с източник на данни, това картографиране се използва за автоматично преобразуване от текущото име на изображение в логическото име и това се вижда в мрежовия трафик. Това съпоставяне се използва и за преобразуване обратно в логически имена, за да превключите към нови показвани имена, например, ако показваното име се промени или създател редактира приложението на друг език.

Бележка

Логическите имена не се превеждат при преместване на приложение между среди. За имена на системни единици и полета на Dataverse това не трябва да е проблем, тъй като логическите имена са последователни в средите. Но всякакви персонализирани полета, като например cra3a_customfield в този пример по-горе може да има различен префикс на средата (cra3a в такъв случай). За предпочитане са показваните имена, тъй като те могат да бъдат съпоставени с показваните имена в новата среда.

Пояснения за имената

Тъй като показваните имена не са уникални, едно и също име може да се появи повече от веднъж в едно и също образувание. Когато това се случи, логическото име ще бъде добавено в края на показваното име в скоби за едно от другите конфликтни имена. Въз основа на горния пример, ако имаше второ поле със същото име на Персонализирано поле с логично име на cra3a_customfieldalt, тогава предложенията ще покажат:

Студийна лента с формули, показваща използването на логическото име cr5e3_customfieldalt за премахване на двузначността на двете версии на

Низовете за разграничаване на имена се добавят в други ситуации, в които възникват конфликти с имена, като например имената на субекти, набори от опции и други елементи на Dataverse.

Оператор за разграничаване

Някои функции създават обхват на запис за достъп до полетата на таблицата, докато обработвате всеки запис, като например Филтър, AddColumns и Сума. Имената на полета, добавени с обхвата на записа, отменят същите имена от други места в приложението. Когато това се случи, все още можете да получите достъп до стойности извън обхвата на записа с оператор за пояснение @:

  • За достъп до стойности от вложени области на запис, използвайте @ оператор с името на таблицата, която се използва при използване на този шаблон:
    Таблица[@FieldName]
  • За достъп до глобални стойности, като източници на данни, колекции и променливи на контекста, използвайте шаблона [@ObjectName] (без обозначение на таблицата).

За повече информация и примери вижте обхват на записа.