Формулы для расчетных столбцов (или условий в диалогах)

<< Click to Display Table of Contents >>

Navigation:  »No topics above this level«

Формулы для расчетных столбцов (или условий в диалогах)

 

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

 

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

 

Кроме расчетных столбцов, формулы используются в разнообразных диалогах, например, когда какие-либо операции необходимо выполнить не со всеми выработками (интервалами), а только с теми, значения в которых отвечают некоторым условиям, вычисляемым по формуле.

 

Для расчетных столбцов формула для расчета задается (и редактируется) в диалоге "Формула для расчета", вызываемом при выборе во всплывающем меню пункта Расчетный столбец…

Этот диалог также можно вызвать при добавлении нового столбца из диалога "Добавление столбца таблицы (поля БД)", нажав на кнопку Параметры вычисляемого столбца.

 

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

 

В формуле могут быть использованы следующие элементы:

Ссылка на другой столбец той же таблицы, в которой находится расчетный столбец (для каждой строки расчетного столбца будет браться значение из той же строки столбца, на который имеется ссылка в формуле). Ссылка в формуле записывается как название столбца, заключенное в квадратные скобки. Например, [Au].

 

Ссылка на столбец из другой таблицы. Такого рода ссылки не могут напрямую использоваться в формуле, но могут быть использованы в качестве аргумента специально предназначенных для этого функций, вызываемых внутри формулы. Ссылка на столбец из другой таблицы записывается в виде названия таблицы и названия столбца, разделенных восклицательным знаком и заключенных в квадратные скобки. Например, [Опробование!Zn].

 

Знаки арифметических операций '+', '-', '*', '/'.

 

Знаки операций сравнения:

'>', '>='       – 'больше', 'больше или равно';

'=='              – 'равно' (два знака равенства подряд);

'!='                                - 'не равно';

'<', '<='       - 'меньше', 'меньше или равно'.

 

Знаки логических операций:

'!'                   - 'НЕ';

'||'                               - 'ИЛИ';

'&&'                            - 'И'.

 

Скобки:

'(', ')'             – круглые скобки – используются как в обычных арифметических выражениях с целью изменения порядка выполнения операций, а также в качестве ограничителей параметров функций;

'{', '}'             - фигурные скобки – используются в качестве ограничителей оператора 'ЕСЛИ';

'[', ']'             - квадратные скобки – используются в качестве ограничителей для ссылок на другие столбцы.

 

Оператор 'ЕСЛИ', записывающийся следующим образом:

ЕСЛИ{ <УСЛОВИЕ>; <выражение, выполняемое если результат вычисления УСЛОВИЯ не равен нулю>;  <выражение, выполняемое если результат вычисления УСЛОВИЯ равен нулю> }

 

Если при выполнении операции сравнения получается логическое значение ЛОЖЬ, то результатом этой операции будет значение 0; если ИСТИНА, то 1.

 

 

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

Например:

ИНТЕРВ_АЗИМУТ () – вызов функции без параметров

ЕСТЬ_ПУСТО ( [Au] )- вызов функции с одним параметром

ДР_ТАБЛ_СРЕДНЕВЗВ_1  (  [Опробование!Ag],  0.6,  0.0 ) - вызов функции с тремя параметрами

 

 

Константы:

- числовые - в виде чисел (с десятичной точкой);

- текстовые – любые символы, ограниченные кавычками, например, "текст".

 

В целом, построение формулы весьма схоже с тем как это реализовано в электронных таблицах Excel.
Следует обратить внимание на следующие отличия формул DIGIMINE от формул Excel :
- в начале формулы DIGIMINE не ставится знак "равно";
- выражения в операторе ЕСЛИ всегда разделяются точкой с запятой, а параметры функций всегда разделяются запятой;
- в операторе ЕСЛИ используются не круглые, а фигурные скобки (чтобы было проще работать при большом количестве скобок).

 

 

 

Между операторами и операндами в формуле можно вводить произвольное количество пробелов.

Формула может размещаться на нескольких строках, в т.ч. допускаются пустые строки внутри формулы.

В формуле можно вставлять комментарии, начинающиеся с двух подряд идущих символов 'косая черта' (как знак деления). Все символы после двух таких символов и до конца строки считаются комментарием и в формуле не участвуют.

 

В некоторых случаях для одного и того же столбца в разное время используются разные формулы. Например, если столбец используется для определения видимости выработок, то в нем периодически могут меняться расчетные формулы. Вместо того, чтобы каждый раз вводить новую формулу, удобнее ввести несколько формул, отметить как комментарии строки с неиспользуемыми формулами, оставив "открытой" только одну формулу:
//   [Тип] == "Скважина"
[Тип] == "Скважина" ||  [Тип] == "Канава"
//   [Тип] == "Скважина"  &&  [Длина выработки] > 300

 

 

Особенности обработки "пустых" значений

 

Если в клетке таблицы записано "пустое" значение, то возникает вопрос, как использовать такое значение при вычислениях в других расчетных столбцах?

 

Для столбцов с текстами "пустое" значение это просто отсутствие текста и проблем с этим не возникает (исключение составляет столбец с названием выработки, в который программа не позволяет записать "пустое" значение). В формулах пустое текстовое значение задается двумя кавычками подряд, без пробелов между ними. Например, если требуется сравнить значений текстового столбца Название пробы с пустым значением, то записывается [Название пробы] == "".

 

