FAQ по серверу Qlik Sense/Qlik View

Q: Изложу проблему, может кто-то сталкивался и сможет подсказать варианты её решения.

В компании активно используется QlikView, есть сервер на котором крутятся различного рода приложения. Но как это часто бывает, приложений становится больше, данные также прирастают и мощности сервера уже не позволяют с былой резвостью получать информацию.

Что уже имеется: еще один физический сервер, на который можно перенести часть приложений со всеми цепочками загрузок. К счастью разделить приложения на 2 части можно, модули загрузки и обработки данных у этих частей пересекаться не будут.

Но покупать еще одну лицензию QV Server желания у компании пока нет. Вот здесь и хотелось бы получить консультацию. Как организовать кластер? По сути 2 физических сервера, на мощностях которых будут крутиться приложения расположенные конкретно на них, но чтобы планировалось все и доступ к приложениям осуществлялся с одного QV Server.

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

p/s/ сервер в компании не Publisher.

A: Могу предложить следующую схему:
1. Сервер с конечными приложениями QlikView (бизнес-приложения) — на котором не происходит никакой загрузки данных из внешних систем и никаких предрасчетов. Здесь запускаются только приложения пользователей QlikView.
2. Куча серверов для расчетов — на них ставится QlikView Personal Edition. НО: ни в коем случае нельзя код обработки данных располагать в приложениях, а делается это так. Код пишется в файлы, которые инклудятся одним файлом, а этот один файл инклудится в QlikView приложение. С помощью батников запускается с центрального QlikView сервера параллельный расчет остальных приложений на других серверах, а данные заливаются в расшаренную папку на центральном серваке.

Тыдым, профит: 1 лицензия на сервер, масштабирование производительности по предрасчетам, страхование себя от поломки предрасчетов (т.к. все скрипты в текстовых файлах).

Q: Вот такая ошибка при открывания файла(screen ниже). Что можно сделать?
Это просто открыл файл.Это открыл файл через сервер.
Это просто открыл файл.

A: Заочно сложно лечить больного 🙂 Однако, как вариант, попробуйте удалить .meta и .shared файлы из папки доступа на сервере и снова опубликуйте Ваш файл .qvw.

Q: Как-то непонятно работает кэш сервера QlikView для пользователя. Создаю документ, кладу в каталог данных сервера, на странице документ виден, дата изменения новая. Но если открыть его, то открывается документ без внесенных в него изменений (новый столбец). Разные браузеры — хром и IE, разные компы, но тот же юзер — документ виден как необновленный. Если дать доступ новому пользователю к этому документу, то во всех компах и в любом браузере данные обновленные, т.е. новый столбец виден.
Перезапуск как отдельных служб, так и сервера полностью проблему не решает.
Web-сервер IIS, Win2008r2, QV 11.0.11414.0.

Кто знает, как избавиться от этой проблемы?

A: Можно попробовать в Access Point нажать на ссылку «view details», находящуюся внизу блока выбора документа и далее в появившемся окне нажать на кнопку «Remove Last Document State», которая удаляет последнее сохраненное на сервере состояние.

Q: Решили перейти с десктопа на сервер. Но столкнулись с детской проблемой — настройкой обновления данных в автоматическом режиме
На серевере установлен QV Server, в приложении Desktop созданы файлы отчетов, и размещены в розшаренных папках, к которым предоставлен доступ группам пользователей (насколько правильный такой подход — не уверен, пока только вникаем:) но доступ через http предоставляется корректно
Но не можем найти настройку автоматического обновления данніх отчетов с иточника (в QlikView Management Console )
Где находится этот пункт меню?

A: Тогда Source Documents и создавайте шаблон для обновления. там всё через конструктор, должно быть интуитивно понятно. Также очень рекомендую пользоваться help-ом в верхнем правом углу, там довольно подробно.

Q: Здравствуйте, у меня такой вопрос появился: Можно ли посмотреть какие пользователи в данный момент работают в системе, и как долго?( Кликом пользуемся недавно, ещё многого не знаю, но, вроде, говорили можно, но не могу найти где)

A: На официальном сайте есть


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

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

FAQ по расширениям Qlik Sense/Qlik View

Q: Подскажите, пожалуйста, возможно ли в программе Qlik Sense сделать визуальное представление последовательности событий подобно варианту

представленному в Google Analytics? Стоит задача сделать визуализацию путей, которые пользователи совершают на сайте. Данные для загрузки в программу Qlik Sense изначально собираются в Excel файле: в столбце — перечень пользователей, в строках — перечень событий. Нужно представить в виде наглядной схемы или по типу flow chart, но в программе Qlik Sense подходящего инструмента не нашла. Карта дерева Qlik Sense, на первый взгляд, не подходит для визуализации множества событий — ее можно использовать в данном случае всего на несколько «ветвей». Как решить данную задачу с помощью Qlik Sense?

A:Поищите на Qlik Branch что-нибудь подходящее.

Q: Подскажите, как в QlikSense построить МАТ? То есть сравнивать любые 12 месяцев с другими 12 месяцами. У меня есть для этого загруженная табличка, в которой имеются: год, месяц, квартал, сумма, продукт.

A: скачайте библиотеку QVC (Qlikview Components) от Rob Wunderlich.
Функция Qvc.Calendar может помочь освоиться в работе с периодами.

Q: подскажите как в Qlik Sence построить диаграмму Ганта

A: Диаграмма Ганта в Qlikiview https://www.qlikcommunity.org/docs/DOC-3427
Расширение для Sense — http://branch.qlik.com/#/project/56728f52d1e497241ae697ef

Q: Изучаем и пробуем расширение GeoQlik (триал-версию) для визуализации аналитики на карте. Не получается настроить «Gejgraphic definition» по X/Y coordinates. В руководстве пользователя есть сноска:
Note: In the QlikView script, you must choose the numeric format for the X/Y coordinates.
Вероятнее всего, это означает, что в редакторе скриптов на закладке «main» необходимо установить значения предопределенных переменных, которые определят формат координат?
Какие это переменные и какой формат лучше задавать?

A: Но, возможно координаты следует задавать исключительно через точку.
Попробуйте поставить точку в качестве разделителя
Код:
SET DecimalSep=’.’;

Q: Коллеги ни как не получается, сделать кликабельными ссылки внутри отчета, когда загружаешь его в облако. Ни кто не сталкивался?

A: В текущей версии такой возможности нет.
Посмотри по расширениям, здесь, http://branch.qlik.com/projects/forumdisplay.php?6-Projects

Q: Подскажите NPrinting для QlikView это платное приложение или где-то можно скачать бесплатную версию? Пользуюсь пробной версией QlikView.

Можно ли как-то создавать отчеты средствами QlikView?

A: Конечно, платное приложение.
Отчеты, в привычном понимании, на Qlikview PE создать не получится.
Выгрузка в табличный формат может помочь создать требуемый отчет в сжатые сроки.
Думаю, после развертывания полноценной версии Qlikview бумаги на отчеты потребуется намного меньше.
Идеология работы с информацией другая, но это мое личное мнение.

В Qlik Sense, даже в бесплатной версии (но без публикации) есть очень интересный функционал повествований (истории) для создания презентаций на основе анализа данных и объектов приложения.

P.S. Для работы на бесплатной версии создайте набор таблиц, часто требуемых в формах отчетности, и выгружайте по мере необходимости в табличный формат (Excel или Calc) с последующим оформлением привычном образом.

Q:Плиз, как делаются кнопки с годами, вот как в этом посте
на скрине вверху Year и подсвечен зеленым 2008 год
http://www.qliktips.com/2014/07/extensions-in-qlik-sense.html
спасибо!

A:Стандартная установка идет с небольшим набором расширений.
Из папки Qlik\Examples\Estensions можно скопировать в Qlik\Sense\Estensions и посмотреть их в работе.
После обновления открытого приложения добавленные расширения должны появиться в перечне диаграмм.

Q: Задача — вывести значения конкретного списка в расширении.
Подскажите, как обратиться к полю Клика в JavaScript и вывести его значения списком на интерфейс в расширении?

Пишу так, результата нет. LB03 — идентификатор нужного списка в приложении.

var obj = this.Element;
var doc = Qv.GetCurrentDocument();
var b = doc.GetObject(«LB03»);
for(var i = 0; i < b.Count; i++){ var bb = b.value; obj.innerHTML=bb; }; Буду благодарна за помощь! A: Может здесь что будетhttp://qlikcommunity.s3.amazonaws.com/misc/symbols/Qv.html#constructor


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

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

FAQ по разграничению прав доступа в Qlik Sense/Qlik View

Q: Правильно ли концептуально, что * — это не любое в данных, а любое из таблички SECTION ACCESS
т.е. пользователь ADMIN увидит не все данные, как ожидалось бы, а только 1 и 2 записи, т.к. прав для 3 в SECTION ACCESS вообще не расписаны.

SECTION ACCESS;
LOAD * INLINE [
ACCESS, USERID, PASSWORD, REDUCE
ADMIN, ADMIN, ADMIN, *
USER, USER1, USER1, 1
USER, USER2, USER2, 2
];

SECTION APPLICATION;

DATA:
LOAD * INLINE [
SUB, GRUUP, SUM, REDUCE
SUB1, Group1, 100, 1
SUB2, Group2, 200, 2
SUB3, Group2, 300, 3
];

A: Могу даже модель приложить.

Что интересно.

Если
* — показывает из списка описанных прав 1 и 2
Пусто — действительно показывает Все 3.
Во как.
https://community.qlik.com/servlet/JiveServlet/download/1276635-280316/acc.qvw

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

A: Если речь не идет о разграничении прав на просмотр (то есть принципиально не запрещается заведующему отдела А видеть отчет по отделу Б),

то можно использовать функцию OSUser(), которая возвращает логин учетной записи пользователя

Далее на лист с отчетом ставим триггер, организующий выборку в поле «Отдел»:
iF(OSUser()=’Ivanov’, ‘Отдел А’, iF(OSUser()=’Petrov’, ‘Отдел Б’))

Либо можно в скрипте загрузки организовать таблицу соответствия логинов и отделов и в отчете ограничивать измерение отдела значением, соответствующим логину.
В общем решил остановится на SECTION Access. Но элементарный скрипт не работает. Захожу под любым ID и вижу все товары:
SECTION Access;

LOAD * INLINE [
USERID, ACCESS, PRODUCTTYPE
U1, USER, A
U2, USER, B
U3, USER, C
U4, USER, D
U5, USER, E
U6, USER, A
U6, USER, B
U6, USER, C
U6, USER, D
ADMIN, ADMIN, *
];

SECTION Application;

