Использование фидера на основе условия в TM1
Может ли элемент подаваться на основе условия if?
Ниже приведен расчет правила, используемый для оценки значений проверки.
[{'AOP_v1','Forecast_v1'},'Validation', 'Rate'] = N:
IF(ROUNDP(['Phasing Total', 'Rate'] * 100, 5) = 100 % ROUNDP(['Phasing Total', 'Rate'] * 100, 5) = 0, STET, 1);
Есть ли способ, которым я могу кормить [{'AOP_v1','Forecast_v1'},'Validation', 'Rate'] с помощью ['Phasing Total', 'Rate'] только когда..
ROUNDP (['Итоги фазирования', 'Скорость'] * 100, 5) = 100 % ROUNDP(['Итоги фазирования', 'Скорость'] * 100, 5) = 0
?
1 ответ
Вы можете создавать условные фидеры, используя функцию DB() в правой части фидера. Вместо того, чтобы жестко кодировать имя куба в формуле БД, вы используете функцию If(), которая возвращает имя куба, который должен быть передан, если логическое условие имеет значение True, или пустую строку, если это не так:
['FeedFrom']=>DB(IF(YourLogicalTest,'NameOfCube',''), !Dim1, !Dim2, 'Element');
Очевидно, что это просто псевдокод; функция DB может использовать различные комбинации текущих ссылок на элементы (операторы!) и жестко закодированных имен элементов. Ключевым моментом, однако, является то, что если тест If() возвращает пустую строку, то, очевидно, функция DB() не определяет ничего для подачи.
Я бы рекомендовал прочитать эту статью IBM о правилах и фидерах в целом. Эта ветка на TM1Forum содержит обсуждение того, следует или не следует использовать условные фидеры или найти другой путь.
Еще один фактор, который необходимо учитывать после даты этой ветки; в более новых версиях TM1 вы можете использовать многопоточную загрузку, чтобы увеличить время загрузки в память. Однако, если вы используете условные питатели, вам придется вернуться к однопоточной нагрузке. Это может оказать незначительное влияние на вас, или это может быть существенным.