Неофициальный форум пользователей Qlik Sense & Qlikview

Для разработчиков => Вопросы по Qlik Sense & QlikView => Тема начата: Софья от 03 декабря 2015, 06:24:05

Название: Приостановление пересчёта данных
Отправлено: Софья от 03 декабря 2015, 06:24:05
Ещё раз доброе утро.

Появился запрос на приостановление пересчёта данных. Можно ли как-то реализовать такую функцию в QV?

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

Нельзя ли где-нибудь поставить галочку "Отложить обновление макета", например, как в OLAP? Чтобы они задали все условия, а только после программа пересчитала их.

На деле действительно неудобно, когда ты выбираешь одно условие - тут же ждёшь пересчёт, и так подряд раз 7.

Заранее благодарна всем.

Название: Re: Приостановление пересчёта данных
Отправлено: bibis от 03 декабря 2015, 09:45:45
Первое,что приходит в голову- создать для пользователей  "рычажок", т.е. 2 текстовых объекта, "выборка","расчет" , устанавливающие некую переменную run в позиции ='{1}' и ='{$}', соответственно.
Ну и дальше во всех объектах прописывать  выражения ввиде
sum($(run) sales) .

далее пользователь жмет : 'выборка', выставляет все фильтры, при этом выражения не пересчитываются, затем жмет "расчет"
Название: Re: Приостановление пересчёта данных
Отправлено: Софья от 03 декабря 2015, 11:00:53
Я правильно понимаю Вас, что создаётся одна переменная? А как ей присвоить 2 значения?

И как прописывать это в объектах? Никаких ассоциаций не возникает в голове, как это будет выглядеть.
Название: Re: Приостановление пересчёта данных
Отправлено: bibis от 03 декабря 2015, 11:41:36
 Создаем переменную run .
Создаем 2 текстовых объекта. Выбираем свойства/действие/добавить/внешний/установить переменную,
в поле "переменная" пишем run
в поле значение, в первом объекте ='{$}'  , во втором ='{1}'.

Далее в каждом  выражении дописываем , $(run).
Допустим если у вас в диаграмме считалось выражение Sum(sales) , то теперь вам нужно его переделать в
Sum($(run) sales)
Название: Re: Приостановление пересчёта данных
Отправлено: Софья от 03 декабря 2015, 12:18:27
Теперь поняла, благодарю.

Но ругается, когда вписываю эту переменную в поле. К слову, все формулы у меня трёхэтажные.

Название: Re: Приостановление пересчёта данных
Отправлено: bibis от 03 декабря 2015, 12:32:38
Ну на то что ругается, внимания обращать не нужно, подсветка синтаксиса в qv кривая, считает правильно главное , только что проверил.