Tovar:
load * inline [
Товар , PRODUCTTYPE
Полоценце , A
Полоценце , A
Салфетка , B
Салфетка , B
GT , A
Нож , C
Нож , C
Нож , C
Нож , C
Вилка , D
Вилка , D
Вилка , D
Вилка , D
Вилка , D
Кружка , A
Кружка , B
Кружка , C
Диван , B
Диван , B
];

Q: Вопрос, можно ли реализовать в Qlik Sense следующий сценарий данных:

заранее определюсь пользователь — это бизнес пользователь системы, финансист, он умеет только смотреть на диаграммы

1. из БД в qvd с множеством преобразований грузяться факты в Qvd файл, сотни миллионов записей, за периода 1 год
2. пользователь знает что ему нужно работать с аналитикой за последний месяц, он в интерфейсе приложения выбирает период соотвествующий
3. в память из qvd файла поднимаются только данные за выбранный период

цель — использование qlik sense в условиях когда данных очень много, а сервер ATX с двумя процами и 64 гига оперативки

A: Вот как реализовать Ваши задачи в Qlikview — могу подсказать.
А вот что касается Qlik Sense — то в «базовой комплектации» еще многого пока не хватает. 😉

Q: Есть база на sql server. В ней таблица. В таблице есть поле — регион. Созданы представления, отдельно для каждого региона, в которых в выражении where указан фильтр по региону. Созданы пользователи в sql server для каждого региона. Для каждого представление настроен доступ только для определенного пользователя (этого региона).
Нужно предоставить разрозненный доступ пользователям на одинаковых дашбордах

Подскажите, как реализовать такой дифференцированный доступ через qlik server?
Возможно, существует более простой и технически правильный способ предоставить разрозненный доступ пользователям?

A: Самое первое что приходит на ум, это использовать «QVuser( )».
То есть, допустим есть 5 регионов. В QlikView создаем 5 пользователей и 5 листов (sheet) для каждого региона. В свойствах первого листа (sheet_01) в (General —> Conditional) пишем условие, что данный лист (sheet_01) виден только для пользователя user_01 и все расчеты на данном листе «урезаны» для региона, который нужен пользователю user_01. По аналогии делаем sheet_02, на котором данные для пользователя user_02 и т.д.

Q: Прошу помощи профессионалов и заранее извиняюсь за глупый вопрос.
Есть таблица Торговые точки с полями Агент и Адрес, пример:
Торговые точки:
Агент Адрес
Иванов г.Москва
Петров г.Волгоград
Сидоров г.Владимир

Доступ к файлу ограничен через поле: NTNAME
Как разграничить доступ чтобы один USER видел Адреса по агенту Иванов, другой другого….
Если использовать ограничение доступа по USERID и PASSWORD я использую следующий:
Section Access;
LOAD * INLINE [
ACCESS, USERID, PASSWORD
USER, 1, 1
USER, 2, 2
];
Section Application;
LOAD * INLINE [
USERID, Агент
1, Иванов
2, Петров
];
И все видят адреса по своему Агенту, а если прописать по другому, то файл вообще не откроется:
Section Access;
LOAD * INLINE [
ACCESS, NTNAME
USER, 1
];
Section Application;
LOAD * INLINE [
NTNAME, Агент
1, Иванов
];

A: Вот рабочий пример из справочного руководства (ошибка в строке RechNo(), правится легко )
Код:
section access;

load * inline [
ACCESS, USERID,REDUCTION, OMIT
ADMIN, ADMIN,*,
USER, A,1
USER, B, 2,NUM
USER, C, 3, ALPHA
];

section application;
T1:
load *,
NUM AS REDUCTION;
load
Chr(RecNo()+ord(‘A’)-1) AS ALPHA,
RecNo() AS NUM
AUTOGENERATE 3;

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

текст 1(описывающий таблицу клиенты)
текст 2(описывающий таблицу счета):

Можно ли реализовать следующее: Администратор1, имеющий доступ к редактированию скрипта, может изменять текст 1, но не может изменять текст 2 ?
A:Несколько необычно, чтобы администратору что-либо запрещалось. 🙂
Речь идет о локальной версии?
Из средств, ограничивающих доступ, есть область скрытого скрипта.
Есть загрузка скрипта из текстовых файлов, в этом случае, если нет доступа к редактированию файла (qvs/txt) то пользователь, редактирующий главный скрипт, сможет открыть на просмотр и загрузить скрипт, но не сможет внести изменения.
Это что касается Вашего вопроса.
Также, рекомендую почитать в руководстве главу 29 «Безопасность» и попрактиковаться с Section Access .


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

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

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!

FAQ по моделям в Qlik Sense/Qlik View часть 4

Q: Требуется объединить клиентов в одну табличку. При этом если в таблице сопоставления есть правило замены старого клиента на нового, то заменить, если нет, то загрузить клиентов из таблиц.

Например, есть три таблички:
Клиент новый
— Клиент Н1
— Клиент Н2

2) Клиент старый
— Клиент С1
— Клиент С2

3) |Сопоставление|
— Клиент Н1 | Клиент С1 (т.е. С1 заменяем на Н1)

Какими лопатами-граблями можно добиться, следующей таблички:
Н1
Н2
С2

A: Вот как вариант, идея такая:
В таблице старых клиентов ставим метку для тех, которые уже есть в новых клиентах, через таблицу сопоставления.
Затем отсекаем по проставленной метке тех кто имеет сопоставления и грузим тех, кто таких записей не имеет.
Код примера несложный, копируем и запускаем:
Код:
// Пример скрипта для форума Qlikview & Qlik SENSE
ClientNew:
LOAD * INLINE [
%IDN, NewClient
n1, Клиент A
n2, Клиент B
n3, Клиент C
n4, Клиент D
];

ClientOld:
LOAD * INLINE [
%IDN, %IDO
n3, o2
n1, o4
];

right Join LOAD * INLINE [
%IDO, OldClient
o1, Клиент Ф
o2, Клиент Ц
o3, Клиент Л
o4, Клиент А
];
STORE * from ClientOld into ClientOld.qvd(qvd);
drop Table ClientOld;

LOAD %IDO as [%IDN], OldClient as [NewClient]
FROM [ClientOld.qvd](qvd)
WHERE(IsNull(%IDN));

Q:При загрузке двух таблиц появился синтетический ключ по одинаковым полям, связь общим ключом должна быть только полем Контакт. Как лучше их объединить, функция join подойдет в этом случае?

Код:
LOAD Статус, Ответственный, Сумма leads.csv;
join LOAD Статус, Ответственный, Сумма from invoices.csv;

A: Не совсем понятна таблица loads.
Поля связываются по названию, следовательно если поля Статус, Ответственный и Сумма не имеют общего смысла и не должны быть связаны, то следует их переименовать.

Q: Помогите решить проблему. Есть cvs файл с данными по заказчикам в нем Фамилия Имя Отчество вынесены в отдельные столбцы, как их можно объединить скриптом при загрузке данных в один столбец? И доп. вопрос, поле дата выгружаться с указанием даты и времени в одном столбце, как в этом случае исключить время из поля дата?

A: По объединению строк.
Существуют текстовые операторы, &и like
Первый из них (амперсанд — &) возвращает строку из строковых значений. Т.е.
Код:
Фамилия &’ ‘& Имя &’ ‘& Отчество as [ФИО]
даст нам необходимый результат.
Что касается исключения значений времени из поля Дата создания.
Существует функция date(expression [ , format-code ]) ,
которая форматирует expression как дату по шаблону format-code. Если format-code не указан, то используется формат даты, установленной в исполняемой среде (по умолчанию SET DateFormat=’DD.MM.YYYY’ ).

