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!
RSS
4 декабря 2017
gromych 

Опубликовано в рубрике