Разбиране на таблиците и записите в приложения за платно

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

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

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

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

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

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

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

Записи

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

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

Полета

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

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

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

Колони

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

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

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

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

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

Бележка

За източници на данни като плочки на SharePoint, Excel или Power BI, които съдържат имена на колони с интервали, Power Apps ще замени интервалите с "_x0020_". Например „Име на колона“ в плочката на SharePoint, Excel или Power BI ще се показва като „Column_x0020_Name“ в Power Apps, когато се показва в оформлението на данните или се използва във формула.

Table

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

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

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

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

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

[ "Strawberry", "Vanilla" ]

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

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

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

И в двата случая изчислената стойност се променя автоматично, ако промените стойностите на аргументите (например числото в клетката A1 или стойността на Slider1).

По подобен начин можете да използвате формули за достъп и манипулиране на данни в таблици и записи. Можете да използвате имена на таблици като аргументи в някои формули, като например Min(Catalog, Price), за да покажете най-ниската стойност в колоната Цена на таблицата каталог. Други формули предоставят цели таблици като стойности за връщане, като например RenameColumns(Catalog, "Price", "Cost"), който връща всички записи от таблицата каталог, но променя името на колоната Цена на цена.

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

Нека да разгледаме няколко прости примера.

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

    По подразбиране на екрана се показва текст на заместител от таблица с име CustomGallerySample. Свойството Елементи на контролата галерия на екрана автоматично се задава на тази таблица.

    Галерия.

    Бележка

    Някои контроли са пренаредени и разширени за илюстрация.

  2. Вместо да задавате свойство Елементи към името на таблица, задайте го на формула, която включва името на таблицата като аргумент, както в този пример:

    Sort(CustomGallerySample, SampleHeading, SortOrder.Descending)

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

    Сортиране за галерия.

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

    FirstN(Sort(CustomGallerySample, SampleHeading, SortOrder.Descending), 2)

    В тази формула използвате функцията FirstN за показване на определен брой записи в таблица. Използвате функцията Сортиране като първи аргумент за FirstN и число (в този случай, 2) като втори аргумент, който определя колко записа да се покаже.

    Цялата формула връща таблица, която съдържа първите два записа на таблица CustomGallerySample, сортирана по колона SampleHeading в низходящ ред.

    FirstN за галерия.

Функции на таблицата и свойства за управление

Помислете за функцията По-ниско. Ако променливата добре дошли съдържа текстовия низ "Здравей, свят", формулата Lower( welcome ) връща "Здравей, свят". Тази функция по никакъв начин не променя стойността в тази променлива. По-ниско е чиста функция, тъй като обработва само вход и произвежда продукция. Това е всичко; няма странични ефекти. Всички функции в Excel и повечето функции в Power Apps са чисти функции, които позволяват преизчисляването на работната книга или приложението автоматично.

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

  • Сортиране, филтър - Сортира и филтрира записи.
  • FirstN, LastN - Връща първите N или последните N записи на таблицата.
  • Abs, Sqrt, Round, RoundUp, RoundDown - Аритметични операции върху всеки запис на таблица с една колона, което води до таблица с резултати в една колона.
  • Left, Mid, Right, Replace, Substitute, Trim, Lower, Upper, Proper - Низови манипулации върху всеки запис на таблица с една колона, което води до една колонна таблица от низове.
  • Len - За колона от низове връща таблица с една колона, която съдържа дължината на всеки низ.
  • Concatenate - Свързва множество колони от низове, което води до една колонна таблица от низове.
  • AddColumns, DropColumns, RenameColumns, ShowColumns - Манипулация на колоната на таблицата, което води до нова таблица с различни колони.
  • Distinct - Премахва дублиращите записи.
  • Shuffle - Разбърква записи в произволен ред.
  • HashTags - Търси хештегове в низ.
  • Errors - Предоставя информация за грешки, когато работите с източник на данни.

Много от тези функции приемат таблица с една колона като свой вход. Ако цяла таблица има само една колона, можете да я зададете по име. Ако таблицата има няколко колони, можете да посочите една от тези колони, като използвате синтаксис Table.Column. Например, Products.Name връща таблицата с една колона само стойности име от таблицата Продукти.