Дополню.
При импорте из формата CSV поле может восприниматься как текстовое.
В этом случае потребуется интерпретация из текстового формата в формат даты функцией date#(expression [ , format-code ])
часы и минуты просто игнорируем и получаем:
Код
date( Date#( left([Дата создания],10),’DD.MM.YYYY’),’DD.MM.YYYY’) as [ДатаСоздания]
Еще вариант, с использованием timestamp#
Код:
date(Timestamp#([Дата создания], ‘DD.MM.YYYY hh:mm’ )) as [ДатаСоздания]
Есть еще вариант, с использованием функции Makedate, он не для этой ситуации но результат будет тот же.
Код:
MakeDate(Mid([Дата создания],7,4),mid([Дата создания],4,2),left([Дата создания],2)) as [ДатаСоздания]

Q: Наверное глупый вопрос для опытных пользователей QV, а я вот застрял, всю голову сломал.

Есть у меня таблица с остатками по клиентам на дату:

ООО Кубик | 01.01.2014 | 10 шт.
ООО Кубик | 01.02.2014 | 20 шт.
ООО Мячик | 01.01.2014 | 10 шт.
ООО Мячик | 01.08.2014 | 5 шт.
ООО Домик | 01.06.2014 | 7 шт.

Мне нужно вывести остаток на максимальную дату по каждому клиенту:
ООО Кубик | 20 шт
ООО Мячик | 5 шт
ООО Домик | 7 шт

Пробовал по разному, даже так sum(if([Дата]=Max ([Дата]),Остаток)) — без результата…

A: самое простое, на мой взгляд:
Код:
tableA:
LOAD *,Trim(Фирма)&num(Дата) as KeyTmp INLINE [
Фирма, Дата, Кол-во
ООО Кубик, 01.01.2014, 10
ООО Кубик, 01.02.2014, 20
ООО Мячик, 01.01.2014, 10
ООО Мячик, 01.08.2014, 5
ООО Домик, 01.06.2014, 7
];

left join
load Trim(Фирма)&Max(Дата) as KeyTmp,
1 as Флаг
Resident tableA
Group by Фирма;
drop Field KeyTmp;
И в формуле применяем Set analyse
Sum ({<Флаг={'1'}>}[Кол-во])
(Извините, но вы не имеете доступа к галерее)
Поясню замысел:
В скрипте мы просто формируем флаг для записи с максимальной датой по каждому клиенту.
Для чего используем временный ключ, который по завершении просто удаляем.

Q: Загружаю несколько таблиц. QV создает автоматическую синтетическую таблицу и ключи. В итоге наступает момент, когда, добавив еще одну таблицу пересчет завершиться не может из-за слишком большого массива данных.

Как принудительно заставить QV НЕ создавать синтетику? Сказать QV, что, мол, вот это ключ и другие не создавай?

A: Необходимо продумать модель данных, что мы хотим получить в итоге.
Какого рода значения находятся в таблицах, можно ли их соединить в одну.
Количество в разных таблицах, скорей всего не являются измерениями и не могут быть ключами, следовательно эти таблицы следует либо объединить либо переименовать количество в осмысленное название — [# количество приход], например.
Артикул и аналитику надо проанализировать, может потребуется сгенерировать ключевую таблицу самостоятельно, либо объединить факты.
Вариантов несколько, надо смотреть по ситуации и всем За и Против.

Q: Только начинаю изучать QV, поэтому не судите строго за, уверен, простой вопрос для вас.

У меня две таблицы — План продаж помесячный и Накладные
Делаю прямую таблицу, где хочу получить:

— Период плана (Дата начала и Дата окончания) — сделал
— Плановую сумму — сделал
— Фактическую сумму

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

A: Не совсем понятно по составу измерений.
Хотелось бы посмотреть на модель данных (Ctrl-T, Копировать изображение, и вложением или через галерею в сообщение на форум).
Там где есть поля даты, сложно обойтись без календаря. Поэтому потребуется добавить календарь.
Далее, исходя из состава таблиц, потребуется определится с моделью данных, т.е. сколько таблиц с фактами будем использовать. Думаю, что надо будет объединить план с фактом в одну.
Ну и, без расширенной фильтрации в выражениях диаграмм тоже не обойтись.

По одной таблице фактов, к примеру:
вариант 1
признак,дата, номенклатура,покупатель, количество, сумма (где признак= план или факт)

вариант 2
дата, номенклатура,покупатель, количество плановое, сумма плановая, количество факт, сумма факт

Тогда для получения суммы в первом случае потребуется использовать фильтрацию по признаку,
во втором — достаточно будет посчитать сумму по плановым показателям.
Результат будет получен в обоих случаях, а о том какой вариант правильнее, на небольших данных не принципиально.

Q: Именование полей в модели данных Qlikview и Qlik Sense

A: Свод рекомендаций из рекомендаций разработчиков с официального сообщества.
Названия полей — это то, с чем работают и разработчик и пользователь Qlikview.
Чтобы избежать путаницы и сэкономить время (свое, в перую очередь) следует придерживаться системы.
Например, ключевые поля именовать начиная с символа %
Код:
TraliValiID as [%ID объекта]
Поля, содержащие числовые значения и используемые в расчетах, именовать начиная с символа #
Код:
TraliValiSum as [# Стоимость объекта]

Поля, содержащие вспомогательные значения, также можно сгруппировать в списке полей приложения Qlikview, используя первый символ «_»
Код:
TraliValiStatus as [_СтатусЗаписи]

Также, можно скрыть поля от пользователя, используя установки окружения Qlikview через переменные HidePrefix и HideSuffix.
Можно использовать и другие символы и принципы. Главное — выработать для себя систему и придерживаться ее в каждой своей разработке. Тогда будет легче и разработчикам и пользователям,
согласитесь, приятней и легче работать когда видишь в модели поля с осмысленными названиями, и отсортированные по порядку — группы, числовые, ключевые и непосредственно измерения.


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

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

FAQ по моделям в Qlik Sense/Qlik View часть 3

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

Исходные данные:
каждый квартал появляются данные нарастающим итогом, которые состоят из 40 файлов эксель. Каждый файл отвечает за своё направление (файл поступлений по компаниям и по множеству направлений поступлений (Х); файл выплат по тем же компаниям по направлениям выплат (Х), и так далеее)
в этих файлах отсутствует дата!

1. вопрос — у меня два пакета данных за 2014 и 2015 год, как присвоить каждому пакету данных год, его в таблицах нигде нет.
2. какую модель данных можно заложить, чтобы в дальнейшем догружать пакеты файлов и добавлять их в анализ?

A: в операторе загрузки данных можете добавить свое поле, например:
Код:
load *, ‘2015’ as [Год] from …….;

Q: Прошу подсказать начинающему: аналог построения функции Excel ВПР() в Qlikview.
Например: в таблице даны даты и соответсвующие им текстовые записи (Дата-Страна-Город). Необходимо построить таблицу в которой в разрезе Стран выводятся текстовые записи из поля Город, соответстувующие наибольшей дате, независимо от Страны.

A: построить таблицу в которой в разрезе Стран выводятся текстовые записи из поля Город, соответстувующие наибольшей дате, независимо от Страны
А именно в разрезе стран и независимо от страны.
Можно выложить xls с примером использования ВПР().
Если в целом посмотреть на аналогию в клике, то сам принцип построения связей напоминает работу ВПР() в Excel.
Получение значения из других таблиц по ключевому полю — именно так и работают Qlikview и Qlik Sense.

Q: Столкнулся с одной проблемой, может у кого то есть уже опыт в решении подобного вопроса.

Есть две таблицы связаны по полю user_id

Users:
user_id //id пользователя
date //дата реги

Phone_calls:
user_id //id пользователя
date_call //дата звонка

Нужно вывести в таблице 2 колонки:
1. count users — [Users .date = ‘2014-03-15’] // кол-во зарегистрированных пользователей
2. count users call — [Phone_calls .date = ‘2014-03-15’ AND (Users.date BETWEEN ‘2014-03-01’ AND ‘2014-03-15’)] // пользователи которые зарегистрировались в период с 2014-03-01 по 2014-03-15 и звонили 2014-03-15

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

Может кто то знает как можно, правильно посчитать, в COUNT() какие условия нужно дописать или таблицы по другому связать?

A: Можно сначала загрузить мастер -календарь, левым соединением к нему погрузить две указанные таблицы. После загрузки, если необходимы данные на интервале времени за каждый день, то в измерении диаграммы можно указать поле Дата из мастер-календаря, а выражениях использовать функцию Count () с использование анализа множеств для отбором данных . Если же данные нужны только на конкретный день, то можно в принципе просто разместить рядом два текстовых поля с вычисление значений опять же на основе анализа множеств. Об анализе множеств см. штатное руководство пользователя (стр. 915 для рускоязычной версии).

Q: Такая ситуация: Есть 3 таблицы для вывода информации по сделкам, вывод в которые различается по стадии сделки (в одной завершенные, во второй 90%-е сделки, в третей 70%-е). Как можно завязать их все к одному полю даты? На данный момент сделал 3 поля с датами и привязал каждую таблицу к своему полю, таблицы делал по принципу альтернативных состояний. Может можно как-то в свойствах указать применимость к нескольким состояниям?
И еще, можно ли как-нибудь настроить, чтобы при отсутствии данных для вывода по данной выборке, не сбрасывалась выборка, а выводилась пустая таблица?

A: Можно попробовать соединить по таким полям: DATE, SDELKA_100, SDELKA_90, SDELKA_70.
Если есть сделка 100%, то в полях SDELKA_90, SDELKA_70 будет пусто или лучше какое-то определенное значение а в поле SDELKA_100 будет стоять значение TRUE.

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

Q: В ней имеется один сценарий — «сценарий 1» и три товара: «product1, product2, product3».

Как можно добавить такую таблицу к имеющейся модели данных?
Таблица:
Scenery, ProdName, V1, V2, V3
сценарий 2, product1, 1, 2, 1

P.s. Ассоциативные связи не нарушая.

A: В текущем исполнении добавить таблицу в модель данных нельзя, т.к. возникнет цикл в модели данных. Вы можете создать независимую (оторванную от основной модели данных) таблицу, которая носит функциональное название Data Island. Использовать эту таблицу можно в диаграммах с помощью Set Analysis и функции Concat (см. пример http://ivan-shamaev.ru/practical-issues-in-qlikview-part-2/#_Data_Island_QlikView).
Либо свяжите вашу таблицу с одной из таблиц «product» или «view», а второе поле переименуйте. А в диаграмме используйте Set Analysis. Вообщем — экспериментируйте 🙂

Q: Подскажите,пожалуйста.Берем информацию из 1С. В справочнике с должностями присутствуют одинаковые наименования полей с разными кодами и ссылками на это поле, но по сути должности одинаковые, например:
Гл.бухгалтер,
Главный бухгалтер,
гл.бухгалтер
Главный бухгалтер

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

A: Самое простое сделать выгрузку в эксель и сделать колонку с эталонными значениями)
1С, True
Гл.бухгалтер, Главный бухгалтер
Главный бухгалтер, Главный бухгалтер
гл.бухгалтер, Главный бухгалтер
Главный бухгалтер, Главный бухгалтер

И соответственно работать с полем True.

Q: Подскажите пожалуйста, возможно ли реализовать упрощенный вариант алгоритма к-средних?! Например, для кластеров выбрать произвольно центры, рассчитать Евклидово расстояние до них, и сравнивать расстояния — так принадлежность к кластеру и определять ?

A: С R сдвигов нет?
Максим, а есть пример данных и полученный результат для контроля? Он так и так понадобится чтобы проверить работу алгоритма.

Затронутая тема довольно сложная. Думаю не ошибусь, что многие с этой темой только в институте и сталкивались.

Q: есть две таблицы, в них 4 колонки с одинаковыми именами (FILENAME, DATA, ID_PAC, VERSION), по которым qlik автоматом настраивает связь. Проблема в том что при фильтрации одной таблицы по колонке по которой нет связи (например по FAM) во второй таблице отображаются заполненными колонки только те, по которым установлена связь (FILENAME, DATA, ID_PAC, VERSION) в остальных колонках должна быть информация но там проставляются прочерки автоматически. Помогите пожалуйста настроить связь чтобы данные не терялись. Данные там точно есть по каждому ID_PAC. Скрины прилагаю

A: Надо избавиться от синтетических ключей.
Поведение модели логично. При установке фильтра по одной таблице, другая будет отображать только те значения, которые соответствуют установленному фильтру и связям.
Можете объединить две таблицы в одну с помощью оператора concatenate.
Но все равно с другими таблицами тоже надо будет решать вопрос.
Почитайте по моделям данных http://ivan-shamaev.ru/qlikview-theory-and-practice/
и здесь: https://community.qlik.com/message/572112#572112

Q:В общем ситуация такова:
— есть перечень объектов (например нумерация от 1 до 10)
— по каждому объекту существует три события
— у каждого события свой уникальный признак (тип события).

Мне требуется собрать единую сводную таблицу по каждому из объектов.
1. Самый простой вариант, который у меня зреет в голове — сделать представление этой таблицы на сиквеле и все это счастье уже залить в клик.
2. Хочется извращений. Хочу сделать одно представление со столбцами: 1 — номер объекта, 2 — Тип события, 3 — Описание события.

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

A: Неплохая подборка материала по кликеhttp://ivan-shamaev.ru/qlikview-theory-and-practice/
Обратите внимание на модели данных.
По вашей ситуации,
1. Таблица с объектами. (Ключ — ИД_объекта)
2. Таблица событий. (Ключи — ИД_объекта, ИД_события)
3. События (как справочник) (Ключ — ИД_события)
Загрузится простенькая модель, с хорошим функционалом.
Все получится как хотите, даже с запасом

Q: 1. Есть вот такие данные:
Date Currency Forex_pok Forex_prod Cash_pok Cash_prod
01.05.2015 USD 60,05 60,15 61,05 61,15
02.05.2015 USD 60,05 60,15 61,05 61,15
03.05.2015 USD 60,45 60,65 61,05 61,15
04.05.2015 USD 60,45 60,95 61,25 61,35
05.05.2015 USD 60,55 60,65 62,05 62,15

2. Схема в прикрепленном файле — 01.png.

Вопрос. Как сделать, чтобы при выборе Forex (файл 03.png) в таблице выбирались два поля Forex_pok и Forex_prod?

P.s. Если поменять структуру таблицы DayRates, то сделать это будет легко. Нужно сделать, чтобы не менять структуру таблицы DayRates.

A: Ваш вопрос пересекается с темой http://qlikview-forum.ru/qvf/index.php/topic,658.0.html
Посмотрите пример по ссылке.
Смысл в том, что в таблице для каждого измерения надо будет написать формулу для условия отображения,
подобную этой:

Q: ем грозит связь один ко многим в Таблицах?
Может из-за этого происходить зависание QV?

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

Q: Добрый день, как объединить не связанные таблиц ячейка в ячейку.
К примеру:
Код:
Таблица А
1
1
1

Код:
Таблица Б
2
2
2

Нужно сделать, что бы была Таблица Х
Код:
Столбец 1 | Столбец 2
1 | 2
1 | 2
1 | 2

К примеру, объедение должно происходить, по порядку.

A:
t1:
LOAD * inline
[столбец1
1
2
3
4
5
];
t2:
LOAD * inline
[столбец2
a
b
c
d
e
f
g
];
tb1:
LOAD *, RecNo() as NumOfRow Resident t1;
tb2:
LOAD *, RecNo() as NumOfRow Resident t2;

drop Tables t1,t2;

Q: Есть товарный отчет где имеются показатели:
Входящий остаток, приход, возврат, списание, исходящий остаток. Выводится сводной таблицей и остаток расчитывается выражением используя «SUM({<[Дата] = {"<$(=[ДатаС])"}>} …. Все приходы минус все расходы со дня открытия магазина». Отчет выводит данные за период «ДатаС» и «ДатаПо».
Сейчас просят добавить колонку «Количество дней за период когда товар был на остатках». Получается нужно чтобы на каждую дату в период С — По Просчитались остатки и просумировались дни когда остаток больше нуля. Можно ли это сделать не задавая новую таблицу с остатками на каждый день?

A: Если надо посчитать количество дней когда был остаток товара, то, думаю, без обработки сведений в скрипте не обойтись.
Я встречал на официальном сайте заявления о том. что остатки считаются формулами, но живых примеров не видел.
Считаю, что лучше будет подготовить такую таблицу в скрипте.

Q: Столкнулся с тем, что не совсем понимаю, как правильно строить разветвленную модель данных(несколько кубов в классическом представлении).
Несколько фактовых таблиц, имеющих общие измерения приводят к зацикливанию данных. LOOSEN TABLE решает вопрос, но с ним я теряю возможность строить неявные иерархии измерений(когда связь между таблицами измерений проходит через фактовую таблицу).
Мне удалось найти решение в статье про Generic keys (http://community.qlik.com/docs/DOC-3451).
Там все сводится к двум вариантам структуры, которые прикреплены к теме.
Описанные мной проблемы принято решать именно таким образом, или есть другие(более изящные) варианты?

A: Почитайте про ассоциативную модель данных Qlikview
Там же есть информация о построении модели данных.
Когда есть несколько таблиц с фактами по общим измерениям и все они (таблицы фактов) должны рассматриваться в одном приложении — есть вариант связать их в одну таблицу (concatenate, не путать с join) и прийти к схеме «звезда».

Q: Здравствуйте! В попытках связать несколько разных дат моей модели (при том, что ключевые поля уже есть и при связке дат образуется цикл) я наткнулась на одну очевидно интересную вещь «Canonical Date». Подробнее описано тут http://community.qlik.com/blogs/qlikviewdesignblog/2014/02/17/canonical-date

Поясните, пожалуйста:
1. Что понимается по «мастер-календарем»? Это просто календарь, как выложен тут на форуме? http://qlikview-forum.ru/qvf/index.php/topic,11.0.html
2. Как создать аж 3 календаря?
3. И не могу до конца понять как они связываются в один календарь….?

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

2. Загрузить один и тот же календарь с префиксом, чтобы имена полей не пересекались друг с другом, можно воспользоваться готовой библиотекой (набором функций).
3. В один календарь они никак не могут быть связаны. По указанному примеру Canonical Calendar играет такую роль с помощью созданной таблицы DateBridge.


Допустим есть один заказ №001 от 10.01.2015 на дату отгрузки 15.01.2015 отгруженный 20.01.2015
Datebridge будет содержать записи:

10.01.2015, 001, Заказ от
15.01.2015, 001, Отгрузить
20.01.2015, 001, Отгружен

Если есть заказ № 002 от 15.01.2015 на 20.01.2015 то в таблице будет уже следующее:

10.01.2015, 001, Заказ от
15.01.2015, 001, Отгрузить
20.01.2015, 001, Отгружен
15.01.2015, 002, Заказ от
20.01.2015, 002, Отгрузить
20.01.2015, 002, Отгружен

Таким образом, построив график по измерению CanonicalData вы сможете с помощью выражений анализа множеств (Set Analysis) определить в одном графике сколько у вас было заказов принято и отгружено.
Этого же можно добиться если заказы и отгрузки будут представлять собой разные массивы данных, объединенных в одну таблицу фактов с общим и единственным полем Дата документа, определяющим дату свершения события.

Q: Недавно начала изучать QlikView на новой работе, столкнулась с такой сложностью:

Мне надо выстроить правильную загрузку данных в приложение, пока не могу понять как это сделать, чтобы на выходе получать интересующую меня аналитику.
У меня магазин, в котором ежедневно стартуют акции и длятся 3 дня. Соответственно у меня есть следующие поля по первой таблице «Акции»:
— Даты активности акции
— ID акции
— ID товара в акции
— Категория товара
— первая характеристика товара
— вторая характеристика товара
— кол-во предлагаемых шт. каждого товара по акции

Поскольку все эти аукционные товары продаются, то есть еще таблица «Заказы», которая содержит:
— дата заказа
— № заказа
— ID клиента
— ID товара в акции
— статус заказа
— кол-во проданного товара
— цена продажи

Я поняла, что QlikView может ассоциировать таблицы последовательно и только по одному полю. У меня в данном случае это поле — ID товара в акции.
Но тут встает задача, которую я не понимаю как решить. Как мне сделать календарь, при выборе даты, например, на котором, мне бы показывалось:
1. Какие акции в этот день проходили
2. Какие заказы и сколько были сделаны
По сути, чтобы сделать такую выборку мне надо связать поля «Дату активности акции» и «Дата заказа», но возможно ли это и если да, то как?
По какой структуре лучше осуществлять загрузку данных?

A: Пока дам подсказку, более развернуто отвечу чуть попозже.
Рассматривайте даты как календарные измерения. Создайте календарь
Qlikview строит связи не только по одному полю (об этом есть информация в справочной документации в pdf-формате)
Но это не самый лучший вариант. Возможно, для вашего случая, объединение таблиц фактов в одну будет хорошим решением.

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

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

FAQ по моделям в Qlik Sense/Qlik View часть 2

Q: Имеются данные по вызовам. Необходимо построить диаграмму, которая показывает число вызовов в секунду. Как это сделать?

Контекст Дата и время создания Дата и время завершения
2162491505 21.06.2016 12:23:48 21.06.2016 12:23:50
2162480790 21.06.2016 12:21:07 21.06.2016 12:30:00
2162503334 21.06.2016 12:26:45 21.06.2016 12:31:38
2162506653 21.06.2016 12:27:33 21.06.2016 12:28:16
2162509859 21.06.2016 12:28:19 21.06.2016 12:33:08

A: Итак, отталкиваемся от результирующей таблицы.
Нам потребуется измерение — единица времени до секунды.
Следовательно потребуется создать календарь с записью на каждую секунду.
Затем, исходные данные надо представить в виде:

Контекст, Дата
2162480790, 21.06.2016 12:21:07
2162480790, 21.06.2016 12:21:08
2162480790, 21.06.2016 12:21:09
2162480790, 21.06.2016 12:21:10
……….
Как это сделать, на форуме обсуждалось
Обратите внимание на использование функции iterno()

Q: я просмотрела очень много материала, но не смогла решить такую задачу. Хотя есть что-то подобное на этом сайте в темах «Как создать таблицу перекрестных продаж в Qlikview?» от 08.01.2015 и «Выборка по принципу «И», Qlikview» от 22.03.2016 , но у меня более глобальное.
и возможно ли это будет реализовать в QlikSense?
есть такая таблица данных (это пример)
У задачи есть подводный камень ( ID_Chek не уникальный, но может повторятся у разных Sellers)
Необходимо найти все кросс-продажи в разрезе Продукта. (внизу таблица результата)

DateKKM ID_Chek ID_Product Name_Product ID_Sellers ID_Market Qty
01.02.2016 1 804 CB000001174 Брюки Seller1 market4 1
01.02.2016 1 804 CB000001186 Рубашка белая Seller1 market4 1
02.02.2016 1 808 CB000001174 Брюки Seller1 market4 1
02.02.2016 1 811 CB000001186 Рубашка белая Seller1 market4 1
02.02.2016 1 812 CB000001186 Рубашка белая Seller1 market4 1
02.02.2016 1 812 CB000001226 Бабочка Seller1 market4 1
03.02.2016 1 815 CB000001226 Бабочка Seller1 market4 1
03.02.2016 1 819 CB000001247 ремень Seller1 market4 1
03.02.2016 1 820 CB000001174 Брюки Seller1 market4 1
03.02.2016 1 824 CB000001247 ремень Seller1 market4 1
03.02.2016 1 824 CB000001174 Брюки Seller1 market4 1
03.02.2016 1 824 CB000001186 Рубашка белая Seller1 market4 1
03.02.2016 1 827 CB000001226 Бабочка Seller1 market4 1
03.02.2016 1 829 CB000001310 Рубашка синяя Seller1 market4 1
04.02.2016 1 814 CB000001174 Брюки Seller2 market2 1
04.02.2016 1 816 CB000001174 Брюки Seller2 market2 1
04.02.2016 1 821 CB000001174 Брюки Seller2 market2 1
04.02.2016 1 821 CB000001310 Рубашка синяя Seller2 market2 1
04.02.2016 1 821 CB000001247 ремень Seller2 market2 1
05.02.2016 1 830 CB000001310 Рубашка синяя Seller1 market4 1
05.02.2016 1 830 CB000001226 Бабочка Seller1 market4 1
05.02.2016 1 832 CB000001226 Бабочка Seller1 market4 1
05.02.2016 1 836 CB000001186 Рубашка белая Seller1 market4 1
05.02.2016 1 837 CB000001174 Брюки Seller1 market4 1
05.02.2016 1 837 CB000001310 Рубашка синяя Seller1 market4 1
05.02.2016 1 837 CB000001247 ремень Seller1 market4 1
05.02.2016 1 843 CB000001174 Брюки Seller1 market4 1
05.02.2016 1 824 CB000001174 Брюки Seller2 market2 1
05.02.2016 1 826 CB000001226 Бабочка Seller2 market2 1
05.02.2016 1 827 CB000001247 ремень Seller2 market2 1
06.02.2016 1 849 CB000001310 Рубашка синяя Seller1 market4 1
06.02.2016 1 849 CB000001226 Бабочка Seller1 market4 1
06.02.2016 1 849 CB000001174 Брюки Seller1 market4 1
06.02.2016 1 849 CB000001186 Рубашка белая Seller1 market4 1
06.02.2016 1 815 CB000001174 Брюки Seller7 market3 1
06.02.2016 1 815 CB000001186 Рубашка белая Seller7 market3 1
07.02.2016 1 855 CB000001226 Бабочка Seller1 market4 1
07.02.2016 1 855 CB000001310 Рубашка синяя Seller1 market4 1
07.02.2016 1 843 CB000001310 Рубашка синяя Seller2 market2 1
07.02.2016 1 855 CB000001226 Бабочка Seller2 market2 1
07.02.2016 1 857 CB000001310 Рубашка синяя Seller2 market2 1
07.02.2016 1 857 CB000001226 Бабочка Seller2 market2 1
07.02.2016 1 857 CB000001174 Брюки Seller2 market2 1
07.02.2016 1 818 CB000001247 ремень Seller7 market3 1
07.02.2016 1 820 CB000001226 Бабочка Seller7 market3 1
08.02.2016 1 869 CB000001247 ремень Seller2 market2 1
08.02.2016 1 829 CB000001174 Брюки Seller7 market3 1
08.02.2016 1 830 CB000001174 Брюки Seller7 market3 1
08.02.2016 1 831 CB000001247 ремень Seller7 market3 1
08.02.2016 1 832 CB000001186 Рубашка белая Seller7 market3 1
09.02.2016 1 833 CB000001186 Рубашка белая Seller7 market3 1
09.02.2016 1 835 CB000001226 Бабочка Seller7 market3 1
09.02.2016 1 835 CB000001310 Рубашка синяя Seller7 market3 1
09.02.2016 1 837 CB000001226 Бабочка Seller7 market3 1
10.02.2016 1 845 CB000001226 Бабочка Seller7 market3 1
10.02.2016 1 847 CB000001174 Брюки Seller7 market3 1
10.02.2016 1 847 CB000001247 ремень Seller7 market3 1
10.02.2016 1 847 CB000001186 Рубашка белая Seller7 market3 1
10.02.2016 1 864 CB000001186 Рубашка белая Seller7 market3 1

Общее количество -это сколько раз вообще встречается ПродуктN любом чеке(это не сложно).
Затем столбцы пересечений:
Когда пересечение ПродуктN=ПродуктN, значит Продукт продался один в чеке, посчитать кол-во.
Там где ПродуктN продавался с ПродуктZ посчитать кол-во разов совместной продажи (попадания обоих в один чек).
процент — это отношение текущего значения к общ. кол-ву

общ. кол-во Брюки Рубашка белая Бабочка ремень Рубашка синяя
Брюки 16 8 50% 5 31% 2 13% 4 25% 4 25%
Рубашка белая 11 5 31% 5 31% 2 13% 2 13% 1 6%
Бабочка 14 2 13% 2 13% 8 50% 0 0% 5 31%
ремень 9 4 25% 2 13% 0 0% 5 31% 2 13%
Рубашка синяя 9 4 25% 1 6% 5 31% 2 13% 2 13%

A:Задача на самом деле не такая сложная как может показаться.
Хотелось бы еще услышать какие варианты решений вы рассматривали.

Начнем рассуждения от итоговой таблицы.
Вполне очевидно, что одним измерением мы не обойдемся => нам необходимо изменить модель данных, т.е. добавив второе измерение Продукт2. Но с каким ключом?
В условии говорится, что ключ для продавцов может повторяться, значит вводим новый уникальный ID.
Как это сделать — на ваше усмотрение. Либо просто сцепить значения — ID_Chek&ID_Sellers as ID или же получить уникальную последовательность символов для каждого сочетания функцией hash128().
Теперь нам надо организовать нашу модель так, чтобы для каждого Продукта1 была связь с каждым Продуктом2. Для этого можно использовать объединение типа Outer Join.
Таким образом мы получим модель, с которой можно будет продолжить эксперименты и ответы на ваш вопрос.
Привет, примерно так:
Код:
LOAD DateKKM,
ID_Chek&ID_Sellers as ID ,
ID_Product,
Name_Product,
ID_Sellers,
ID_Market,
Qty
FROM [для инет .xlsx] (ooxml, embedded labels, table is [Сhek KKM]);

Outer Join LOAD ID_Chek&ID_Sellers as ID ,
Name_Product as Name_Product2
FROM [для инет .xlsx] (ooxml, embedded labels, table is [Сhek KKM]);

Q:Столкнулся с задачей, которую никак не могу решить.

Есть таблица с остатками на определенный день:
01.12.2015 — 100р.
02.12.2015 — 200р.
03.12.2015 — 500р.
04.12.2015 — 200р.
07.12.2015 — 300р.
08.12.2015 — 600р.
09.12.2015 — 500р.

В таблице нет 05.12.2015 и 06.12.2015. Я же хочу, что бы если в дате нулевой остаток, то в эту дату проставлялся бы остаток из предыдущей даты. Т.е.:
01.12.2015 — 100р.
02.12.2015 — 200р.
03.12.2015 — 500р.
04.12.2015 — 200р.
05.12.2015 — 200р.
06.12.2015 — 200р.
07.12.2015 — 300р.
08.12.2015 — 600р.
09.12.2015 — 500р.

Подкиньте, пожалуйста, идею, как такое реализовать?

A: Попробуй вот так:
Код: [Выделить]
[quote][quote]Data:
LOAD * Inline [
DATE, QUANTITY
01.12.2015, 100
02.12.2015, 200
03.12.2015, 500
04.12.2015, 200
07.12.2015, 300
08.12.2015, 600
09.12.2015, 500
];

STORE * from Data into Data.qvd (qvd);
DROP Table Data;

Date:
LOAD Min(DATE) as MIN_DATE_N,
Max(DATE) as MAX_DATE_N
FROM Data.qvd (qvd);

LET v_MinDate = FieldValue (‘MIN_DATE_N’, 1);
LET v_MaxDate = FieldValue (‘MAX_DATE_N’, 1);

FOR d = $(v_MinDate) to $(v_MaxDate)
Calendar:
load date($(d), ‘DD.MM.YYYY’) as DATE
AutoGenerate(1);
next d

Left Join (Calendar)
LOAD DATE,
QUANTITY
FROM Data.qvd (qvd);

STORE * from Calendar into Data.qvd (qvd);
DROP Table Calendar;

Data:
LOAD DATE,
If (IsNull(QUANTITY), 0, QUANTITY) as QUANTITY
FROM Data.qvd (qvd);

STORE * from Data into Data.qvd (qvd);
//DROP Table Data;

NoConcatenate
Data_01:
LOAD DATE,
If(QUANTITY = 0, Alt(Peek(‘QUANTITY’), QUANTITY), QUANTITY) as QUANTITY
Resident Data
Order By DATE;

DROP Table Data;[/quote][/quote]

Больше информации по данному вопросу можно посмотреть по ссылке — https://community.qlik.com/message/1025148#1025148

Q: есть две таблицы:
таб. 1 [ФИО сотрудника], [Дата приема]
таб. 2 [ФИО сотрудника], [Дата увольнения]
Данные в обоих таблицах накапливаются.

Необходимо Сотрудникам из табл. 1, но отсутствующим в таб. 2, присваивать статус «работает»,
а сотрудникам из таб. 2 присваивает статус «уволен».

A: можно объединить и проставить статусы по условиям.
Код:
Кадры:
LOAD * INLINE [
ФИО, Принят
Иванов, 01.01.2016
Петров, 01.02.2016
Сидоров, 01.03.2016
];

left join LOAD * INLINE [
ФИО, Уволен
Петров, 10.03.2016
Сидоров, 31.03.2016
];

Q: Возник вопрос следующего характера.
Есть таблица (прикрепленный файл 101.png):
Код:
Data:
LOAD * Inline [
ID, DATE, NAME, QUANT_STOCK
1, 01.01.2016, NAME_01, 2
2, 02.01.2016, NAME_01, 1
3, 03.01.2016, NAME_01, 0
4, 11.01.2016, NAME_01, 5
5, 12.01.2016, NAME_01, 5
6, 13.01.2016, NAME_01, 5
7, 14.01.2016, NAME_01, 0
];

Хотелось бы получить следующую таблицу — прикрепленный файл 102.png

Описание:
Если остаток на складе какого-то товара 0 и следующие несколько дней товара не было, то хотелось бы, чтобы данный товар множился в таблице пока он не появится на складе (то есть, пока не будет прихода).
Также, хотелось бы, чтобы был счетчик — товара нет на остатке 1 день, 2 дня, 3 дня и т.д.

A: Это скрипт QliKView в формате QVS. Можно открыть блокнотом (notepad++) или импортировать в приложение QliKView.
Прикрепил целиком приложение.

Q: Подскажите, как реализовать расчет отдельно дебиторской и кредиторской задолженности.

С ДЗ и КЗ на начало проблем нет — Sum({<Остаток={"<0"}>} Остаток).
А вот ДЗ и КЗ на конец периода рассчитывается if (Sum(Остаток)+SUM (Отгрузка)-Sum(Оплата)<0,Sum(Остаток)+SUM (Отгрузка)-Sum(Оплата)) и с ними проблема При использовании измерения Контрагент все получается, но при измерении Филиал, сумма Итог или Подитог - не хочет разделяться. Даже при добавлении вторым измерением контрагента Второй вопрос - как реализовать расчет ДЗ и КЗ за любой период, т.к. сейчас началом период всегда должна быть дата начального остатка (актуально будет и для реализации движений товарных запасов или денежных средств) Третий вопрос, как сделать выражение при измерении Дата Остаток на начало загружается отдельно. Оплаты и отгрузки загружаю документами. LOAD * INLINE [ Филиал, Контрагент, Отгрузка, Оплата, Дата А, 1, 2, 10, 01.01.2015 А, 1, 2, 10, 01.02.2015 А, 2, 5, 1, 01.01.2015 А, 2, 6, 5, 01.02.2015 В, 3, 7, 6, 01.01.2015 В, 3, 3, 15, 01.02.2015 В, 4, 8, 10, 01.01.2015 ]; LOAD * INLINE [ Филиал, Контрагент, Остаток, Дата А, 1, -5, 01.01.2015 А, 2, 3, 01.02.2015 В, 3, 1, 01.01.2015 В, 4, -8, 01.01.2015 ]; http://s48.radikal.ru/i119/1603/fe/045800047cfb.png A:Лучше всего, рассчитывать остатки отдельно в скрипте. Либо загружать их с учетной системы.

Q: Коллеги, не так давно начал осваивать qlik и вот сейчас стоит такая задача.
есть таблица, примерно 30,000 строк.
есть календарь.
их надо объединить следующим образом, что бы на каждую дату из календаря, были все данные из первой таблицы (30,000).
например в календаре 5ть дат, и результирующая таблица должна иметь 150,000 строк.
как это можно провернуть?

A: Так?
Код:
t1:
LOAD * INLINE [
A, B
1, 11
2, 22
3, 33
4, 44
5, 55
];
t2:
join LOAD * INLINE [
Дата, Текст
01.02.2016, Раз
02.02.2016, Два
03.02.2016, Три
04.02.2016, Четыре
];
http://qlikview-forum.ru/qvf/index.php/topic,1018.msg2559.html#msg2559

Q: абсолютный ноль в скрипте. Я загрузила 2 таблицы эксель
LOAD №,
Филиал,
Город,
Управление,
Отдел,
[№ Услуги],
Услуги,
[FTE]
FROM
[C:\Users\Desktop\Распределение выручки_ноябрь 2015_v2_комментарии.xlsx]
(ooxml, embedded labels, table is [FTE ноябрь]);

LOAD СityID,
Город,
Coefficient
FROM
[C:\Users\Desktop\Распределение выручки_ноябрь 2015_v2_комментарии.xlsx]
(ooxml, embedded labels, table is Коэф);

Первая таблица содержит трудозатраты по городам, а вторая коэфициенты для этих городов. Задача такая: столбик [FTE] из первой таблицы умножить на Coefficient из второй в зависимости от города.

A: Поле Город — ключевое.
Следовательно две таблицы будут связаны по этому полю.
Создайте объект диаграмма, с измерением = Город и необходимой формулой.

Q: Подскажите, пожалуйста, по такому вопросу.
Есть готовый рабочий документ QV 11 Desktop, который вытягивает данные из Oracle.

Остался последний штрих: каким образом сделать выбор кратности сумм в документе?

То есть у меня есть список:
руб.
тыс. руб.
млн. руб.
млрд. руб.

[offtop] пусть такой список не смущает, речь идет белорусских рублях ))) [/offtop]

И в идеале при выборе только одного значения из списка суммы в документе пересчитывались.
Я честно говоря даже не представляю как это сделать.
Возможно, кто-то из участников сталкивался с подобными задачами или может быть видел и может скинуть ссылку на учебный пример или документ, где можно посмотреть как это реализовано.

A: извиняюсь что так долго пришлось ждать одобрения созданной темы.
По вопросу.
Можно сделать отдельную, несвязанную ни с чем таблицу с коэффициентами (от рублей и так далее).
В формулах с выражениями подсчета сумм денежных масс добавлять множитель:
Код:
(выражение про деньги)*МножительДеньги
Тогда, в зависимости от выбранной строки в списке будет происходить перерасчет всех выражений с множителем.
Не проверял, но должно сработать. 🙂

Q: У меня такая проблема. Загружаю данные из разных баз данных с 1С через connector. Не получается почему то. Думаю дело в том что имеются одинаковые поля. Но мне казалась, что он их должен просто связать. Подскажите пожалуйста, что делать. Заранее Спасибо.

Это из первой базы данных 1С
Код:
CUSTOM CONNECT TO «Provider=1C_Connector_QV10.exe;XInitString=Presario|Ruza1C_USP|MSSQL|No|Sql2008R2|Ruza1C_USP|8.2|F83EB2B8CFC35936|CB9B6E13FF9F81DF|YEs|No|;XUserId=LYEOCIDSQGNBNeCaYFUbLIDXROADNBGaAEUBbILQQWPDNAKf;XPassword=*******;»;

LOAD Ссылка,
Справочник.Контрагенты:
ВерсияДанных,
ПометкаУдаления,
Предопределенный,
Родитель,
ЭтоГруппа,
Код,
Наименование,
ГоловнойКонтрагент,
ДокументУдостоверяющийЛичность,
ДополнительноеОписание,
ИНН,
ИсточникИнформацииПриОбращении,
КодПоОКПО,
Комментарий,
КПП,
НаименованиеПолное,
ОсновноеКонтактноеЛицо,
ОсновнойБанковскийСчет,
ОсновнойВидДеятельности,
ОсновнойДоговорКонтрагента,
ОсновнойМенеджерПокупателя,
Покупатель,
Поставщик,
РасписаниеРаботыСтрокой,
СрокВыполненияЗаказаПоставщиком,
ЮрФизЛицо,
НеЯвляетсяРезидентом,
ОКОПФ,
Регион,
ГруппаДоступаКонтрагента,
_ВидДоставки,
_КодЧисловой,
_НашМагазин,
НомерРейса,
КатегорияКлиента,
КорпоративныйКод;
SQL SELECT *
FROM Справочники.Контрагенты;
STORE Справочник.Контрагенты into СП.qvd;

Это из второй базы данных 1С
Код:
CUSTOM CONNECT TO «Provider=1C_Connector_QV10.exe;XInitString=Presario|RHlebUSP|MSSQL|No|Sql2008R2|RHlebUSP|8.2|F83EB2B8CFC35936|CB9B6E13FF9F81DF|YEs|No|;XUserId=YIdIUARMNLacGdC;XPassword=********;»;
Справочник.Контрагенты:
LOAD Ссылка,
ВерсияДанных,
ПометкаУдаления,
Предопределенный,
Родитель,
ЭтоГруппа,
Код,
Наименование,
_1абКонтейнерныеАвтомобили,
_ВидДоставки,
_КодЧисловой,
_НашМагазин,
ГоловнойКонтрагент,
ГруппаДоступаКонтрагента,
ДокументУдостоверяющийЛичность,
ДополнительноеОписание,
ИНН,
ИспользоватьЕвролотки,
ИсточникИнформацииПриОбращении,
КлиентЭкспо,
КодПоОКПО,
КодСтаройИБ,
Комментарий,
КонтролироватьНомерЗаказаПокупателя,
КПП,
лРасчетныйСчетДляПечати,
Маршрут,
НаименованиеПолное,
НеЯвляетсяРезидентом,
ОКОПФ,
Округ,
ОсновноеКонтактноеЛицо,
ОсновнойБанковскийСчет,
ОсновнойВидДеятельности,
ОсновнойДоговорКонтрагента,
ОсновнойМенеджерПокупателя,
Покупатель,
Поставщик,
РасписаниеРаботыСтрокой,
Регион,
рздДоверенностьНаДеньги,
рздДоверенностьНаЧерствяк,
рздИспользоватьИндивидуальныйСоставДокументовДляПечати,
рздИспользоватьТипЦенГрузополучателя,
СрокВыполненияЗаказаПоставщиком,
сфтРеальныйКонтрагент,
ФлагОтпускатьВКг,
ЮрФизЛицо,
GLN,
eXiteОбмен,
eXiteОтчетОбОтгрузке,
eXiteСчет,
eXiteПодтверждениеЗаказа,
РучнойЗапретОтгрузки,
НомерРейса,
КатегорияКлиента;
SQL SELECT *
FROM Справочники.Контрагенты;
STORE Справочник.Контрагенты into СП1.qvd

A: Привет, вам необходимо продумать модель данных, затем уже загружать данные.
При этом не стоит грузить все поля. К чему нужна пометка на удаление? Просто поставьте в условии что надо грузить все актуальные записи, а поле закомментируйте в загрузке.
Если вы хотите получить один, общий справочник контрагентов, то по максимум сделайте таблицы одинаковыми по структуре и делайте загрузку с объединением (concatenate load).


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

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

FAQ по моделям в Qlik Sense/Qlik View часть 1

Q: Здравствуйте. В прикреплённой таблице есть два поля: DateNum и WorkType. В поле WorkType чередуются данные разделённые пробелом и соответствующие цифрам строкой ниже. Чтобы много не расписывать, необходимо сделать следующее:
Пример (Как было):DateNum WorkType
17.01.2017/6 УВ Я
17.01.2017/6 6.0 1.8
17.01.2017/7 Я
17.01.2017/7 8.7
17.01.2017/8 Я H
17.01.2017/8 3.7 2.9
17.01.2017/1 УВ
17.01.2017/1 5.3 Пример (Как должно быть:)
DateNum УВ Я Н
17.01.2017/6 6.0 1.8
17.01.2017/7 8.7
17.01.2017/8 3.7. 2.9
17.01.2017/1 5.3 Проблема заключается в том что буквенные данные могут быть различными. Таких таблиц много (по одной на каждый день). Список возможных вариантов так же приложил. Помогите пожалуйста новичку.
https://community.qlik.com/servlet/JiveServlet/download/1268617-278448/%D0%92%D0%B0%D1%80%D0%B8%D0%B0%D0%BD%D1%82%D1%8B.xlsx https://community.qlik.com/servlet/JiveServlet/download/1268617-278447/%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%802.qvd https://community.qlik.com/servlet/JiveServlet/download/1268617-278443/%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80.qvd
A:Скрипт: https://pastebin.com/dTQgDSQc
Результат: img-2017-05-16-17-21-19.png / Облако Mail.Ru

Q: Делаю отчет где есть
Таблица 1 с платежами (контракт, дата, сумма платежа)
Таблица 2 с балансами (контракт, дата, баланс по телу и тд.)

Есть ряд параметров (например, продукт, dpd), которые завязаны на номере_контракта.

Подскажите как правильно связать таблицы,
Что бы фильтр накладывать на дату (год, мес., день).
Пробовал делать составной ключу
( через “&”
и
Hash160(contract_id, date(date,’YYYY.MM.DD’)) as Key )

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

Подскажите как это правильней сделать?

A: Для работы с датами лучше создавать отдельную таблицу, так называемый «Мастер календарь». А в остальных таблицам будет общее поле с календарём. Тогда при выборе любого периода в календаре, выборка затронет все данные приложения.

Простенький МастерКалендарь
Temp:
Load
Max(ДатаКод) as MaxDate
Resident РегистрДвижений;

Let vMaxDate = Floor(Peek(‘MaxDate’));

МастерКалендарь:
Load
Num(Дата) as ДатаКод,
Date(Дата,’DD.MM.YYYY’) as Дата,
Year(Дата) as Год,
‘Q’ & Num(Ceil(Num(Month(Дата))/3)) as Квартал,
Month(Дата) as Месяц,
‘W’ & Num(Week(Дата),00) as Неделя,
WeekDay(Дата) as ДеньНедели,
‘D’ & Day(Дата) as День,
Left(Month(Дата),3) & ‘-‘ & Year(Дата) as ГодМесяц,
Year(Дата) & ‘-W’ & Num(Week(Дата),00) & ‘ (‘ & Left(WeekStart(Дата),5) & ‘-‘ & Left(WeekEnd(Дата),5) & ‘)’ as ГодНеделя,
Year(Дата) & ‘-Q’ & Num(Ceil(Num(Month(Дата))/3)) as ГодКвартал,
WeekStart(Дата) as НачалоНедели,
WeekEnd(Дата) as КонецНедели,
MonthStart(Дата) as НачалоМесяца,
MonthEnd(Дата) as КонецМесяца,
QuarterStart(Дата) as НачалоКвартала,
QuarterEnd(Дата) as КонецКвартала;
Load
Date(‘01.01.2017′,’YYYYMMDD’)+(Iterno()-1) as Дата
Autogenerate 1
//While Date(‘01.01.2017′,’YYYYMMDD’)+(Iterno()-1) <= Date(Today()); While Date('01.01.2017','YYYYMMDD')+(Iterno()-1) <= Date($(vMaxDate)); Q: У меня есть два столбца экспортированных из БД, в одном из них запрошенная дата доставки, а в другом — реальная дата доставки. Как правильно создать меру, содержащую количество просроченных доставок, т.е. количество пар, где Запрошенное время < Реальное время? Искал подобное на просторах интернета, самое лучшее что смог сгенерировать - count({$<[Дней в запасе/Дней просрочено]={"<0"}>}[Дней в запасе/Дней просрочено])
где Дней в запасе/Дней просрочено — созданная мной мера, содержащая столбец с разностями запрошенной и реальной даты доставки. Такой запрос выдает ошибку(прочерк).
Еще пробовал
count({$<[Дней в запасе/Дней просрочено]={">0″}>}[ShippedDate]),
но такой запрос напротив выдает все количество записей, как просто если бы делал count по ShippedDate.
Аналогично запрос
count({$<[Дней в запасе/Дней просрочено]={">0″}>}[RequiredDate])
Выдает количество всех существующих запрошенных дат в базе.

A: Проще всего создать поле-флаг в момент загрузки данных. Тем более если поля с датами — это поля одной таблицы, тогда вообще 1 доп строка в скрипте. Если разных таблиц, конечно придется повозиться. Но зато потом будет быстрый обсчет в самом приложении.

Если хочет именно через меру, то я бы сделал через агрегацию. Как-нибудь так (писал от руки):
Sum(Aggr(If([RequiredDate]<[ShippedDate],1,0),[OrderID])) И тогда если в измерении у нас покупатель, то эта мера вернут количество просроченных заказов для каждого покупателя. Q: В таблице есть возможность в качестве измерения выбрать дату, неделю, месяц, квартал, год.

Есть основная таблица в которой содержится 2 типа данных — остаток на конец месяца (OnHandEoM) и приход+расход на каждый день (InventTrans).

Есть таблица с календарем в которой содержится для каждой даты информация о принадлежности каждой конкретной даты к типу периода.

Например, для 3 июля есть 1 запись с типом OnHand_SoM Для определения начала месяца
Дата;_ДатаКлюч
3.07.17;30.06.17

И есть 3 записи с типом OnHand_Sum
Дата;_ДатаКлюч
3.07.17;1.07.17
3.07.17;2.07.17
3.07.17;3.07.17

Соответственно имеем формулу для расчета остатков на конкретную дату:
Sum({<ТипПериода={'OnHand_SoM'}, ТипДокумента={'OnHandEoM'}>} Количество) + Sum({<ТипПериода={'OnHand_Sum'}, ТипДокумента={'InventTrans'}>} Количество)

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

Данная формула работает если в измерении указывать месяц или дату, но если выбрать например неделю, то в период OnHand_SoM попадают 2 записи, если неделя содержит данные из двух разных месяцев.
Можно как-то в set expression определить значение минимальной даты начальных остатков?
Отсюда же следует второй вопрос, например, в таблице есть данные по промо акциям, есть дата начала промо акции и дата ее окончания, в каждой строке они разные, можно как-то определить в формуле эту дату для расчета остатков на начало и конец промо акции?

A: Можно вариант с «as of table»? Неплохой вариант, кстати.
Насколько большие данные?
Расчет остатков — задача требующая ресурсов. Объем работы примерно одинаков при любом способе.
Если остатки рассчитаны заранее — будет большой массив, но графики, скажем по дате будут строиться махом при любых изменениях выборки, а при выборе «формульных» вариантов — каждый раз будут рассчитываться и съедать память.
Так что, здесь надо экспериментировать. Взять фрагмент/период и протестировать на нем все варианты.
Поэтому и нет однозначного ответа — как лучше считать остатки.

Q: Помогите разобраться
Есть файл, в нем порядка 50 столбцов и миллиона строк, ниже урезанный)))
В нем «номенклатура» входит в «узел», в свою очередь узел позже может быть «номенклатурой» и также входить в какой то другой «узел»
Например,
Как мне отобрав номенклатуру построить «дерево» (или вывести в таблицу итоговые значения), в какой узел она входит и далее этот узел какой номенклатурой становится, далее каким узлом становится та номенклатура и т.д. и на каждом этапе я должен видеть все поля таблицы относящиеся к этой строке.
Т.е. я выбрал номенклатуру «Шланг1» вижу узел «Установка слива», далее должен увидеть
Номенклатуру «Установка слива» входи в узел «Установка ВМ» (исходя из таблицы мы видим что этот узел последний, далее его нет ни в номенклатуре ни в узлах)
Нашел функцию lookup, но она не подходит
Период Дата Номенклатура Узел
22.10.2015 8:51:12 17.06.2016 Шланг1 Установка слива
22.10.2015 8:51:12 17.06.2016 Шланг2 Установка слива
22.10.2015 8:51:12 06.06.2016 Резервуар р10 Резервуар р10
22.10.2015 8:51:12 10.06.2016 Резервуар Р10-100 Резервуар Р10-100
22.10.2015 8:51:12 10.06.2016 Резервуар Р10-300 Резервуар Р10-300
22.10.2015 8:51:12 10.06.2016 Штуцер1 Штуцер1
22.10.2015 8:51:12 27.06.2016 Рукав, 720 Рукав 720
22.10.2015 8:51:12 10.06.2016 Штуцер 720 Штуцер 720
22.10.2015 8:51:12 17.06.2016 Установка слива Установка ВМ
22.10.2015 8:51:12 14.06.2016 Лист пола7 Пол вагона7611
22.10.2015 8:51:12 14.06.2016 Лист пола8 Пол вагона7611
22.10.2015 8:51:12 17.06.2016 Труба301 Установка слива
22.10.2015 8:51:12 14.06.2016 Штуцер 720 Трубопровод 7600

A: Смотри про иерархию http://help.qlik.com/ru-RU/sense/3.1/Subsystems/Hub/Content/DataSource/hierarchies.htm.
Я бы рекомендовал сделать справочник отдельный, на нем сформировать иерархию и подцепить к таблице данных.

Q: Начал знакомство с QlikView, и моя первая задача- требуется узнать оборачиваемость товара за указанный период. Данные берутся из двух таблиц. В одной указаны даты и количество поставок товара, во второй продаж товара.
Путём не сложных выражений он теперь рассчитывает отношение запаса к продажам, но проблема в том, что товарный запас до заданного диапазона он не берёт в учёт.
Собственно сам вопрос- как подсчитать остаток товара до указанной даты. Как я это представляю- будет некая табличная часть, в которую будут заноситься остатки на товары по датам, как реализовать- пока не пойму.

A: Обширная тема, с несколькими вариантами решений.
Посмотрите по поиску по форуму и в сообществе.
Например:
http://qlikview-forum.ru/qvf/index.php/topic,820.msg1894.html#msg1894
http://qlikview-forum.ru/qvf/index.php/topic,1151.msg2913.html#msg2913
http://qlikview-forum.ru/qvf/index.php/topic,1150.0.html
http://qlikview-forum.ru/qvf/index.php/topic,862.msg2179.html#msg2179
http://qlikview-forum.ru/qvf/index.php/topic,1090.msg2735.html#msg2735
https://community.qlik.com/message/570771#570771
https://community.qlik.com/message/1029324#1029324
Поиск в группе Qlik Россия и СНГ

Q: Разбираю статью http://blog.atkcg.ru/distinct-or-no-distinct-vot-v-chyom-vopros/ и столкнулся с тем, что у меня у меня QlikView обрабатывает данные не ясно для меня:

Код: [Выделить]
Table1:
LOAD * INLINE
[Group, Value
A, 150
A, 150
B, 250
B, 250
C, 400
C, 400];
Table2:
LOAD * INLINE
[Group, Value
A, 150
A, 150
B, 250
B, 250
C, 400
C, 400];

Все ясно, получается 1 таблица содержащая данные из 2-х загружаемых таблиц:
Но вот когда добавляю опцию NoConcatenate то поведение становится для меня неожиданным:
1. Почему в таблице только 3 записи, т.е. убираются дубликаты, хотя DISTINCT не используется ?
2. Почему не создаются 2-е таблицы QlikView, а только одна ?
Версия QlikView 12
A:Вы смотрите на ключевую таблицу, с уникальными ключами.
А по таблицам все грузит как обычно, в каждую по 6 записей.

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

Код:
Load KeyDOA
,Sum(alt(vr, 0)) as vr
,Sum(alt(pr, 0)) as pr
,Sum(alt(sale, 0)) as sale

from lib://SSD/DF.qvd(qvd)
group by KeyDOA;

,где
Hash128(Объект, Дата, Артикул) as KeyDOA

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

Q: В QlikSense есть две таблицы:
1. В первой таблице переменные: Дата заказа, Источник, Сумма заказа
2. Во второй таблице: Дата, Источник, Бюджет

Надо связать: Дата заказа-Дата, Источник-Источник, чтобы Бюджет тоже можно было бы использовать в первой таблице.

А на сколько я поняла, нельзя две таблицы связать двумя связями, получаются циклическая связь. Как этого избежать?

A:1) Если эти две даты несут в себе разную смысловую нагрузку, я бы по ним вообще не связывал.
2) В третью таблицу поле Источник заменить на id_Источник.

Получится две таблицы с данными, которые будут связанны через таблицу-справочник.

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

Q: При освоении программы Qlikview 12 возникли следующие вопросы:
1) Есть несколько таблиц. Хочу отобразить продажи(UnitPrice*Quantity) по месяцам для продукта(ProductName) Омары. Создаю диаграмму с полем Month и пишу выражение If(ProductName=’Омары’, UnitPrice*Quantity,), но так не работает от слова совсем. Пытался с помощью Aggr, но не очень понял как сделать. Подскажите, что можно попробовать? Если выделить в ручную, то видно, что для ‘Омары’ одному месяцу соответствует одно значение из Quantity и UnitPrice.

2) Например в ProductName есть разные торты, например [Шоколадный торт], [Ванильный торт] и т.д. Как выбрать все торты из ProductName? Я решил эту проблему через FindOneOf, но это очень криво выглядит.

A: Я бы объединил заголовки документов с их табличными частями, и прицепил бы календарь на ключевое поле «дата».
Вместо if() в выражениях следует использовать другой способ — set analysis.
Вместо расчетов в выражении UnitPrice*Quantity лучше использовать расчеты в скрипте.


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

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

FAQ по использованию макроса в Qlik Sense/Qlik View

Q: Подскажите как передать значения переменой Qlikview созданной в скрипте в макрос VBScript
Пробую написать так:
Код:
Sub test
set v=ActiveDocument.Variables(SumRows)
MsgBox v
Не работает…

A: Вопрос решил.
Код:
Sub test
set Name1 = ActiveDocument.Variables(«SumRows»)
Q = Name1.GetContent.String
MsgBox Q

Q: Доброго времени суток Уважаемые форумчане.
Подскажите кто знает, в QlikView есть возможность повесить трриге или макрос на активацию WebView?
Допустим я хочу при переходе на лист с картой гугл автоматически включать WebView, и после ухода с листа выключать его…
Чет погуглил, похожего не нашёл (((

A: Думаю, что такой возможности нет.
Как вариант, можно сделать меню из кнопок, и на кнопку повесить действие по открытию стороннего приложения. Action->External->Launch
И запускать, например, Chrome, с параметрами по открытию отчёта, а в самой ссылке отчёта прописать нужные параметры открытия.
Пример ссылки с параметром:
http://eu-a.demo.qlik.com/QvAJAXZfc/opendoc.htm?document=qvdocs%2FExecutive%20Dashboard.qvw&host=demo11&sheet=SH12

Q: Очень интересует следующий вопрос:
Можно ли как-нибудь использовать пользовательские функции, написанные в редакторе макросов, в выражениях (конкретно интересует прямая таблица)?
Бесчисленные попытки приводили только к следующему сообщению: «Error: Error in expression: function_name is not a valid function». В самом редакторе макросов все работает.
Разумеется, проверял даже на бональных a+b.

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

И еще один вопрос в догонку: можно ли в скрипте загрузки использовать макросы, обращающиеся к уже загруженным полям? Читал на форумах, что, вроде как, нельзя, но можно ли как-то это обойти? Либо можно в макросе обращаться к qvd файлам?

A: Теоретически, да. Но фактически нет. Ядро каждый раз пересчитывает выражения при смена состояния, представьте что будет, если еще и макросы обрабатывать каждый раз.
Пересмотрите задачу на предмет предварительного расчета параметров.
То же самое и по второму вопросу.
Надо проанализировать задачу в комплексе от источников до результата.


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

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

FAQ по использованию приложений Qlik Sense/Qlik View

Q: Есть необходимость в Qlik-Sense, в таблице выбирать исключенные строки. Делаю фильтр по измерению, выбираю исключенные, но в выборку не попадают строки из таблицы в которых по отбираемому измерению значение = NULL.
Думаю должно быть правильное решение данного вопроса.

Посоветуйте, пожалуйста, что можно сделать.

A: На эту тему сейчас в хелпе есть подборка

Q: Ребята, подскажите пожалуйста, есть ли возможность в стандартном отборе (визуализации) qlik-sense сделать отбор не по значению «=», а исключить из выборки выделенное значение в поле отбора?

A: Да, конечно.
http://help.qlik.com/ru-RU/sense/3.2/Subsystems/Hub/Content/Selections/SelectionsToolbar/work-with-selections.htm

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

A: QlikView 11.20 для Windows Personal edition.
Автоматическую загрузку хочется делать не только для десктопного приложения, но и для просмотра в браузере.

Q: Столкнулась с очень странной проблемой. Открываю файл qvw. Нажимаю на редактор скрипта. Он как будто загружается, но при этом окна нет. С самим документом никаких действий сделать нельзя, как при открытом редакторе. Но самого редактора не вижу, как будто бы он спрятан под документ. Как его вернуть на место?

A: в свойствах подключения можно настроить расширение экрана, отличное от станции, помаксимальнее

Q: Есть таблица сравнений. Можно производить сравнение по месяцам, а также по кварталам.Но,есть один небольшой момент,который следует обойти.Когда произвожу сравнение по кварталам (к примеру выбираю Q3),то,для того,чтобы показало сравнение к предыдущему кварталу,мне необходимо зафиксировать 3 месяца в выбранном квартале.
Подскажите пожалуйста,возможно ли это как то обойти,чтобы не совершать дополнительных действий — фиксировать 3 месяца?

A: Скорее всего, в данном случае нужно использовать таблицу периодов.

Q: помогите пожалуйста не правильно работает функция заблокировать. Сделав выборку в приложении, нажимаю заблокировать выборку, при нажатии кнопки «очистить», заблокированная выборка все ровно слетает, из за чего? Подскажите пожалуйста! Заранее спасибо.

A: Это происходит как в десктопной версии, так и в тонком клиенте(браузере)? Вы нажимаете «Очистить» в самом обьекте, или во всём документе?
Вообще можно вручную поставить действие на блокирование поля, в случае его разблокирования. (триггер на нужное поле при Unlock, в свойствах документа)

Q: подскажите пожалуйста можно ли убрать строку которая выделена на рисунке красным цветом, и можно ли то что выделено зеленным цветом (я так полагаю, это время последней загрузки) переместить куда нибудь на лист. Если можно, подскажите пожалуйста как это сделать. Заранее спасибо.

A:Убрать строку состояния — Меню Вид и снять флажок со строки состояния.
Время последней загрузки можно разместить где угодно через переменную.
Формируете переменную в скрипте и выводите, например в заголовке объекта:
Код:
=’ABC-анализ, данные от ‘&’$(gv1CPeriodEnd)’

Q: Не делает Очистку выборки. В чем может быть проблема?

A: На кнопку назначаем действие — Очистить поле и выбираем поле.

Q: А подскажите, пожалуйста, как реализовать такое. Есть список: Магазины. В нем обязательным элементом списка является значение «Все», выбор которого определяет расчёт по всем магазинам?
Ведь если не ставить отбор, будет расчет по всем магазинам. А как добавить в список именно значение «Все», что-то никак не могу понять.

A: Заказчик в кубах, наверное, привык работать.
Покажите ему как работает модель Qlikview.

Q: Подскажите пожалуйста,каким образом осуществляется выгрузка таблиц,диаграмм в эксель?

A: Выгрузка таблиц у меня получается через пункт меню «Экспортировать данные». (пользуюсь Desktop версией)

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

На стороне Клиента QlikView все хорошо. Гружу картинки так:
Код:
Bundle info
load %Номенклатура, ‘\\Media\ItemImages\’&dvFileName&’.jpg’ as dvFileName;
select distinct dv.FILENAME as dvFileName, it.ItemId as ‘%Номенклатура’,dr.NAME
from DocuValue as dv
inner join DocuRef as dr on
dr.VALUERECID = dv.RECID
inner join InventTable as it on
dr.reftableID = 175
and dr.REFRECID = it.RECID
Делаю так, чтобы картинки отображались в Web-е.
P.s.: Еще один вариант — грузим на ftp и обращаемся напрямую к ftp, тогда само приложение будет весить минимально, а весь объем картинок (в моем случае 200Гб — в чистом виде и 6 Гб, если грузить через Bundle info) — на ftp

В общем я отвлекся…
Суть проблемы — Экспорт в Excel. Картинки в Excel не подгружаются. Отчет — полотно (25 колонок и от 1000 строк), которое пользователи потом мучают в Excel.

Что через клиента, что в Web-е картинки не выгружаются.
Если кидать картинки на ftp — та жа история

Что можно сделать?
Помогите, Please! 🙂

A: Проголосовать за идею реализации этой функциональности 🙂
Пока только так

Q: Есть такой вопрос: возможна ли в Qlik Sense 2.0 (2.1) автоматическая рассылка отчетов?

A: QlikView® NPrinting — Да.
Qlik Sense Desktop — нет.
Qlik Sense Cloud — нет.
Qlik Sense Enterprise — не знаю.

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

A: Вам нужен оператор store. Данный оператор может выгружать в QVD или CSV. CSV, это по сути есть как TXT так и XLS.

Q: В ходе работы возникло несколько проблем со связью данных. Есть экслевский файл с несколькими вкладками, в которых различные данные. Несколько ключевых столбцов во вкладках совпадают, столбцы со значениями разные.

1) В Qlick данные, судя по всем связываются таким образом, что отображаются только данные которые есть во всех вкладках. Например, в первой вкладке имя покупателя, регион, год и количество покупок, во второй имя покупателя, регион, кол-во магазинов. Кол-во магазинов отображается неправильно, так как в этой вкладке есть данные, которых нет в первой и Qlick эти данные не учитывает и некорректно строит диаграмму. Попробовал добавить в первую вкладку недостающие данные, чисто формально, на диаграмме все появляется. Возможно, есть способы в скрипте прописать, чтобы вкладки не полностью зависели друг от друга или что-нибудь в этом роде??

2) Вторая проблема, возможно, из того же русла. Диаграммы на листе связаны таким образом, что, когда выбираешь критерий для одной диаграммы, меняются и другие, так как, видимо, на них присутствуют общие задействованные из файла excel поля. Как можно их разделить, чтобы при выборе критерия в списке, относящегося к конкретной диаграмме, изменялась только она??

A: Обычно, один лист в Excel = одна таблица в модели данных (но не обязательно).
Если поля называются одинаково, а суть разная — переименуйте их в скрипте, чтобы не устанавливалась связь.
Второй вопрос не совсем понятен, факт изменения окружения при выборе какого-либо измерения — это нормальный режим работы Qlikview.

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

A: Если ранее все было ОК, то надо проанализировать, что изменилось.
На снимке таблица открыта в просмотрщике, а в самом Qlikview то же самое

Q: Коллеги, подскажите пожалуйста, есть ли возможность «фиксировать» просмотр таблиц (схемы) в Table viewer? Чтобы таблички не перемещались и не сворачивались, после каждого захода в Table viewer.

A: Два десятка таблиц с островками, автоматическое размещение отвратное.
Размещаю для наглядности и печати. Нажимаю ОК.
Возвращаюсь через ctrl-T — расположение таблиц не изменилось.
Версия Qlikview Personal Edition 11.20.12577.0 SR8

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

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

68 queries in 0,268 seconds
Website nonton bokep jepang