Поделиться через


Группировка записей и агрегирование вычислений с помощью источников данных GROUPBY

При настройке сопоставлений модели электронной отчетности (ER) можно добавить необходимые источники данных типа GroupBy.

Во время разработки источник данных GroupBy настраивается для идентификации следующих элементов:

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

Во время выполнения настроенный источник данных GroupBy группирует записи, имеющие одинаковые значения в полях группировки, а затем возвращает список записей. Каждая запись представляет одну группу. Для каждой группы источник данных предоставляет значения полей, по которым группируются начальные записи, значения вычисленных агрегатных функций и список записей базового источника данных, принадлежащего группе.

Функции агрегирования

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

  • AVG — эта функция возвращает среднее значений в группе. Она может использоваться только с числовыми полями.
  • COUNT — эта функция возвращает число номенклатур, которые были найдены в группе.
  • Min — эта функция возвращает минимальное значение среди значений в группе.
  • Max — эта функция возвращает максимальное значение среди значений в группе.
  • SUM — эта функция возвращает сумму всех значений в группе. Она может использоваться только с числовыми полями.

Место выполнения

При изменении источника данных GroupBy и определении базового источника данных, содержащего записи, которые должны быть сгруппированы, система автоматически определяет наиболее эффективное место для выполнения этого источника данных GroupBy. Если базовый источник данных является запрашиваемым (то есть, если он может выполняться на уровне базы данных), база данных приложения также указывается в качестве местоположения выполнения редактируемого источника данных GroupBy. В противном случае в качестве места выполнения указывается память сервера приложений.

Можно вручную изменить автоматически обнаруженное место выполнения, выбрав место, применимое к настроенному источнику данных. Если выбранное место выполнения неприменимо, во время разработки выдается ошибка проверки.

Совет

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

Потребление памяти

По умолчанию, если источник данных GroupBy запускается в памяти, память сервера приложений используется для хранения записей базового источника данных, принадлежащего каждой обнаруженной группе, в виде записей одной группы. Чтобы уменьшить потребление памяти, можно запретить хранение записей для источников данных GroupBy, если они были настроены для расчета только функций агрегирования, а записи их группы не используются во время выполнения. Чтобы уменьшить потребление памяти таким образом, включите функцию Уменьшение потребления памяти в электронной отчетности при использовании группирования записей только для расчета агрегированных показателей в рабочей области управления функциями.

Альтернативные варианты

Аналогичные агрегаты могут рассчитываться с помощью различных типов источников данных или встроенных функций ER.

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

Пример: использование источника данных GROUPBY для агрегирование вычислений и группировки записей

В этом примере показано, как пользователь в роли "системный администратор" или "функциональный консультант электронной отчетности" может настроить сопоставление модели ER, которое содержит источник данных GROUPBY, используемый для расчета функций агрегирования и группирования записей. Это сопоставление модели используется для печати контрольного отчета при создании декларации Интрастат. Этот отчет позволяет проверять отчеты по проводкам Интрастат.

Процедуры в этом примере могут быть выполнены в компании DEMF в Microsoft Dynamics 365 Finance.

Подготовка демонстрационных данных

Убедитесь, что у вас имеются проводки Интрастат для отчетности на странице Интрастат. Необходимо иметь проводки для других кодов транспортировки, так как в этом примере проводки будут сгруппированы по полю Транспортировка.

Подготовка проводок Интрастат на странице

Настройка платформы электронной отчетности

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

Импорт стандартной конфигурации формата электронной отчетности

Следуйте шагам в разделе Импорт стандартной конфигурации формата электронной отчетности, чтобы добавить стандартные конфигурации электронной отчетности в текущий экземпляр Dynamics 365 Finance. Импортируйте версию 1 конфигурации модели Интрастат из репозитория.

Создание пользовательской конфигурации модели данных

Выполните действия, описанные в разделе Добавление пользовательской конфигурации модели данных, чтобы вручную добавить новую конфигурацию модели данных ER Модель Интрастат (Litware), которая является производной от импортированной конфигурации модели Интрастат.

