Обучение
Модул
Author a basic formula that uses tables and records in a Power Apps canvas app - Training
Learn how to author a basic formula that uses tables and records in a Power Apps canvas app.
Този браузър вече не се поддържа.
Надстройте до Microsoft Edge, за да се възползвате от най-новите функции, актуализации на защитата и техническа поддръжка.
Бележка
Microsoft Power Fx е новото име за езика на формули за приложения за платно. Тези статии са в процес на разработка, тъй като извличаме езика от приложенията на платното и го интегрираме с други продукти на Microsoft Power Platform и го направете достъпен като отворен код. Започнете с общ преглед на Microsoft Power Fx за въведение в езика.
В Microsoft Power Fx, можете да напишете формула, която осъществява достъп до информация в Microsoft Excel, SharePoint, SQL Server и няколко други източника, които съхраняват данни в записи и таблици. За да работите най-ефективно с този вид данни, прегледайте концепциите, които са в основата на тези структури.
Можете да изградите различни формули, които приемат името на таблица като аргумент, точно както формулата в Excel приема една или повече препратки към клетки като аргументи. Някои формули в Power Fx връщат таблица, която отразява другите аргументи, които сте посочили. Например, можете да създадете формула:
Всеки запис съдържа поне една категория информация за човек, място или нещо. Примерът по-горе показва запис за всеки продукт (Шоколад, Хляб и вода) и колона за всяка категория информация (Цена, Количество на ръка и Количество при поръчка).
Във формула можете да се позовете на запис сам, извън контекста на таблицата, като използвате къдрави скоби. Например този запис { Name: "Strawberries", Price: 7.99 } не е свързан с таблица. Обърнете внимание, че имена на полета, като например име и Цена в този пример не са затворени в двойни кавички.
Полето е индивидуална информация в запис. Можете да визуализирате този вид поле като стойност в колона за определен запис.
Точно както при контрола, вие се отнасяте към поле на запис, като използвате .оператор за записа. Например, First(Products).Name връща полето име за първия запис в таблицата Продукти.
Полето може да съдържа друг запис или таблица, както примерът за функцията GroupBy показва. Можете да вложите колкото се може повече нива на записи и таблици.
Колона се отнася до същото поле за един или повече записи в таблица. В горния пример всеки продукт има ценово поле и тази цена е в една и съща колона за всички продукти. Горната таблица има четири колони, показани хоризонтално в горната част:
Името на колоната отразява полетата в тази колона.
Всички стойности в графа са от един и същ тип данни. В горния пример, колоната "Количество на ръка" винаги съдържа число и не може да съдържа низ, например "12 единици", за един запис. Стойността на всяко поле също може да бъде празно.
Може да сте посочили колоните като „полета“ в други инструменти.
Таблица съдържа един или повече записи, всеки с множество полета, които имат последователни имена в записите.
Всяка таблица, която се съхранява в източник на данни или колекция, има име, което използвате, за да се отнасяте към таблицата и да я предавате на функции, които приемат таблици като аргументи. Таблиците също могат да бъдат резултат от функция или формула.
Както в следващия пример, можете да изразите таблица във формула, като използвате функцията Таблица с набор от записи, които изразявате в къдрави скоби:
Table( { Value: "Strawberry" }, { Value: "Vanilla" } )
Можете също да определите таблица с една колона с квадратни скоби. Еквивалентен начин за писане на горното:
[ "Strawberry", "Vanilla" ]
В Excel и Power Fx използвате формули за манипулиране на числа и низове на текст по подобни начини:
И в двата случая изчислената стойност се променя автоматично, ако промените стойностите на аргументите (например числото в клетката A1 или стойността на Slider1).
По подобен начин можете да използвате формули за достъп и манипулиране на данни в таблици и записи. Можете да използвате имена на таблици като аргументи в някои формули, като например Min(Catalog, Price), за да покажете най-ниската стойност в колоната Цена на таблицата каталог. Други формули предоставят цели таблици като стойности за връщане, като например RenameColumns(Catalog, "Price", "Cost"), който връща всички записи от таблицата каталог, но променя името на колоната Цена на цена.
Точно както при числата, формулите, включващи таблици и записи, автоматично се преизчисляват като основната таблица или промените в записа. Ако цената на продукт в таблицата каталог е понижена под предишния минимум, връщащата стойност на формуляра Min автоматично ще се промени, за да съответства на нея.
Помислете за функцията По-ниско. Ако променливата добре дошли съдържа текстовия низ "Здравей, свят", формулата Lower( welcome ) връща "Здравей, свят". Тази функция по никакъв начин не променя стойността в тази променлива. Lower е чиста функция, тъй като обработва само входни данни и произвежда изход. Това е всичко; няма странични ефекти. Всички функции в Excel и повечето функции в Power Fx са чисти функции, които позволяват преизчисляването на работната книга или приложението автоматично.
Power Fx предлага набор от функции, които работят по таблиците по същия начин. Тези функции приемат таблици като въвеждане и филтриране, сортиране, преобразуване, намаляване и обобщаване на цели таблици с данни. Всъщност, По-ниско и много други функции, които обикновено приемат една стойност, също могат да приемат таблица с една колона като вход.
Много функции вземат таблица с една колона като свой вход. Ако цяла таблица има само една колона, можете да я зададете по име. Ако таблицата има няколко колони, можете да посочите една от тези колони, като използвате синтаксис Table.Column. Например, Products.Name връща таблицата с една колона само стойности име от таблицата Продукти.
Можете напълно да промените таблицата, колкото искате, като използвате функцията AddColumns, RenameColumns, ShowColumns или DropColumns. Отново тези функции променят само своя изход, но не и техния източник.
Други функции са специално проектирани да променят данните и да имат странични ефекти. Тъй като тези функции не са чисти, трябва да ги изградите внимателно и те не могат да участват в автоматично преизчисляване на стойности в приложението. Можете да използвате тези функции само вътре формули на поведение.
Някои функции работят, като оценяват формула във всички записи на таблица поотделно. Резултатът на формулата се използва по различни начини:
Вътре в тези формули можете да посочите полетата на записа, който се обработва. Всяка от тези функции създава "обхват на записа", в който се оценява формулата, където полетата на записа са налични като идентификатори от най-високо ниво. Може да посочите и свойства на контролата и други стойности от цялото приложение.
Например, вземете таблица на Продукти поставени в глобална променлива:
Set( Products,
Table(
{ Product: "Widget", 'Quantity Requested': 6, 'Quantity Available': 3 },
{ Product: "Gadget", 'Quantity Requested': 10, 'Quantity Available': 20 },
{ Product: "Gizmo", 'Quantity Requested': 4, 'Quantity Available': 11 },
{ Product: "Apparatus", 'Quantity Requested': 7, 'Quantity Available': 6 }
)
)
За да определите дали някой от тези продукти е поискал повече от наличния:
Filter( Products, 'Quantity Requested' > 'Quantity Available' )
Първият аргумент за филтър е таблицата със записи, върху която да се работи, а вторият аргумент е формула. Филтърът създава обхват на запис за оценка на тази формула, в който полетата на всеки запис са налични, в този случай Продукт, Заявено количество и Налично количество. Резултатът от сравнението определя дали всеки запис трябва да бъде включен в резултата от функцията:
Като добавим към този пример, можем да изчислим колко от всеки продукт да поръчаме:
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
)
Тук добавяме изчислена колона към резултата. AddColumns има свой собствен обхват на записа, който използва, за да изчисли разликата между това, което е заявено, и това, което е налично.
И накрая, можем да намалим таблицата с резултати само до колоните, които искаме:
ShowColumns(
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
),
"Product",
"Quantity To Order"
)
Обърнете внимание, че по-горе използвахме двойни кавички („) на някои места и единични кавички („) на други места. Единични кавички се изискват при препращане към стойността на обект, например поле или таблица, в които името на обекта съдържа интервал. Двойните кавички се използват, когато ние не препращаме стойността на даден обект, а вместо това говорим за него, особено в ситуации, в които обектът все още не съществува, както в случая AddColumns.
Имената на полета, добавени с обхвата на записа, отменят същите имена от други места в приложението. Когато това се случи, все още можете да получите достъп до стойности извън обхвата на записа с оператор @ пояснение:
Ако таблицата, върху която се работи, е израз, като напр. Filter(Table, ... ), тогава операторът за разясняване не може да се използва. Само най-вътрешният обхват на записа може да има достъп до полета от този израз на таблица, като не използва оператора за разграничение.
Например, представете си, че имате колекция х:
Можете да създадете тази колекция с ClearCollect( X, [1, 2] ).
И още една колекция Y:
Можете да създадете тази колекция с ClearCollect( Y, ["A", "B"] ).
Освен това дефинирайте променлива на контекста с име стойност с тази формула: UpdateContext( {Value: "!"} )
Нека да сложим всичко заедно. В този контекст следната формула:
Ungroup(
ForAll( X,
ForAll( Y,
Y[@Value] & Text( X[@Value] ) & [@Value]
)
),
"Value"
)
създава тази таблица:
Какво става тук? Най-външната функция ForAll определя обхвата на записа за х, което позволява достъп до полето стойност на всеки запис, докато се обработва. Достъп до него можете да използвате просто с думата стойност или чрез използване X[@Value].
Най-вътрешната функция ForAll определя друг обхват на записа за Y. Тъй като тази таблица също има определено поле стойност, като се използва стойност тук се отнася до полето в Y е запис и вече не е този от х. Тук, за достъп д полето на х Стойност, трябва да използваме по-дългата версия с оператора за разграничаване.
От Y е най-вътрешният обхват на записа, достъпът до полетата на тази таблица не изисква разясняване, което ни позволява да използваме тази формула със същия резултат:
Ungroup(
ForAll( X,
ForAll( Y,
Value & Text( X[@Value] ) & [@Value]
)
),
"Value"
)
Всички обхвати на записите ForAll отменя глобалния обхват. Контекстната променлива стойност, която дефинирахме, не е достъпна по име без оператора за разграничаване. За достъп до тази стойност използвайте [@Value].
Разгрупирането изравнява резултата, тъй като вложените функции ForAll водят до вложена таблица с резултати.
За да работите върху една колона от таблица, използвайте функцията ShowColumns като в този пример:
ShowColumns( Products, "Product" )
Тази формула създава тази таблица с една колона:
За по-кратка алтернатива посочете Table.Column, която извлича таблицата с една колона само на Колона от Таблица. Например, тази формула дава абсолютно същия резултат като използването на ShowColumns.
Products.Product
Вие изразявате записи, като използвате къдрави скоби, които съдържат именувани стойности на полето. Например, можете да изразите първия запис в таблицата в началото на тази тема, като използвате тази формула:
{ Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 }
Можете също да вградите формули в други формули, както показва този пример:
{ Name: First(Products).Name, Price: First(Products).Price * 1.095 }
Можете да вложите записи чрез влагане на къдрави скоби, както показва този пример:
{ 'Quantity': { 'OnHand': ThisItem.QuantOnHand, 'OnOrder': ThisItem.QuantOnOrder } }
Затворете името на всяка колона, която съдържа специален символ, като интервал или двоеточие, в единични кавички. За да използвате един цитат в името на колоната, го удвойте.
Обърнете внимание, че стойността в колоната Цена не включва валутен знак, например знак за долар. Това форматиране ще бъде приложено, когато се покаже стойността.
Можете да създадете таблица с помощта на функцията Таблица и набор от записи. Можете да изразите таблицата в началото на тази тема, като използвате тази формула:
Table(
{ Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 },
{ Name: "Bread", Price: 4.95, 'Quantity on Hand': 34, 'Quantity on Order': 0 },
{ Name: "Water", Price: 4.95, 'Quantity on Hand': 10, 'Quantity on Order': 0 }
)
Можете също да вложите таблици:
Table(
{ Name: "Chocolate",
'Quantity History': Table( { Quarter: "Q1", OnHand: 10, OnOrder: 10 },
{ Quarter: "Q2", OnHand: 18, OnOrder: 0 } )
}
)
Можете да създавате таблици с една колона, като посочвате стойности в квадратни скоби. Получената таблица има една колона с име стойност.
Например, [ 1, 2, 3, 4 ]
е еквивалентен на Table( { Value: 1 }, { Value: 2 }, { Value: 3 }, { Value: 4 } )
и връща тази таблица:
Обучение
Модул
Author a basic formula that uses tables and records in a Power Apps canvas app - Training
Learn how to author a basic formula that uses tables and records in a Power Apps canvas app.