Функции Sort и SortByColumns

Применимо к: приложениям на основе холста классическим потокам приложениям на основе модели интерфейсу командной строки Power Platform

Сортировка таблицы.

Заметка

Команды интерфейса командной строки PAC pac power-fx не поддерживают функцию SortByColumns.

Description

Функция Sort сортирует таблицу по заданной формуле.

Формула вычисляется для каждой записи этой таблицы, и полученные результаты используются для сортировки таблицы. Формула должна возвращать число, строку или логическое значение, но не таблицу и не запись.

Поля обрабатываемой в настоящее время записи доступны в формуле. Используйте оператор ThisRecord или просто укажите поля по имени, как указываются любые другие значения. Оператор As также можно использовать для присвоения имени обрабатываемой записи, что упростит понимание формулы и обеспечивает доступность вложенных записей. Дополнительные сведения см. в приведенных ниже примерах и в описании работы с областью записи.

Чтобы сортировать таблицу сначала по одному столбцу, а затем по другому, используйте вложенные формулы Sort. Например, следующая формула отсортирует таблицу Contacts сначала по столбцу LastName, а затем по столбцу FirstName: Sort( Sort( Contacts, LastName ), FirstName )

Функцию SortByColumns также можно использовать для сортировки таблицы по одному или нескольким столбцам.

В списке параметров функции SortByColumns передаются имена столбцов для сортировки и порядок сортировки по каждому из них. Сортировка выполняется в порядке указания параметров (сначала по первому столбцу, затем по второму и т. д). Имена столбцов, определяемые в строковом формате, должны быть заключены в двойные кавычки, будучи напрямую внесенными в список параметров. Например: SortByColumns( CustomerTable, "LastName" ).

Вы можете объединить функцию SortByColumns с элементом управления Drop down или List box, чтобы пользователи могли сами выбрать столбцы для сортировки.

