Обучение
Модуль
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, чтобы воспользоваться новейшими функциями, обновлениями для системы безопасности и технической поддержкой.
Power Apps позволяет вам создать приложение на основе холста, обращающееся к сведениям в Microsoft Excel, SharePoint, SQL Server и ряде других источников, хранящих данные в виде записей и таблиц. Чтобы работать с данными такого типа максимально эффективно, ознакомьтесь с основными понятиями, которые лежат в основе этих структур.
Для создания и обновления записей и таблиц, а также управления ими в приложении используются формулы. Зачастую данные при этом считываются из внешнего источника данных, представляющего собой расширенную таблицу, и записываются в такой источник. Кроме того, можно создать одну или несколько внутренних таблиц, которые называются коллекциями.
Вы можете создавать различные формулы, которые принимают имя таблицы в качестве аргумента так же, как формула в Excel принимает одну или несколько ссылок на ячейки. Некоторые формулы в Power Apps возвращают таблицу, в которой отражаются значения других заданных аргументов. Например, можно создать формулу:
Каждая запись содержит по меньшей мере одну категорию сведений о человеке, месте или предмете. В предыдущем примере показана запись для каждого товара (Chocolate, Bread и Water) и столбец для каждой категории сведений (Price, Quantity on Hand и Quantity on Order).
Чтобы сослаться в формуле на саму запись вне контекста таблицы, воспользуйтесь фигурными скобками. Например, запись { Name: "Strawberries", Price: 7,99 } не связана с таблицей. Обратите внимание, что имена полей Name и Price в этом примере не заключаются в двойные кавычки.
Поле — это отдельная часть сведений в записи. Такого рода поля можно представить себе как значение в столбце определенной записи.
Как и в случае с элементом управления, для ссылки на поле записи используется . (оператор записи). Например, First(Products).Name возвращает поле Name для первой записи в таблице Products.
Поле может содержать другую запись или таблицу, как показано в примере для функции GroupBy. Количество уровней вложенных записей и таблиц не ограничено.
Столбец состоит из одинаковых полей одной или нескольких записей в таблице. В приведенном выше примере у каждого товара есть поле цены, и эта цена находится в одном и том же столбце для всех продуктов. Приведенная выше таблица состоит из четырех столбцов, имена которых показаны в первой строке:
Имя столбца соответствует содержащимся в нем полям.
Все значения в столбце принадлежат к одинаковому типу данных. В приведенном выше примере столбец "Количество в наличии" всегда содержит число и не может содержать строку, например "12 единиц", для одной из записей. Значение любого поля может быть также пустым.
В других средствах столбцы могут называться "полями".
Примечание
Для источников данных, таких как плитки SharePoint, Excel, Power BI, содержащие имена столбцов с пробелами, Power Apps заменит эти пробелы кодом "_x0020_". Например, столбец Имя столбца из плитки SharePoint, Excel или Power BI будет отображаться как Имя_x0020_столбца в Power Apps при отображении в структуре данных или использовании в формуле.
Таблица состоит из одной или нескольких записей, каждая из которых имеет несколько полей с согласованными именами во всех записях.
У всех таблиц, хранящихся в источнике данных или коллекции, есть имя, которое используется для ссылки на таблицу и передачи ее функциям, принимающим таблицы в качестве аргументов. Таблицы также могут быть результатом функции или формулы.
Как показано в следующем примере, таблицу в формуле можно представить с помощью функции Table с набором записей, которые записываются в фигурных скобках:
Table( { Value: "Strawberry" }, { Value: "Vanilla" } )
Используя квадратные скобки, можно также определить таблицу с одним столбцом. Эквивалентный способ представления приведенной выше записи:
[ "Strawberry", "Vanilla" ]
В Excel и Power Apps формулы для обработки чисел и строк текста используются аналогичным образом.
В обоих случаях вычисленное значение изменяется автоматически при изменении значений аргументов (например, числа в ячейке A1 или значения Slider1).
Аналогично можно использовать формулы для доступа к данным в таблицах и записях, а также управления ими. В некоторых формулах имена таблиц можно использовать в качестве аргументов. Например, Min(Catalog, Price) можно использовать для отображения минимального значения столбца Price таблицы Catalog. Другие формулы возвращают в качестве значения целые таблицы, например RenameColumns(Catalog, "Price", "Cost"), которая возвращает все записи из таблицы Catalog, но изменяет имя столбца Price на Cost.
Так же как в случае с числами, формулы, включающие в себя таблицы и записи, автоматически пересчитываются при изменении базовой таблицы или записи. Если стоимость товара в таблице Catalog станет меньше предыдущего минимального значения, возвращаемое значение формулы Min автоматически изменится соответствующим образом.
Давайте рассмотрим несколько простых примеров.
Создайте пустое приложение для телефона и добавьте вертикальный элемент управления Галерея, который содержит другие элементы управления.
По умолчанию на экране отображается заполнитель из таблицы CustomGallerySample. В качестве значения свойства Items элемента управления Галерея на этом экране автоматически устанавливается эта таблица.
Примечание
Для большей наглядности на иллюстрациях мы изменили относительное расположение некоторых элементов управления и увеличили их размер.
Вместо того чтобы задавать в качестве значения свойства Items имя таблицы, присвойте ему формулу, которая включает в себя имя таблицы в качестве аргумента, как показано в этом примере:
Sort(CustomGallerySample, SampleHeading, SortOrder.Descending)
Эта формула содержит функцию Sort, которая принимает имя таблицы в качестве первого аргумента и имя ее столбца в качестве второго. Функция также поддерживает необязательный третий аргумент, который указывает, что данные необходимо отсортировать в порядке убывания.
Задайте в качестве значения свойства Items формулу, которая принимает в качестве аргумента формулу с предыдущего этапа и возвращает таблицу, как в следующем примере:
FirstN(Sort(CustomGallerySample, SampleHeading, SortOrder.Descending), 2)
В этой формуле для отображения определенного числа записей в таблице используется функция FirstN. Функция Sort используется в качестве первого аргумента FirstN, и число (в данном случае 2) — в качестве второго (он указывает, сколько записей следует отображать).
Вся формула возвращает таблицу, содержащую первые две записи таблицы CustomGallerySample, отсортированные по столбцу SampleHeading в порядке убывания.
Рассмотрим функцию Lower. Если переменная welcome содержит текстовую строку "Hello, World", формула Lower( welcome ) возвращает "hello, world". Эта функция никоим образом не изменяет значение в этой переменной. Lower — это чистая функция в том смысле, что она только обрабатывает входные данные и производит выходные данные. Это все; она не имеет побочных эффектов. Все функции в Excel и большинство функций в Power Apps — это чистые функции, которые позволяют автоматически пересчитать книгу или приложение.
Power Apps предлагает набор функций, которые работают с таблицами таким же образом. Эти функции принимают таблицы в качестве входных данных и фильтруют, сортируют, преобразовывают, сокращают и суммируют целые таблицы данных. На самом деле функция Lower и многие другие функции, которые обычно принимают одно значение, также могут принимать в качестве входных данных таблицу из одного столбца.
Многие из этих функций принимают в качестве входных данных таблицу из одного столбца. Если во всей таблице есть только один столбец, вы можете указать его по имени. Если таблица имеет несколько столбцов, вы можете указать один из этих столбцов, используя синтаксис Таблица.Столбец. Например, Products.Name возвращает таблицу с одним столбцом только значений Name из таблицы Products.
Вы можете полностью изменить форму таблицы, как хотите, используя функцию AddColumns, RenameColumns, ShowColumns или DropColumns. Опять же, эти функции изменяют только свое выходные данные, но не источник.
Свойства элементов управления также могут быть таблицами:
Другие функции специально предназначены для изменения данных и имеют побочные эффекты. Поскольку эти функции не являются чистыми, вы должны тщательно их строить, и они не могут участвовать в автоматическом пересчете значений в приложении. Эти функции можно использовать только внутри формул поведения.
Вы можете также создать формулу, которая вычисляет данные для отдельной записи, принимает отдельную запись в качестве аргумента и предоставляет отдельную запись как возвращаемое значение. Возвращаясь к приведенному выше примеру коллекции, воспользуемся свойством Gallery1.Selected для отображения сведений из записи, которую выбрал в ней пользователь.
Добавьте кнопку и задайте следующую формулу в качестве значения свойства OnSelect:
Collect( SelectedRecord, Gallery1.Selected )
Удерживая нажатой клавишу ALT, выберите эту кнопку.
В меню Файл выберите Коллекции.
Эта формула возвращает запись, которая включает в себя данные не только из записи, выбранной в данный момент в коллекции, но и каждого элемента управления в этой коллекции. Например, запись содержит столбец SampleText, который соответствует столбцу SampleText в исходной таблице, и столбец Subtitle1, представляющий метку, в которой отображаются данные из этого столбца. Выберите значок таблицы в столбце Subtitle1 для детализации данных.
Примечание
Столбец Subtitle1 может называться Subtitle2 или подобным образом, если вы добавили другие элементы помимо описанных в этом разделе.
Теперь при наличии выбранной записи можно извлечь из нее отдельные поля с помощью оператора . оператор.
Добавьте элемент управления Подпись и переместите его под коллекцию и кнопку.
Задайте для свойства Text метки следующее выражение:
"Selected: " & Gallery1.Selected.SampleHeading
Таким образом вы получили свойство Selected, которое представляет собой запись, и извлекли из него свойство SampleHeading.
Запись можно также использовать как контейнер общего назначения для соответствующих именованных значений.
В этих случаях запись никогда не была частью таблицы.
Функции, возвращающие записи:
Свойства, возвращающие записи:
Некоторые функции при выполнении вычисляют формулы для всех записей таблицы по отдельности. Результат формулы используется различными способами:
Внутри этих формул можно ссылаться на поля обрабатываемой записи. Каждая из этих функций создает "область записи", в которой вычисляется формула. При этом поля записи предоставляются как идентификаторы верхнего уровня. Можно также сослаться на свойства элемента управления и другие значения из приложения.
Возьмем, например, таблицу Products.
Чтобы создать этот пример таблицы в вашем приложении, вставьте кнопку, установите для ее свойства 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' )
Первый аргумент функции Filter — это таблица записей, которые необходимо обработать, а второй — это формула. Функция Filter создает для вычисления этой формулы область записи, в которой доступны поля каждой записи. В данном случае это 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.
Имена полей, добавленные с помощью области записи, переопределяют такие же имена из любого другого места в приложении. В этом случае с помощью оператора устранения неоднозначности @ можно по-прежнему получать доступ к значениям за пределами области записи.
Если таблица, над которой выполняется операция, представляет собой выражение, например Filter( Table, ... ), оператор устранения неоднозначности использовать нельзя. Не используя оператор устранения неоднозначности, получить доступ к полям этого табличного выражения можно только в наиболее глубоко вложенной области записи.
Представьте, например, что есть коллекция X.
Ее можно создать с помощью функции ClearCollect( X, [1, 2] ).
Есть также другая коллекция Y.
Эту коллекцию можно создать с помощью функции ClearCollect( Y, ["A", "B"] ).
Кроме того, определите переменную контекста с именем Value с помощью следующей формулы: UpdateContext( {Value: "!"} )
Давайте теперь соберем все это вместе. В этом контексте следующая формула:
Ungroup(
ForAll( X,
ForAll( Y,
Y[@Value] & Text( X[@Value] ) & [@Value]
)
),
"Value"
)
дает такую таблицу:
Что в этом случае происходит? Внешняя функция ForAll определяет область записи для X, обеспечивая доступ к полю Value всех записей по мере их обработки. Для доступа к нему можно просто воспользоваться словом Value или выражением X[@Value].
Наиболее глубоко вложенная функция ForAll определяет другую область записи для Y. Поскольку в этой таблице также определено поле Value, значение Value в данном случае будет ссылаться на поле в записи коллекции Y и больше не будет ссылаться на поле из X. Чтобы получить здесь доступ к полю Value из коллекции X, необходимо использовать более длинную версию с оператором устранения неоднозначности.
Поскольку Y является самой глубоко вложенной областью записи, для доступа к полям в этой таблице устранение неоднозначности не требуется, что позволяет использовать эту формулу с тем же результатом:
Ungroup(
ForAll( X,
ForAll( Y,
Value & Text( X[@Value] ) & [@Value]
)
),
"Value"
)
Все области записей ForAll переопределяют глобальную область. На определенную нами переменную контекста Value нельзя ссылаться по имени без оператора устранения неоднозначности. Чтобы получить доступ к этому значению, используйте [@Value].
Ungroup преобразует результат в плоскую структуру, поскольку вложенные функции 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 } }
Заключите имя каждого столбца, содержащего специальный символ, например пробел или двоеточие, в одинарные кавычки. Чтобы использовать одинарные кавычки в имени столбца, укажите их дважды.
Обратите внимание, что значение в столбце Price не содержит символ валюты, например знак рубля. Форматирование будет применено при отображении значения.
Таблицу можно создать с помощью функции Table и набора записей. Таблицу, приведенную в начале данного раздела, можно представить с помощью следующей формулы:
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 } )
}
)
Вы можете создать таблицы с одним столбцом, указав значения в квадратных скобках. Результирующая таблица будет содержать один столбец с именем Value.
Например, [ 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.
Документация
Функции Collect, Clear и ClearCollect - Power Platform
Справочные сведения о функциях Collect, Clear и ClearCollect, включая описание синтаксиса и примеры.
Создание и обновление коллекции в приложении на основе холста - Power Apps
Создайте коллекцию, добавьте элементы в коллекцию и удалите один или все элементы из коллекции в приложении на основе холста.
Элемент управления Таблица данных в Power Apps - Power Apps
Узнайте о сведениях, свойствах и примерах управления таблицей данных в Power Apps.