Использование статистических функций в формах

При использовании статистических функций не обрабатываются записи, которые содержат пустое значение (Null) в указанных полях. Например, выражение Sum( [В наличии] + [Принято] — [Отпущено] — [Заказано] ) будет возвращать значение Null, если хотя бы одно из полей, участвующих в выражении, содержит пустое значение. Чтобы предотвратить такие ошибки в вычислениях, следует использовать функцию Nz, которая преобразует пустое значение в нулевое. Значит, описанное выше выражение должно выглядеть так:
Sum(Nz([В наличии])+Nz([Принято])-Nz([Отпущено])-Nz([Заказано]))
В приведены наиболее часто используемые в формах статистические функции .
Таблица 9.3. Статистические функции

Функция

Описание

Sum

Сумма значений поля

Avg

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

Min

Минимальное значение поля

Max

Максимальное значение поля

Count

Количество значений поля

DSum

Сумма значений в указанном подмножестве записей

DAvg

Среднее значение в указанном подмножестве записей

DCount

Количество записей в подмножестве

DLookup

Значение конкретного поля в указанном подмножестве записей

DMin, DMax

Минимальное и максимальное значения поля в указанном подмножестве записей

В таблице приведены и обычные статистические функции и статистические функции по подмножеству. В вычисляемых элементах управления форм могут использоваться и те и другие. При этом статистические, функции по подмножеству, как правило, используются, если требуется ограничить набор обрабатываемых записей, в противном случае используют простые статистические функции. У статистических функций по подмножеству задаются три аргумента: выражение, домен и критерий отбора. Выражение в данном случае может состоять из имени поля в домене, а также может быть комбинацией операций над полями в домене, константами, именами элементов управления (в форме), вызовами функций. Домен — это таблица, запрос или инструкция SQL, т. е. набор записей, являющийся источником данных для заданного выражения. Критерий — необязательный параметр, задающий условие отбора записей в домене, в виде предложения WHERE на языке SQL (но без самого ключевого слова WHERE). Все три параметра задаются в виде строкового значения. Результатом функции является обработка значений заданного выражения для всех выбранных по заданному критерию записей в домене.
Ниже приводятся примеры использования статистических функций.
 
Функция DLookup
Обычно используется для вывода в форме значения поля из таблицы, не входящей в базовый запрос. Например, в форме "Заказы" (Orders) можно отобразить дополнительные поля из таблицы "Клиенты" (Customers), которые не были включены в базовый запрос. Например, чтобы отобразить значение поля "Телефон" (Phone), в качестве значения свойства Данные (Control Source) вычисляемого элемента управления нужно ввести следующее выражение:
=DLookup("[Телефон]"; "[Клиенты]"; "[КодКлиента] = ‘" & Forms!{Заказы]![КодКлиента] & ‘"")
для английской версии Access:
=DLookUp("[Phone]";"[Customers]";"[CustomerlD] = ‘" & Forms![Orders]![CustomerlD] & "’")
Критерием для выбора записи из таблицы "Клиенты" (Customers) является поле "КодКлиента" (CustomerlD) в форме "Заказы" (Orders).
Замечание
В данном случае выбор записей идет по полю текстового типа "КодКлиента" (CustomerlD), поэтому условие на его значение должно задаваться в виде строки, заключенной в кавычки или апострофы. Для этого необходима конкатенация заданного в условии значения с двух сторон с апострофом или кавычкой. Включение апострофа в строку не отличается от включения обычной буквы или цифры, а чтобы включить в строку символ кавычки, ее придется удвоить, чтобы она отличалась от кавычек, ограничивающих само строковое значение. Таким образом, если строка состоит из одной кавычки, она будет выглядеть так: """", в нашем примере для задания условия на текстовое значение мы использовали апострофы.
 
Функции Dcount и DSum
Предположим, в форме "Заказы" (Orders) требуется создать вычисляемые поля для отображения количества заказов, сделанных клиентом, и общей суммы заказов. Для этого нужно создать два вычисляемых поля, а в качестве значений свойства Данные (Control Source) ввести следующие выражения:
=DCount("[КодЗаказа]"; "[Заказы]"; "[КодКлиента] = ‘" & Forms![Заказы]![КодКлиента] & ‘"")
=DSum("[ОтпускнаяЦена]"; "’[Счета]"; "[КодКлиента] = ‘" & Forms![Заказы]![КодКлиента] & "’")
Для английской версии Access, соответственно:
=DCount("[OrderID]";"[Orders]";"[CustomerlD] = ‘" & Forms![Orders]![CustomerlD] & "’")
=DSum("[ExtendedPrice]";"[Invoices]";"[CustomerlD] = ‘" & Forms![Orders]![CustomerlD] & "’")
Функция DMax
Часто требуется организовать счетчик в одном из полей формы, например номер заказа должен при вводе каждой новой записи увеличиваться на единицу. Стандартный тип поля Счетчик (AutoNumber) не всегда подходит для этих целей, т. к. значение в поле такого типа нельзя вводить вручную. Если должна допускаться ручная корректировка номера заказа, удобнее для хранения номера заказа добавить в таблицу обычное числовое поле, а в форму поместить присоединенное к нему вычисляемое поле, у которого в свойстве Значение по умолчанию (Default Value) задано выражение:
=DMax("[КодЗаказа]"; "[Заказы]") + 1
Для английской версии:

=DMax("[OrderlD]";"[Orders]") +1.