С формулами, ничего не поделать, на будущее советую основные куски выражений, которые часто используете так же загонять в переменные.
В данном случае могу посоветовать только параметры/обозреватель выражений и там поделать что-то вроде : 'заменить всё' Sum(  на Sum($(run) , avg( на avg($(run) и т.д.
Название: Re: Приостановление пересчёта данных
Отправлено: Софья от 03 декабря 2015, 12:56:05
Спасибо за совет, на досуге нужно будет заняться.

Сделала всё, как Вы сказали. Ничего не изменилось. И ещё хотела спросить, к подобным объектам, как во вложении, нужно что-то дописывать. У меня много конструкций с if, объектов-списков, где прописаны различные условия в выражениях.
Название: Re: Приостановление пересчёта данных
Отправлено: bibis от 03 декабря 2015, 01:04:39
Цитата: Софья от 03 декабря  2015, 12:56:05  
Сделала всё, как Вы сказали. Ничего не изменилось.
А нажали, хоть на один из созданных текстовых объектов, чтоб переменная инициализировалась?
Какую ошибку выдает?
И создайте текстовый объект с текстом =$(run) , напишите,что он показывает при переключении.

Прописывать нужно в каждой функции аггрегирования (sum,avg,concat,max и т.д.), т.е. если у вас например в выражении  считается одна из 2х формул в зависимости от условия if, то прописать нужно в обоих, то же самое и при вложенном аггрегировании с aggr
Название: Re: Приостановление пересчёта данных
Отправлено: Софья от 03 декабря 2015, 01:12:47
По-моему, я Вас неправильно понимаю. Создала объект, где прописала переменную, как Вы сказали. Нужен ещё тестовый объект? Или в этом же объекте вместо 1 и 2 что-то нужно написать?

Только сейчас задумалась, а в скрипте её нужно как-то обозначать?
Название: Re: Приостановление пересчёта данных
Отправлено: bibis от 03 декабря 2015, 01:17:09
Тестовый, но вообще по скрину - всё правильно.
Попробуйте на какой-нибудь простой формуле отработать, понажимав на созданные объекты, убедившись, что значение считаются, а потом уже в 3 хэтажные аккуратно дописывать.
Название: Re: Приостановление пересчёта данных
Отправлено: Софья от 03 декабря 2015, 01:26:27
Цитата: bibis от 03 декабря  2015, 01:04:39  
И создайте текстовый объект с текстом =$(run) , напишите,что он показывает при переключении.

А здесь Вы имели в виду что? Нужны ли ещё тестовые объекты? Просто не сталкивалась с подобной конструкцией, поэтому простите моё обилие вопросов.
Название: Re: Приостановление пересчёта данных
Отправлено: bibis от 03 декабря 2015, 02:22:35
Ну он нужен,чтоб можно было в живую посмотреть как меняется переменная. Но судя по скринам-всё с ней должно быть в порядке и можно не создавать.

В скрипте задавать не нужно, достаточно в обозревателе переменных В общем наделал скринов, думаю будет понятнее.
Название: Re: Приостановление пересчёта данных
Отправлено: Софья от 04 декабря 2015, 10:11:34
Смотрю на Ваши скрины - у меня всё идентично. Прописала в текстовом объекте простую функцию суммирования количества. Оно так же изменяется, как и данные в таблице сводной. Созданные объекты с переменной никак не влияют на выборку.

Не приложу ума, в чём проблема.
Название: Re: Приостановление пересчёта данных
Отправлено: bibis от 04 декабря 2015, 10:44:32
Мистика какя-то.
Попробуйте тогда "в лоб" . Установить переменную в 0 и 1 (вместо ='{$}', ='{1}') .
И прописывать в выражении 
if( $(run)=1, sum(exp) , sum({1}exp) )
Название: Re: Приостановление пересчёта данных
Отправлено: Софья от 07 декабря 2015, 05:22:08
Цитата: bibis от 04 декабря  2015, 10:44:32  
Мистика какя-то.
Попробуйте тогда "в лоб" . Установить переменную в 0 и 1 (вместо ='{$}', ='{1}') .
И прописывать в выражении 
if( $(run)=1, sum(exp) , sum({1}exp) )

Можете пояснить, что за условия после run? Не сталкивалась с использованием "exp". И что дают фигурные скобки единице?
Название: Re: Приостановление пересчёта данных
Отправлено: bibis от 07 декабря 2015, 09:06:53
Exp это я так обозначил произвольный текст  ;D

{1} означает игнорирование выборок , {$} наоборот, посчитать с учетом выборок, так же условие {$} предполагается по умолчанию,поэтому его можно опустить, как в предложенном мной примере.

Таким образом выражение будет посчитано 2я способами, без учета выборок при run=1 и с учетом, при run=0 как я понял именно это и требуется.
Название: Re: Приостановление пересчёта данных
Отправлено: Софья от 09 декабря 2015, 06:11:16
Bibis, сделала то, что Вы написали. Не работает. Что-то, видимо, я не учитываю.

Не могли бы Вы мне дать источники, где подобная конструкция описывается? Если они есть, конечно. Может, прочитаю и пойму, где допускаю ошибку.
Название: Re: Приостановление пересчёта данных
Отправлено: bibis от 10 декабря 2015, 10:03:31
Вряд ли где-то она описывается, учитывая, что я её придумал, прочитав топик :D
Есть предложение, вышлите какой-нибудь документ, где вы пытаетесь проделать описываемые действия, я его скачаю и посмотрю в чем дело.