Кроме сортировки по возрастанию или убыванию, функция SortByColumns позволяет сортировать по списку значений, внесенному в таблицу с одним столбцом. Например, можно отсортировать записи по названиям дня недели, указав порядок сортировки [ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" ]. Тогда первыми будут расположены все записи за понедельник (Monday), за ними все записи за вторник (Tuesday) и т. д. Все записи, значения столбца в которых не будут найдены в таблице сортировки, помещаются в конец отсортированного списка.

Таблицы в Power Apps представлены значением, как любая строка или число. Их можно передавать в функции и получать в качестве результата выполнения функций. Функции Sort и SortByColumn не изменяют исходную таблицу, а принимают ее в качестве аргумента и возвращают новую отсортированную таблицу. Подробнее см. в описании работы с таблицами.

Делегирование

По возможности Power Apps будет делегировать операции фильтрации и сортировки источнику данных и пролистывать результаты по запросу. Например, при запуске приложения, которое отображает элемент управления Коллекция, заполненный данными, только первый набор записей будет изначально передан на устройство. По мере пролистывания будут отображаться дополнительные данные из источника данных. В результате уменьшается время запуска приложения или доступа к очень большим наборам данных.

Однако делегирование может не всегда быть возможно. Источники данных отличаются в зависимости от функций и операторов, которые они поддерживают с делегированием. Если полное делегирование формулы невозможно, среда разработки пометит предупреждением ту часть, которую невозможно делегировать. По возможности следует изменить формулу, чтобы избежать функций и операторов, которые невозможно делегировать. В списке делегирования приводятся сведения о том, какие источники данных и операции можно делегировать.

Если делегирование невозможно, Power Apps будет извлекать только небольшой набор записей для локальной работы. Функции фильтрования и сортировки будут работать с уменьшенным набором записей. Сведения, доступные в коллекции, могут не представлять полную картину, что может запутать пользователей.

Дополнительные сведения см. в обзоре делегирования.

Синтаксис

Sort( Table, Formula [, SortOrder ] )

  • таблица — обязательный аргумент. Таблица для сортировки.
  • Formula — обязательный аргумент. Эта формула вычисляется для каждой записи этой таблицы, и полученные результаты используются для сортировки таблицы. Можно ссылаться на любые столбцы в таблице.
  • SortOrder — необязательный аргумент. Если задать SortOrder.Descending, таблица будет отсортирована в порядке убывания. По умолчанию используется значение SortOrder.Ascending.

SortByColumns( Table, ColumnName1 [, SortOrder1, ColumnName2, SortOrder2, ... ] )

  • таблица — обязательный аргумент. Таблица для сортировки.

  • ColumnName(s) — обязательный аргумент. Имена столбцов для сортировки в строковом формате.

  • SortOrder(s) — необязательный аргумент. Допускаются значения SortOrder.Ascending или SortOrder.Descending. По умолчанию используется SortOrder.Ascending. Если передаются несколько значений ColumnName, то для всех столбцов, кроме последнего, необходимо указать SortOrder.

    Заметка

    Для источников данных SharePoint и Excel, содержащих имена столбцов с пробелами, вместо каждого пробела укажите "_x0020_". Например, "Имя столбца" укажите как "Имя_x0020_столбца".

SortByColumns( Table, ColumnName, SortOrderTable )

  • таблица — обязательный аргумент. Таблица для сортировки.

  • ColumnName — обязательный аргумент. Имя столбца для сортировки в строковом формате.

  • SortOrderTable — обязательный аргумент. Таблица с одним столбцом, содержащая значения для сортировки.

    Заметка

    Для источников данных SharePoint и Excel, содержащих имена столбцов с пробелами, вместо каждого пробела укажите "_x0020_". Например, "Имя столбца" укажите как "Имя_x0020_столбца".

Примеры

В следующих примерах мы будем использовать источник данныхIceCream, который содержит данные в виде такой таблицы:

Пример мороженого.

Формула Описание Результат
Sort( IceCream, Flavor )

SortByColumns( IceCream, "Flavor" )
Сортирует IceCream по столбцу Flavor. Столбец Flavor содержит строковые данные, поэтому таблица сортируется в алфавитном порядке. По умолчанию используется порядок сортировки по возрастанию. Отсортировано по алфавиту.
Sort( IceCream, Quantity )

SortByColumns( IceCream, "Quantity" )
Сортирует IceCream по столбцу Quantity. Столбец Quantity содержит числовые данные, поэтому таблица сортируется по числовым значениям. По умолчанию используется порядок сортировки по возрастанию. Отсортировано численно.
Sort( IceCream, Quantity, SortOrder.Descending )

SortByColumns( IceCream, "Quantity", SortOrder.Descending )
Сортирует IceCream по столбцу Quantity. Столбец Quantity содержит числовые данные, поэтому сортировка выполняется по числовым значениям. Указан порядок сортировки по убыванию. Отсортировано численно и в нисходящем порядке.
Sort( IceCream, Quantity + OnOrder ) Сортирует IceCream по сумме столбцов Quantity и OnOrder, которая вычисляется отдельно для каждой записи. При суммировании мы получаем числовые данные, поэтому таблица сортируется по числовым значениям. По умолчанию используется порядок сортировки по возрастанию. Так как записи сортируются по формуле, а не по прямым значениям столбцов, для этого примера нет аналога с использованием функции SortByColumns. Отсортировано численно и в восходящем порядке.
Sort( Sort( IceCream, OnOrder ), Quantity )

SortByColumns( IceCream, "OnOrder", SortOrder.Ascending, "Quantity", SortOrder.Ascending )
Сортирует IceCream сначала по столбцу OnOrder, а затем по столбцу Quantity. Обратите внимание, что строка "Pistachio" оказалась выше строки "Vanilla" при сортировке по столбцу OnOrder, а затем они заняли места рядом в соответствии со значениями в столбце Quantity. Отсортировано с фисташками над ванилью.
SortByColumns( IceCream, "Flavor", [ "Pistachio", "Strawberry" ] ) Сортирует IceCream по столбцу Flavor на основе таблицы с одним столбцом, содержащей значения "Pistachio" и "Strawberry". Записи, в которых столбец Flavor имеет значения "Pistachio", будут отображаться в результате первыми, а за ними — записи со значением "Strawberry". Все записи со значениями столбца Flavor, не входящими в этот список, например "Vanilla", будут отображаться после записей, для которых найдены совпадения. Отсортировано с фисташками над клубникой.

Пошаговое руководство

Чтобы самостоятельно выполнить эти примеры, создайте источник данных IceCream в виде коллекции следующим образом.

  1. Добавьте кнопку и задайте следующую формулу в качестве значения свойства OnSelect:
    ClearCollect( IceCream, { Flavor: "Chocolate", Quantity: 100, OnOrder: 150 }, { Flavor: "Vanilla", Quantity: 200, OnOrder: 20 }, { Flavor: "Strawberry", Quantity: 300, OnOrder: 0 }, { Flavor: "Mint Chocolate", Quantity: 60, OnOrder: 100 }, { Flavor: "Pistachio", Quantity: 200, OnOrder: 10 } )
  2. Откройте предварительный просмотр приложения, нажмите эту кнопку, затем нажмите клавишу ESC, чтобы вернуться в рабочую область по умолчанию.
  3. Выберите пункт Коллекции в меню Файл, чтобы отобразить только что созданную коллекцию, затем нажмите клавишу ESC, чтобы вернуться в рабочую область по умолчанию.

Sort

  1. Добавьте еще одну кнопку и задайте следующую формулу в качестве значения свойства OnSelect:
    ClearCollect( SortByFlavor, Sort( IceCream, Flavor ) )

    Указанная выше формула создает вторую коллекцию с именем SortByFlavor, все данные в которой будут совпадать с данными из коллекции Ice Cream. Но в этой новой коллекции данные отсортированы по возрастанию в алфавитном порядке по значениям столбца Flavor.

  2. Нажмите клавишу F5, нажмите новую кнопку, затем нажмите клавишу ESC.

  3. Выберите пункт Коллекции в меню Файл, чтобы отобразить обе коллекции, затем нажмите клавишу ESC, чтобы вернуться в рабочую область по умолчанию.

  4. Повторите последние три шага, указывая новые имена для создаваемых коллекций, и замените формулу для функции Sort, используя другую формулу из таблицы примеров ранее в этом разделе, в которых используется функция Sort.

SortByColumns

  1. Добавьте еще одну кнопку и задайте следующую формулу в качестве значения свойства OnSelect:
    ClearCollect( SortByQuantity, SortByColumns( IceCream, "Quantity", SortOrder.Ascending, "Flavor", SortOrder.Descending ) )

    Указанная выше формула создает третью коллекцию с именем SortByQuantity, все данные в которой будут совпадать с данными из коллекции Ice Cream. Но в этой новой коллекции данные будут отсортированы по числовым значениям столбца Quantity в порядке возрастания, а затем по значениям столбца Flavor в порядке убывания.

  2. Нажмите клавишу F5, нажмите новую кнопку, затем нажмите клавишу ESC.

  3. Выберите пункт Коллекции в меню Файл, чтобы отобразить все три коллекции, затем нажмите клавишу ESC, чтобы вернуться в рабочую область по умолчанию.

  4. Повторите последние три шага, указывая новые имена для создаваемых коллекций, и замените формулы для функции SortByColumns, используя другую формулу из таблицы примеров ранее в этом разделе, в которых используется функция SortByColumns.