Настройка пользовательского компонента модели данных

Выполните следующие шаги, чтобы внести необходимые изменения в производную модель данных Модель Интрастат (Litware), чтобы она могла использоваться для предоставления кодов транспортировки, имеющих необходимые сведения.

  1. Перейдите в раздел Администрирование организации>Электронная отчетность>Конфигурации.

  2. На странице Конфигурации в дереве конфигураций выберите пункт Модель Интрастат (Litware).

  3. Выберите Конструктор.

  4. На странице Конструктор модели данных в дереве модели выберите Интрастат.

  5. Выберите Создать, чтобы добавить новый вложенный узел для выбранного узла Интрастат. В раскрывающемся диалоговом окне для добавления узла модели данных выполните следующие шаги:

    1. В поле Имя введите Транспорт.
    2. В поле Тип элемента выберите Список записей.
    3. Чтобы добавить новый узел, выберите Добавить.
  6. Выберите Создать, чтобы добавить новый вложенный узел для только что добавленного узла Транспорт. В раскрывающемся диалоговом окне для добавления узла модели данных выполните следующие шаги:

    1. В поле Имя введите Код.
    2. В поле Тип элемента выберите Строка.
    3. Чтобы добавить новый узел, выберите Добавить.
  7. Выберите Создать, чтобы добавить еще один новый вложенный узел для узла Транспорт. В раскрывающемся диалоговом окне для добавления узла модели данных выполните следующие шаги:

    1. В поле Имя введите TotalInvoicedAmount.
    2. В поле Тип элемента выберите Вещественный.
    3. Чтобы добавить новый узел, выберите Добавить.
  8. Выберите Создать, чтобы добавить еще один новый вложенный узел для узла Транспорт. В раскрывающемся диалоговом окне для добавления узла модели данных выполните следующие шаги:

    1. В поле Имя введите NumberOfTransactions.
    2. В поле Тип элемента выберите Целочисленный.
    3. Чтобы добавить новый узел, выберите Добавить.
  9. Выберите Создать, чтобы добавить еще один новый вложенный узел для узла Транспорт. В раскрывающемся диалоговом окне для добавления узла модели данных выполните следующие шаги:

    1. В поле Имя введите Проводка.
    2. В поле Тип элемента выберите Список записей.
    3. Чтобы добавить новый узел, выберите Добавить.
  10. Для только что добавленного узла Проводка на экспресс-вкладке Узел выберите Переключить ссылку номенклатуры.

  11. В диалоговом окне Переключить ссылку номенклатуры в дереве моделей данных выберите CommodityRecord. Затем выберите OK.

Настроенная модель данных в конструкторе модели данных ER.

Завершение разработки настраиваемой модели данных

Выполните этапы Завершение создания модели данных, чтобы завершить проектирование производной модели данных Модель Интрастат (Litware).

Создайте конфигурацию сопоставления модели

Выполните действия, описанные в разделе Создайте конфигурацию сопоставления модели, чтобы вручную добавить новую конфигурацию сопоставления модели ER Сопоставление образца Интрастат для производной конфигурации Модель Интрастат (Litware).

Добавление нового компонента сопоставлений модели

  1. Перейдите в раздел Администрирование организации>Электронная отчетность>Конфигурации.
  2. На странице Конфигурации в дереве конфигураций на левой панели разверните конфигурацию Модель Интрастат.
  3. Выберите конфигурацию Сопоставление образца Интрастат.
  4. Выберите конструктор, чтобы открыть список сопоставлений.
  5. Выберите Удалить, чтобы удалить существующий компонент сопоставления.
  6. Чтобы добавить новый компонент сопоставления, нажмите Создать.
  7. В поле Определение выберите Интрастат.
  8. В поле Имя введите Сопоставление Интрастат.
  9. Выберите конструктор, чтобы начать настройку нового сопоставления.