Для столбцов, предназначенных для хранения чисел, по умолчанию, при вычислениях вместо "пустого" значения подставляется 0. Например, умножение какого-либо значения на "пустое" значение в результате даст 0. При операциях сравнения вместо "пустого" значения по умолчанию также подставляется 0. По этой причине нельзя при помощи оператора == узнать, записано ли в клетке "пустое" значение.

Чтобы узнать, записано ли в клетке "пустое" значение, используется функция ЕСТЬ_ПУСТО ( ).

Для занесения "пустого" числового значения в клетку используется функция ПУСТО ( ).

 

Не используйте функцию ПУСТО ( ) в операторах сравнения, т.к. в этих случаях вместо "пустого" значения будет подставлен 0. Функция ПУСТО ( ) используется ТОЛЬКО для занесения "пустого" значения.

 

Для добавляемых пользователем редактируемых столбцов имеется еще одна возможность обработки "пустых" значений. Для таких столбцов имеется специальный параметр При расчетах пустое значение заменять на … (см. диалог Параметры столбца), в котором пользователь по желанию может задать число (в том числе и 0), на которое при вычислениях заменять "пустые" значения из этого столбца. Что дает такая возможность ?

Во-первых, заменять при расчетах на некоторое число, отличное от нуля (например, некоторое фоновое содержание).

Во-вторых, при некоторых расчетах по встроенным алгоритмам, "пустые" значения специально не заменяются автоматически на нули. Например, при расчете рудных интервалов, "пустые" значения  не заменяются на нули (по умолчанию), так как в этом расчете "пустой" интервал интерпретируется как разрыв выработки. Однако пользователь может задать замену "пустых" значения на заданное числовое значение и тогда на вход расчета таблицы с рудными интервалами будут поданы интервалы, не имеющие "пустых" значений.

 

 

Значение ОШИБКА!

В том случае, когда при вычислениях возникает ошибка (например, деление на 0 или попытка извлечения квадратного корня из отрицательного числа), в клетку таблицы записывается специальное значение, которое отображается в таблице в виде текста ОШИБКА!. Использование такого значения в других вычислениях также приведет к получению значения ОШИБКА!.

Чтобы узнать, записано ли в клетке значение ОШИБКА!, используется функция ЕСТЬ_ОШИБКА (  ).

 

 

 

Примеры формул:

 

1. Вычисление коэффициента, с помощью которого стволовую мощность интервала можно перевести в истинную мощность (простейший случай, когда не учитывается азимут простирания рудного тела):

ЕСЛИ {   ЕСТЬ_ПУСТО ( [Угол встречи с р.т.] ) ;  ПУСТО ()  ;  SIN_ГРАД ( [Угол встречи с р.т.] )  }

 

Формула вводится для столбца [Коэф. мощн.].

В столбце [Угол встр. с р.т.] записан угол встречи с рудным телом.

 

 

2. Вычисление содержания золота на основе трех столбцов с исходными содержаниями, полученными разными методами (пробирный анализ, спектральный, атомно-абсорбционный).

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

 

Исходные столбцы имеют тип (формат)  данных "Спецтекст фиксированной длины для дробных чисел", т.е. в них могут быть не только числовые значения, но и некоторые (занесенные в список допустимых значений) текстовые значения, каждому из которых поставлены в соответствие числовые значения, используемые при расчетах. Например, задано, что текст "< 0.5" при расчетах заменять на 0.25.

 

В данном примере внутри формулы имеются комментарии.

ЕСЛИ

{  

  // Есть ли число в одном из трех столбцов ?

  ЕСТЬ_ЧИСЛО ( [Auпр] )   ||    ЕСТЬ_ЧИСЛО ( [Auсп] )    ||    ЕСТЬ_ЧИСЛО ( [Auаб] )  ;

 

  // Хотя бы в одном столбце есть число

  ЕСЛИ {  ЕСТЬ_ЧИСЛО ( [Auпр] ) ;     [Auпр];      ЕСЛИ {   ЕСТЬ_ЧИСЛО ( [Auсп] ) ;  [Auсп]; [Auаб] }   } ;

 

  // Ни в одном столбце нет чисел (либо пусто, либо тексты)

   ЕСЛИ {   ЕСТЬ_ПУСТО ( [Auпр] ) ;    ЕСЛИ {   ЕСТЬ_ПУСТО ( [Auсп] );   [Auаб];   [Auсп] } ;     [Auпр]  }

}

 

 

 

 

3. Имеется расчетная таблица, в которой рассчитаны рудные интервалы по борту 3. В качестве исходных интервалов использовались интервалы с результатами химических анализов по свинцу и цинку (рудные интервалы по сумме свинца и цинка).

 

Необходимо в полученных рудных интервалах расчетной таблицы подсчитать содержание свинца и содержание цинка по результатам рентген-радиометрического каротажа (из таблицы Опр РРК).

Кроме того, необходимо вычислить сумму полученных по РРК содержаний Pb и Zn.

 

Формула для столбца Pb РРК: ДР_ТАБЛ_СРЕДНЕВЗВ_1 (  [Опр РРК!РРК Pb],  0.5,  ПУСТО ()  )

Формула для столбца Zn РРК: ДР_ТАБЛ_СРЕДНЕВЗВ_1 (  [Опр РРК!РРК Zn],  0.5,  ПУСТО ()  )

Формула для столбца РРК Pb+Zn: [РРК Pb] + [РРК Zn]