Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Всем привет.
Подскажите, есть ли возможность игнорировать в set analysis все фильтры (отборы) по полям кроме одного указанного.
Например, если я хочу при суммировании поля Колво игнорировать выбор по полю ТипДокумента
я напишу так:
sum({<ТипДокумента=>}Колво)
а вот если я хочу игнорировать все выборы кроме ТипДокумента есть ли такая возможность?
Согласен, спасибо за внимательность!
Тогда формула немного усложнится из-за того, что придется "на лету" формировать не только набор множества, а сам модификатор, включая фигурные скобки и оператор перед ними. В остальном - логика та же.
= Sum( {1 < ТипДокумента = $(=If( IsNull( GetFieldSelections(ТипДокумента )), '{*}',
If( Index( GetFieldSelections(ТипДокумента), 'NOT') > 0,
'- {' & chr(39) & Replace( Replace(GetFieldSelections(ТипДокумента), 'NOT ', ''), ', ', chr(39) & ',' & chr(39)) & chr(39) & '}',
'{' & chr(39) & Replace( GetFieldSelections(ТипДокумента), ', ', chr(39) & ',' & chr(39)) & chr(39) & '}'))) > } Колво)
Идея расчета проста: если результатом GetFieldSelections() является перечисление значений попавших в отбор, то формируется модификатор вида: {'Значение1', 'Значение2'....}, т.е. включающего выбранное множество значений.
Если же результатом GetFieldSelections() является перечисление значений, исключенных из отбора (т.е. появляется оператор NOT), то формируется модификатор вида: - {'Значение1', 'Значение2'....}, т.е. со знаком "минус", т.е. множество значений, исключающее выбранные.
Пример с пошаговым расчетом в объектах приложения - в аттаче.
Можно, например, так:
=Sum( {1 < ТипДокумента = {$(=If( IsNull( GetFieldSelections(ТипДокумента )), '*', GetFieldSelections(ТипДокумента )))} > } Колво)
Выражение получается не всегда правильное (( вот если значения строковые, то GetFieldSelections вернет для типов документа например: {продажа,реализация,списание} а надо {'продажа','реализация','списание'} или я где то что-то упустил, еще может вернуть 18of31 или NOT 18,19 и тогда выражение будет ошибочным (
буду благодарен если подскажете универсальный способ
Согласен, спасибо за внимательность!
Тогда формула немного усложнится из-за того, что придется "на лету" формировать не только набор множества, а сам модификатор, включая фигурные скобки и оператор перед ними. В остальном - логика та же.
= Sum( {1 < ТипДокумента = $(=If( IsNull( GetFieldSelections(ТипДокумента )), '{*}',
If( Index( GetFieldSelections(ТипДокумента), 'NOT') > 0,
'- {' & chr(39) & Replace( Replace(GetFieldSelections(ТипДокумента), 'NOT ', ''), ', ', chr(39) & ',' & chr(39)) & chr(39) & '}',
'{' & chr(39) & Replace( GetFieldSelections(ТипДокумента), ', ', chr(39) & ',' & chr(39)) & chr(39) & '}'))) > } Колво)
Идея расчета проста: если результатом GetFieldSelections() является перечисление значений попавших в отбор, то формируется модификатор вида: {'Значение1', 'Значение2'....}, т.е. включающего выбранное множество значений.
Если же результатом GetFieldSelections() является перечисление значений, исключенных из отбора (т.е. появляется оператор NOT), то формируется модификатор вида: - {'Значение1', 'Значение2'....}, т.е. со знаком "минус", т.е. множество значений, исключающее выбранные.
Пример с пошаговым расчетом в объектах приложения - в аттаче.
Кстати, в зависимости от ситуации, может оказаться более простым решением использование "Альтернативных состояний".
В частности, на закладке "Альтернативное состояние" приведен пример реализации.
Идея понятна. Спасибо за развернутый ответ
Сергей, мне понравилось изящное решение через Alternate State.
Но вот другой вариант с GetFieldSelections() не рекомендовала бы.
Если выбраны все значения, то результат фунции = 'ВСЕ'. Но главная проблема появляется, когда выбрано больше 6ти значений и еще осталось много невыбранных. Тогда результат, например, будет '7 из 24', без явного перечисления значений.
Я предлагаю другой вариант решения, взятый из недр нашего коммьюнити (http://community.qlik.com/docs/DOC-1334).
Он основан на автоматизации создания строки перечисления всех полей, в которых выборку надо игнорировать, с помощью системных полей $Field или $Table. И которой с помощью знака 'минус' исключаются поля и таблицы, где фильтры нам нужны.
=sum({$<[$(=Concat({1<$Field-={'ТипДокумента'}>}distinct $Field,']=,[')&']=')>} Колво)
Спасибо за разные варианты решения ) действительно к одной и той же цели можно прийти разными путями ))
Похоже, коллеги немного усложнили в ответах . Попробуйте так:
sum({1<ТипДокумента=$::ТипДокумента>} Колво)
Можно не проверять результат, который выдает функция GetFieldSelections(), если задать параметр максимального числа выводимых значений: GetFieldSelections(ТипДокумента, ',', 'all')