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

CALCULATE eExpressionList [Scope] [FOR lExpression1] [WHILE lExpression2]
   [TO VarList | TO ARRAY ArrayName] [NOOPTIMIZE] 
   [IN nWorkArea | cTableAlias]

Параметры

eExpressionList

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

AVG(nExpression)

CNT( ) или COUNT( )

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. Подробнее о предложениях диапазона смотрите Выражения Scope. Команды, использующие выражение Scope воздействуют только на таблицу активной рабочей области.

По умолчанию областью действия команды CALCULATE являются все записи (предложение ALL).

FOR lExpression1

Определяет, что в вычислении могут участвовать только записи, удовлетворяющие логическому условию lExpression1. Предложение FOR позволяет выполнять условное включение записей в вычисление, отфильтровывая ненужные записи.

Технология Rushmore допускает оптимизацию запроса CALCULATE ... FOR, если lExpression1 вляется оптимизируемым выражением. Для повышения производительности рекомендуется пользоваться в предложении FOR оптимизируемым выражением. Об оптимизируемых по технологии Rushmore выражениях смотрите Команда SET OPTIMIZE and Использование оптимизации запросов Rushmore для ускорения доступа к данным.

WHILE lExpression2

Задает условие, согласно которому записи будут включаться в вычисление до тех пор, пока логическое выражение lExpression2 остается истинным (.T.).

TO VarList

Задает одну или несколько переменных памяти, в которые записываются результаты вычисления. Если указанной переменной памяти не существует, Visual FoxPro автоматически создает переменную памяти с заданным именем.

TO ARRAY ArrayName

Задает имя массива, в который могут быть записаны результаты вычисления. If the array name you specify does not exist, Visual FoxPro automatically creates an array with the name you specify. If the array exists and is not large enough to contain all the results of the calculation, Visual FoxPro automatically increases the size of the array to accommodate the information. If an existing array is larger than necessary, additional elements are left unchanged. Results are stored to the array elements in the order they are specified in the CALCULATE command.

NOOPTIMIZE

Блокирует оптимизацию команды CALCULATE по технологии Rushmore. Для получения дополнительной информации, смотрите Команда SET OPTIMIZE and Использование оптимизации запросов Rushmore для ускорения доступа к данным.

AVG( nExpression)

Вычисляет среднее арифметическое выражения nExpression. При вычислении учитываются только записи, попадающие в диапазон Scope и/или удовлетворяющие условиям FOR или WHILE.

CNT( ) or COUNT( )

Возвращает число записей в таблице. При вычислении учитываются только записи, попадающие в диапазон Scope и/или удовлетворяющие условиям FOR или WHILE..

MAX( eExpression)

Возвращает максимальное (или самое позднее) значение для выражения eExpression. В предложении MAX( ) можно задать любое поле типа Сharacter, date, datetime, numeric, float, integer, double, или currency или любое выражение, использующее поля этих типов. При вычислении учитываются только записи, попадающие в диапазон Scope и/или удовлетворяющие условиям FOR или WHILE.

MIN( eExpression)

Возвращает минимальное (или самое раннее) значение для выражения eExpression. Любое поле типа character, date, datetime, numeric, float, integer, double, или currency, или любое выражение, использующее поля этих типов, может включятся в eExpression. При вычислении учитываются только записи, попадающие в диапазон Scope и/или удовлетворяющие условиям FOR или WHILE.

NPV( nExpression1, nExpression2[, nExpression3])

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

nExpression1 задает процентную ставку, выраженную в виде десятичной дроби.

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

nExpression3 задает необязательную величину начального инвестирования. Если эта величина не задана, то предполагается, что начальное инвестирование имело место в конце первого периода. Размер начального инвестирования является первой записью в поле; отрицательное значение этой величины соответствует расходу наличности.

При вычислении учитываются только записи, попадающие в диапазон Scope и/или удовлетворяющие условиям FOR или WHILE.

STD( nExpression)

Вычисляет среднее квадратичное отклонение для выражения nExpression. Эта величина характеризует степень отличия значений полей или выражений, использующих поля, от среднего для этих значений. Чем меньше среднее квадратичное отклонение, тем меньше значения отклоняются от среднего. При вычислении учитываются только записи, попадающие в диапазон Scope и/или удовлетворяющие условиям FOR или WHILE.

SUM( nExpression)

Вычисляет общую сумму значений выражения nExpression. При вычислении учитываются только записи, попадающие в диапазон Scope и/или удовлетворяющие условиям FOR или WHILE.

VAR( nExpression)

Вычисляет дисперсию выражения nExpression. Величина дисперсии равняется среднему квадратичному отклонению, возведенному в квадрат. Чем меньше дисперсия, тем меньше значения отклоняются от среднего. При вычислении учитываются только записи, попадающие в диапазон Scope и/или удовлетворяющие условиям FOR или WHILE.

IN nWorkArea| cTableAlias

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

Expand imageЗамечания

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

Expand imageПример

  CopyCode imageCopy Code
CLOSE DATABASES
OPEN DATABASE (HOME(2) + '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

Expand imageСмотрите также