Можете напълно да промените таблицата, колкото искате, като използвате функцията AddColumns, RenameColumns, ShowColumns или DropColumns. Отново тези функции променят само своя изход, но не и техния източник.

Свойствата на контролите също могат да бъдат таблици:

  • Елементи - Отнася се за галерии, списъци и комбинирани кутии. Това свойство определя таблицата, която показва галерията или списъка.
  • SelectedItems - Отнася се за списъчни полета и комбинирани полета. Това свойство определя таблицата с елементи, които потребителят е избрал, ако SelectMultiple е активиран.

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

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

  • Collect, Clear, ClearCollect - Създава колекции, изчиства ги и добавя данни към тях.
  • Patch - Променя едно или повече полета в запис.
  • Update, UpdateIf - Актуализира записи, които отговарят на един или повече критерии, които сте посочили.
  • Remove, RemoveIf - Изтрива записи, които отговарят на един или повече критерии, които сте посочили.

Запишете формули

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

  1. Добавете бутон и задайте свойството OnSelect на тази формула:
    Collect( SelectedRecord, Gallery1.Selected )

  2. Докато държите клавиша Alt, изберете бутона.

  3. В менюто Файл изберете Колекции.

    Колекция SelectedRecord.

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

Бележка

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

Сега, когато имате избрания запис, можете да извлечете отделни полета от него с . оператор.

  1. Добавете контролата етикет и след това го преместете под галерията и бутона.

  2. Задайте свойството Текст на етикета на този израз:
    "Selected: " & Gallery1.Selected.SampleHeading

    Свойство на текста с актуализиран етикет.

Вие сте взели свойството Избрани, което е запис и извлечено свойство SampleHeading от него.

Можете също да използвате запис като контейнер с общо предназначение за свързани именани стойности.

В тези случаи записът никога не е бил част от таблица.

Функции за запис и свойства за управление

Функции, които връщат записи:

  • FirstN, LastN - Връща първия или последния запис на таблицата.
  • Lookup - Връща първия запис от таблица, която отговаря на един или повече критерии.
  • Patch - Актуализира източник на данни или обединява записи.
  • Defaults - Връща стойностите по подразбиране за източник на данни.

Свойства, които връщат записи:

  • Selected - Отнася се за галерии и списъци. Връща текущо избрания запис.
  • Updates - Прилага се за галерии. Събира всички промени, които потребителят прави във форма за въвеждане на данни.
  • Update - Прилага се за контроли за въвеждане като контроли за въвеждане на текст и плъзгачи. Задава индивидуални свойства на галерията, която да се събере.

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

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

  • AddColumns - Формулата осигурява стойността на добавеното поле.
  • Average, Max, Min, Sum, StdevP, VarP - Формулата осигурява стойността за агрегиране.
  • Filter, Lookup - Формулата определя дали записът трябва да бъде включен в изхода.
  • Concat - Формулата определя низовете, които да се обединят заедно.
  • Distinct - Формулата връща стойност, използвана за идентифициране на дублиращи се записи.
  • ForAll - Формулата може да върне всяка стойност, потенциално със странични ефекти.
  • Sort - Формулата предоставя стойността за сортиране на записите.
  • With - Формулата може да върне всяка стойност, потенциално със странични ефекти.

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

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

Пример за продукти.

За да създадете тази примерна таблица в приложението си, поставете бутон, задайте свойството OnSelect на тази формула и след това изберете бутона (щракнете върху него, докато задържите клавиша Alt в Power Apps Studio):

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' )

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

Пояснения

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

  • За достъп до стойности от вложени области на запис, използвайте @ оператор с името на таблицата, която се използва при използване на този шаблон:
    Table[@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 определя обхвата на записа за х, което позволява достъп до полето стойност на всеки запис, докато се обработва. Тя може да бъде достъпна чрез просто използване на думата Value или чрез използване на 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 } ) и връща тази таблица:

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

Бележка

Можете ли да ни споделите повече за езиковите си предпочитания за документацията? Попълнете кратко проучване. (имайте предвид, че това проучване е на английски език)

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