Разработка добавленного компонента сопоставления модели

Добавление источников данных для доступа к таблице приложений

Настройте источник данных для доступа к таблицам приложений, содержащим сведения о проводках Интрастат.

  1. На странице Конструктор сопоставления модели в области Типы источников данных выберите Dynamics 365 for Operations\Записи таблицы.
  2. В области Источники данных выберите Добавить корень для добавления нового источника данных, который будет использоваться для доступа к таблице Интрастат. Каждая запись в таблице Интрастат представляет одну проводку Интрастат.
  3. В диалоговом окне Свойства источника данных в поле Имя введите Проводка.
  4. В поле Таблица введите Интрастат.
  5. Нажмите ОК, чтобы добавить новый источник данных.

Добавление источника данных для группировки проводок Интрастат

Настройте источник данных GroupBy для группировки проводок Интрастат и вычислений функций агрегирования.

  1. На странице Конструктор сопоставления модели в области Типы источников данных выберите Функции\Группирование по.

  2. В области Источники данных выберите Добавить корень для добавления нового источника данных, который будет использоваться для группирования проводок Интрастат и вычисления функций агрегирования.

  3. В диалоговом окне Свойства источника данных в поле Имя введите TransportRecord.

  4. Чтобы настроить условия группирования, выберите Изменить группу по.

  5. На странице Параметры Изменить группу по в списке источников данных в правой области выберите источник данных Проводка и разверните его.

  6. Выберите Добавить поле в > Элементы для группировки, чтобы указать, что источник данных Проводка выбран в качестве базового источника данных для настроенного источника данных GroupBy. Записи источника данных Проводка будут сгруппированы, а значения полей этого источника данных будут использоваться для вычислений в функциях агрегирования.

  7. Выберите поле Transaction\Transport, а затем выберите Добавить поле в > Сгруппированное поле, чтобы указать, что поле Проводка базового источника данных выбрано в качестве критерия группировки для настроенного источника данных GroupBy. Другими словами, записи в источнике данных Проводка будут сгруппированы в соответствии со значением поля Транспорт. Каждая запись в выбранном источнике данных GroupBy будет представлять отдельный код транспортировки, который был найден в записях базового источника данных.

  8. Выберите поле Transaction\AmountMST, а затем выполните следующие действия:

    1. Выберите Добавить поле в > Агрегировать поля, чтобы указать, что для этого поля будет рассчитана агрегатная функция.
    2. В области Агрегаты в записи, которая была добавлена для выбранного поля Transaction\AmountMST, в поле Метод выберите функцию Sum.
    3. В необязательном поле Имя введите TotalInvoicedAmount.

    Эти параметры определяют, что для каждой группы транспортировки будет рассчитываться общая сумма поля Transaction\AmountMST.

  9. Выберите поле Transaction\RecId, а затем выполните следующие действия:

    1. Выберите Добавить поле в > Агрегировать поля, чтобы указать, что для этого поля будет рассчитана агрегатная функция.
    2. В области Агрегаты в записи, которая была добавлена для выбранного поля Transaction\RecId, в поле Метод выберите функцию Count.
    3. В необязательном поле Имя введите NumberOfTransactions.

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

  10. Нажмите Сохранить.

  11. Проверьте параметры выполнения для редактируемого источника данных. Обратите внимание, что Автообнаружение выбрано автоматически в поле Расположение выполнения, а в поле Место выполнения указано значение SQL. Эти параметры указывают, что выбранный базовый источник данных Проводка в настоящее время является запрашиваемым, и можно выполнить редактируемый источник данных GroupBy на уровне базы данных.

  12. Откройте поиск поля Место выполнения, чтобы проверить список доступных значений. Обратите внимание, что можно выбрать Запрос или В памяти для принудительного выполнения этого источника данных GroupBy на уровне базы данных или в памяти сервера приложений.

  13. Выберите Сохранить, затем закройте страницу Изменение страницы параметров "Группирование по".

  14. Нажмите ОК, чтобы завершить настройку источника данных GroupBy.

