Команда CALCULATE

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

Синтаксис:

CALCULATE eExpressionList
	[Scope] [FOR lExpression1] [WHILE lExpression2]
	[TO MemVarList | TO ARRAY ArrayName]
	[NOOPTIMIZE]

Параметры:
eExpressionList
Задает выражения, которые могут содержать любую комбинацию следующих функций:

AVG(nExpression)
CNT( )
MAX(eExpression)
MIN(eExpression)
NPV(nExpression1, nExpression2 [, nExpression3])
STD(nExpression)
SUM(nExpression)
VAR(nExpression)

Функции в списке выражений eExpressionList разделяются запятыми. Эти функции являются специфическими для CALCULATE и подробно описываются ниже в данном разделе. Их не следует смешивать с независимыми функциями, имеющими те же названия. Например, CALCULATE MIN() и MIN() это две разные функции.
Scope
Задает диапазон записей, используемых при вычислении. В вычислении участвуют только те записи, которые попадают в указанный диапазон. Он задается следующими предложениями: ALL, NEXT nRecords, RECORD nRecordNumber и REST. Подробнее о предложениях диапазона см. тему Предложения диапазона или главу 2 "Обзор языка программирования" Руководства разработчика. Команды, использующие параметр Scope, воздействуют только на таблицу активной рабочей области.
По умолчанию областью действия команды CALCULATE являются все записи (предложение ALL).
FOR lExpression1
Определяет, что в вычислении могут участвовать только записи, удовлетворяющие логическому условию lExpression1. Предложение FOR позволяет выполнять условное включение записей в вычисление, отфильтровывая ненужные записи.
Технология Rushmore допускает оптимизацию запроса CALCULATE ... FOR, если lExpression1 является оптимизируемым выражением. Для повышения производительности рекомендуется пользоваться в предложении FOR оптимизируемым выражением. Об оптимизируемых по технологии Rushmore выражениях см. темы SET OPTIMIZE, Основы технологии Rushmore и главу 17 "Оптимизация приложений" Руководства разработчика.
WHILE lExpression2
Задает условие, согласно которому записи будут включаться в вычисление до тех пор, пока логическое выражение lExpression2 остается истинным (.T.).
TO MemVarList
Задает одну или несколько переменных памяти, в которые записываются результаты вычисления. Если указанной переменной памяти не существует, Visual FoxPro автоматически создает переменную памяти с заданным именем.

TO ARRAY ArrayName
Задает имя массива, в который могут быть записаны результаты вычисления. Если задано имя несуществующего массива, Visual FoxPro автоматически создает массив под указанным именем. Если массив существует, но не в состоянии вместить все результаты вычислений, Visual FoxPro автоматически увеличивает размер массива надлежащим образом. Если существующий массив больше по размеру, чем необходимо, лишние элементы остаются без изменений. Результаты сохраняются в массиве в том порядке, в котором они заданы в команде CALCULATE.
NOOPTIMIZE
Блокирует оптимизацию команды CALCULATE по технологии Rushmore. Более подробно см. темы SET OPTIMIZE и Основы технологии Rushmore или главу 17 "Оптимизация приложений" Руководства разработчика.
AVG(nExpression)
Вычисляет среднее арифметическое выражения nExpression. При вычислении учитываются только записи, попадающие в диапазон Scope и/или удовлетворяющие условиям FOR или WHILE.
CNT()
Возвращает число записей в таблице. При вычислении учитываются только записи, попадающие в диапазон Scope и/или удовлетворяющие условиям FOR или WHILE.
MAX(eExpression)
Возвращает максимальное (или самое позднее) значение для выражения eExpression. В предложении MAX( ) можно задать любое поле типа Сharacter, Date, DateTime, Numeric, Float, Integer, Double, или Сurrency или любое выражение, использующее поля этих типов. При вычислении учитываются только записи, попадающие в диапазон Scope и/или удовлетворяющие условиям FOR или WHILE.
MIN(eExpression)
Возвращает минимальное (или самое раннее) значение для выражения eExpression. В предложении MAX( ) можно задать любое поле типа Сharacter, Date, DateTime, Numeric, Float, Integer, Double, или Сurrency или любое выражение, использующее поля этих типов. При вычислении учитываются только записи, попадающие в диапазон Scope и/или удовлетворяющие условиям FOR или WHILE.
NPV(nExpression1, nExpression2 [, nExpression3])
Вычисляет окончательную сумму в серии предстоящих перемещений наличности с учетом постоянной периодической процентной ставки.
nExpression1 задает процентную ставку, выраженную в виде десятичной дроби.
nExpression2 задает поле, выражение с участием полей или числовое выражение, представляющее серию перемещений наличности. Каждое такое перемещение может иметь либо положительное, либо отрицательное значение. Когда выражение nExpression2 является полем, считается, что значение каждой записи этого поля выражает перемещение наличности.
nExpression3 задает необязательную величину начального инвестирования. Если эта величина не задана, то предполагается, что начальное инвестирование имело место в конце первого периода. Размер начального инвестирования является первой записью в поле; отрицательное значение этой величины соответствует расходу наличности.
При вычислении учитываются только записи, попадающие в диапазон Scope и/или удовлетворяющие условиям FOR или WHILE.
STD(nExpression)
Вычисляет среднее квадратичное отклонение для выражения nExpression. Эта величина характеризует степень отличия значений полей или выражений, использующих поля, от среднего для этих значений. Чем меньше среднее квадратичное отклонение, тем меньше значения отклоняются от среднего. При вычислении учитываются только записи, попадающие в диапазон Scope и/или удовлетворяющие условиям FOR или WHILE.
SUM(nExpression)
Вычисляет общую сумму значений выражения nExpression. При вычислении учитываются только записи, попадающие в диапазон Scope и/или удовлетворяющие условиям FOR или WHILE.
VAR(nExpression)
Вычисляет дисперсию выражения nExpression. Величина дисперсии равняется среднему квадратичному отклонению, возведенному в квадрат. Чем меньше дисперсия, тем меньше значения отклоняются от среднего. При вычислении учитываются только записи, попадающие в диапазон Scope и/или удовлетворяющие условиям FOR или WHILE.

Комментарии:
Записи, содержащие нулевое значение не включаются в выполняемые командой CALCULATE операции.

Пример:

CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE orders  && Open Orders table

SET TALK ON
CLEAR
CALCULATE AVG(order_amt), MIN(order_amt), MAX(order_amt)
CALCULATE STD(order_amt), VAR(order_amt) TO gnStd, gnVar
? gnStd, gnVar

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 27.11.2002