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!

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

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

64 queries in 0,188 seconds
Website nonton bokep jepang