Привязка источника данных GroupBy к полям модели данных

Привяжите настроенный источник данных к полям модели данных, чтобы указать, каким образом модель данных будет заполнена данными приложения в среде выполнения.

  1. На странице Конструктор сопоставления модели в области Модель данных разверните узел Транспорт.

  2. В области Источники данных разверните источник данных TransportRecord.

  3. Добавление привязки для представления списка обнаруженных групп транспортировки:

    1. В области Модель данных выберите элемент Транспорт.
    2. В области Источники данных выберите источник данных TransportRecord.
    3. Выберите Связать.
  4. Добавление привязки для представления кода транспорта каждой обнаруженной группы транспортировки:

    1. Выберите элемент модели данных Transport.Code.
    2. Выберите сгруппированное поле TransportRecord.grouped.TransportMode.
    3. Выберите Связать.
  5. Добавьте привязку для представления значений вычисленных агрегатных функций для каждой обнаруженной группы транспорта:

    1. Выберите элемент модели данных Transport.NumberOfTransactions.
    2. Выберите агрегированное поле TransportRecord.aggregated.NumberOfTransactions.
    3. Выберите Связать.
    4. Выберите элемент модели данных Transport.TotalInvoicedAmount.
    5. Выберите агрегированное поле TransportRecord.aggregated.TotalInvoicedAmount.
    6. Выберите Связать.
  6. Добавление привязки для представления записей проводок, принадлежащего каждой обнаруженной группе транспорта:

    1. Выберите элемент модели данных Transport.Transaction.
    2. Выберите поле TransportRecord.lines.
    3. Выберите Связать.

    Можно продолжить настройку привязок для вложенных элементов элемента модели данных Transport.Transaction и поля источника данных TransportRecord.lines, которые необходимо предоставить во время выполнения, сведений о проводках Интрастат, принадлежащих каждой обнаруженной группе транспорта.

Настроенное сопоставление модели в конструкторе сопоставления модели ER.

Отладка добавленного компонента сопоставления модели

Используйте отладчик источника данных ER для проверки настроенного сопоставления модели.

  1. На странице Конструктор сопоставлений моделей выберите Начать отладку.

  2. На странице Отладка источников данных в левой области выберите источник данных TransportRecord, а затем выберите Читать все записи.

  3. Разверните источник данных TransportRecord и выполните следующие действия:

    1. Выберите источник данных TransportRecord.grouped.TransportMode.
    2. Выберите Получить значение.
    3. Выберите источник данных TransportRecord.grouped.NumberOfTransactions.
    4. Выберите Получить значение.
    5. Выберите источник данных TransportRecord.grouped.TotalInvoicedAmount.
    6. Выберите Получить значение.
  4. В правой области выберите Развернуть все.

Источник данных TransportRecord содержит две записи и представляет два кода транспортировки. Для каждого кода транспортировки рассчитываются количество проводок и общая сумма по накладной.

Примечание

Подход "ленивое чтение" используется при вызове источника данных GroupBy для оптимизации вызовов базы данных. Таким образом, некоторые значения полей в источнике данных GroupBy рассчитываются в отладчике источника данных ER только в том случае, если они привязаны к полям модели данных.

Результаты отладки источника данных на странице

Вопросы и ответы

Существует ли способ расчета общих итогов при расчете итоговых сумм по группам?

Да. Чтобы рассчитать общие итоги, настройте другой источник данных GroupBy, в котором ранее настроенный источник данных GroupBy используется в качестве базового источника данных. На следующем рисунке показан источник данных Итоговые значения типа GroupBy, используемый для вычисления агрегированной функции SUM на основе агрегирования SUM источника данных TransportRecord типа GroupBy.

Источник данных итоговых значений в конструкторе сопоставления модели ER.

На следующем рисунке показаны результаты отладки источника данных Итоговые значения.

Результаты отладки источника данных итоговых значений на странице

Дополнительные ресурсы