Прочетете на английски

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


Таблици

Бележка

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

В Microsoft Power Fx, можете да напишете формула, която осъществява достъп до информация в Microsoft Excel, SharePoint, SQL Server и няколко други източника, които съхраняват данни в записи и таблици. За да работите най-ефективно с този вид данни, прегледайте концепциите, които са в основата на тези структури.

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

Можете да изградите различни формули, които приемат името на таблица като аргумент, точно както формулата в Excel приема една или повече препратки към клетки като аргументи. Някои формули в Power Fx връщат таблица, която отразява другите аргументи, които сте посочили. Например, можете да създадете формула:

  • да актуализирате запис в таблица, като посочите тази таблица като един от множество аргументи за функция корекция
  • за добавяне, премахване и преименуване на колони в таблица, като посочите тази таблица като аргумент за функции AddColumns, DropColumns или RenameColumns. Нито една от тези функции не променя оригиналната таблица. Вместо това функцията връща друга таблица въз основа на другите аргументи, които посочвате.

Елементи на маса

Елементи на таблицата.

Записи

Всеки запис съдържа поне една категория информация за човек, място или нещо. Примерът по-горе показва запис за всеки продукт (Шоколад, Хляб и вода) и колона за всяка категория информация (Цена, Количество на ръка и Количество при поръчка).

Във формула можете да се позовете на запис сам, извън контекста на таблицата, като използвате къдрави скоби. Например този запис { Name: "Strawberries", Price: 7.99 } не е свързан с таблица. Обърнете внимание, че имена на полета, като например име и Цена в този пример не са затворени в двойни кавички.

Полета

Полето е индивидуална информация в запис. Можете да визуализирате този вид поле като стойност в колона за определен запис.

Точно както при контрола, вие се отнасяте към поле на запис, като използвате .оператор за записа. Например, First(Products).Name връща полето име за първия запис в таблицата Продукти.

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

Колони

Колона се отнася до същото поле за един или повече записи в таблица. В горния пример всеки продукт има ценово поле и тази цена е в една и съща колона за всички продукти. Горната таблица има четири колони, показани хоризонтално в горната част:

  • Име
  • Цена
  • Количество под ръка
  • Количество по поръчка

Името на колоната отразява полетата в тази колона.

Всички стойности в графа са от един и същ тип данни. В горния пример, колоната "Количество на ръка" винаги съдържа число и не може да съдържа низ, например "12 единици", за един запис. Стойността на всяко поле също може да бъде празно.

Може да сте посочили колоните като „полета“ в други инструменти.

Таблица

Таблица съдържа един или повече записи, всеки с множество полета, които имат последователни имена в записите.

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

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

Table( { Value: "Strawberry" }, { Value: "Vanilla" } )

Можете също да определите таблица с една колона с квадратни скоби. Еквивалентен начин за писане на горното:

[ "Strawberry", "Vanilla" ]

Формули на таблици

В Excel и Power Fx използвате формули за манипулиране на числа и низове на текст по подобни начини:

  • В Excel напишете стойност, като например 42, в клетка A1 и след това въведете формула, като например А1 + 2, в друга клетка, за да покаже стойността на 44.
  • В Power Apps задайте свойството По подразбиране на Slider1 на 42, и задайте свойството Текст на етикет на Slider1.Value + 2, за да покажете стойността на 44.

И в двата случая изчислената стойност се променя автоматично, ако промените стойностите на аргументите (например числото в клетката 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. Отново тези функции променят само своя изход, но не и техния източник.

Формули за поведение

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

Обхват на записа

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

  • AddColumns - Формулата предоставя стойността на добавеното поле.
  • Средно, Макс, Мин, Сума, StdevP, VarP - Формулата предоставя стойността за агрегиране.
  • Филтър,Справка - Формулата определя дали записът трябва да бъде включен в изхода.
  • Concat - Формулата определя низовете, които трябва да се съединят заедно.
  • Distinct - Формулата връща стойност, използвана за идентифициране на дублиращи се записи.
  • ForAll - Formula може да върне всяка стойност, потенциално със странични ефекти.
  • Сортиране - Формула предоставя стойността за сортиране на записите.
  • С - Формулата може да върне всякаква стойност, потенциално със странични ефекти.

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

Например, вземете таблица на Продукти поставени в глобална променлива:

Поискани маси.

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.

Пояснения

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

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

Ако таблицата, върху която се работи, е израз, като напр. Filter(Table, ... ), тогава операторът за разясняване не може да се използва. Само най-вътрешният обхват на записа може да има достъп до полета от този израз на таблица, като не използва оператора за разграничение.

Например, представете си, че имате колекция х:

Стойност X.

Можете да създадете тази колекция с ClearCollect( X, [1, 2] ).

И още една колекция Y:

Y стойност.

Можете да създадете тази колекция с ClearCollect( Y, ["A", "B"] ).

Освен това дефинирайте променлива на контекста с име стойност с тази формула: UpdateContext( {Value: "!"} )

Нека да сложим всичко заедно. В този контекст следната формула:

Ungroup(
    ForAll( X,
        ForAll( Y,
            Y[@Value] & Text( X[@Value] ) & [@Value]
        )
    ),
    "Value"
)

създава тази таблица:

Стойност XY.

Какво става тук? Най-външната функция 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 } ) и връща тази таблица:

Вградена таблица.