FAQ по переменным в Qlik Sense/Qlik View

Q: Просьба помочь с проблемой в qlikview.
Есть табличка (поле) состоящая из двух значений «неделя» и «месяц» — загружаю, как load inline
есть переменные, которые зависят от значения данного поля: if(period = ‘неделя’, …, …)
Делаю список на листе по этому полю, чтобы можно было выбирать период отчета.

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

более того, если делаю простое текстовое поле с формулой =$(period), то оно тоже не пересчитывается при изменении выбора периода…

в чем может быть проблема? и почему данные в таблице нормально пересчитываются?

версия qlikview 11.20…

A: Чтобы исключить подобные проблемы называйте переменные с префиксом, например vPeriod.

Q: Есть календарь типа [Год,Месяц,День,Дата..]

A: Можно использовать две переменные.
Выражение будет несложным.

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

Прочитала все темы с тегом «переменные» на форуме, возник вопрос, действительно ли через обозреватель переменных можно задать их, и они будут статичны?

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

С прологом закончила, теперь к сути задачи.

В LFL у меня реализовано сравнение периодов. Текущая неделя с прошлой, текущий месяц 2015 года с аналогичным, только 2014. Приложение работает, но костыльно — мне приходится править данные в формулах.

Переменные у меня загружены при помощи today() и её вариаций (today()-1, today()-2 & etc.) Но при ежедневном обновлении дата у данных переменных, как вы понимаете, сдвигается. Поэтому мне приходится её править.

Календарь содержит у меня такое поле, как номер недели (вложение 1). Каким образом можно организовать цикл, чтобы программа сравнивала номер недели дат с текущей, и суммировала только те дни, которые соответствуют ей? Для предыдущей то же самое нужно (полагаю, week()-1).

И как организовать такую функцию, как MonthStart() и MonthEnd()? Читала, но в голове картинка не складывается. Нужны начальные и конечные даты каждого месяца. Заданы должны быть статично, естественно.

Прописать их в скрипте не проблема, но в выражениях такие переменные у меня не работают.
1 нерабочий вариант:
Код:
SET vDate1 = «‘20.10.2015 00:00:00’,’DD.MM.YYYY HH24:MI:SS'»;

2 нерабочий вариант с MakeDate, Date. В выражениях с Set Analysis такие переменные бесполезны в моём случае. Причину так и не выявила.

C today() формулы работают.

A: Если в переменной выражение — оно будет пересчитываться если задано через LET.
Не совсем понял, какие именно календарные переменные требуется задавать статично.
Вроде бы хорошо, что переменные обновляются, и «вчера» всегда соответствует вчерашнему дню относительно даты актуальности данных приложения.
Начало и конец месяца отрабатывают как обычно. Возвращают начальные и конечные даты.
В течении месяца всегда будут возвращать одинаковые значения.

Рекомендую создать отдельное приложение с календарем для теста и прогнать в нем все функции

Q: подскажите пожалуйста, как сделать что бы переменная заработала в выражении? В частности, меня интересует в выражение цвета фона.

A: похоже, лишняя скобка после переменной. Попробуйте взять в кавычки ‘$(v1)’.

Q: Добрый день!Необходимо прописать переменную (пути размещения файла QV),чтобы при переносе приложения на другой стенд я мог поменять только путь для переменной,а все остальное автоматически подтягивалось.
Возможно ли такое сделать?

A: Например,
Код:
Set QVD_PathPublic=’D:\QV\Data\qvd\’;

а дальше
Код:
LOAD *
FROM [$(QVD_PathPublic)DataFile.qvd] (qvd);

Q:Добрый день, как при вычислениях заменить запятую на точку?

A: Обратите внимание на системные переменные которые прописываются в скрипте по умолчанию при создании нового приложения.
Один из параметров — DecimalSep

Q: Добрый день, возможно ли производить вычисления в переменных?
К примеру v1= Столбец1-Стобец2?

A: В том виде как вы указали — нет.
То есть когда работает скрипт между запросами load мы можем обращаться к данным только через peek()
Но можно использовать расчет в переменной с параметрами при исполнении запроса.
Например здесь — http://qlikview-forum.ru/qvf/index.php/topic,471.msg834.html#msg834

Q: Подскажите, пожалуйста, где можно почитать про переменные в QlikView?

В частности: что это, зачем они нужны, где могут использоваться и как их использовать?

A: Интересную тему Вы затронули, одним сообщением и не ответишь.
Официальная документация довольно скупа.

Для аналитика (не программиста) думаю интересны некоторые из них.
Самое элементарное применение — хранение значений для вывода в текстовых элементах.
Также, с целью облегчения работы с выражениями, для хранения части выражений. Например, чтобы не вносить изменения в несколько созданных объектов удобнее изменить одну переменную, которая используется в выражениях или в других переменных.
И т.д. и т.п.

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

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

Грубо говоря я загрузил из Excel несколько таблиц, в одной драйверы по количеству, в другой драйверы и расценки, в диаграмме выражение = сумма произведений количества на цену, хочу сделать количественные показатели драйверов переменными и создать объекты «ползунки», для проведения wot if анализа.

A: Как передать переменные из одного приложения в другое.

Пример формирования переменных (запрос даты начала периода к БЭСТ-5):
Код:
load MakeDate(left(param1,4),mid(param1,5,2),Right(param1,2)) as ‘curr_beg’;
SQL SELECT param1 FROM `ini_global_v` WHERE name=’CURR_BEG’;

LET QueryDate=today();
LET StartDate = peek(‘curr_beg’);

Формируем таблицу переменных и их значений и выгружаем ее в формат qvd.
Код
Variables:
LOAD * INLINE [
Variable_name, Variable_value
StartDate,$(StartDate)
QueryDate,$(QueryDate)
];
store * from Variables into Variables.qvd (qvd);

Для загрузки переменных в другом приложении:

Код:
Variables:
LOAD * FROM
$(QVD_Path)Variables.qvd (qvd);

FOR i=0 to noofrows(‘Variables’)-1
LET var_name= peek(‘Variable_name’,i,’Variables’);
LET $(var_name) = peek(‘Variable_value’,i,’Variables’);
NEXT i

Все просто, основная роль у функции peek(). Как следует из описания:
peek(fieldname [ , row [ , tablename ] ] )

Возвращает содержимое fieldname в записи, указанной с помощью row внутренней таблицы tablename. Данные выбираются из ассоциативной базы данных QlikView.

Найти решение у бизнес-партнера QlikTech (QlikView) в России.

Форум разработчиков QlikView и Qlik Sense. Получите ответы на все вопросы по QlikView и Qlik Sense!

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий

64 queries in 0,197 seconds
Website nonton bokep jepang