FAQ по скрипту Qlik Sense/Qlik View часть 5

Q: Каким образом исключить целую строку на уровне скрипта.
К примеру:
Код:
Таблица 1:
1, test, Иванов
2, info, Петров
3, info, Соколов

На уровне скрипта исключаем, все записи с test.

В итоге получаем таблицу:
Код:
2, info, Петров
3, info, Соколов

Как это сделать?

A: LOAD *
FROM Таблица 1
Where Field2 <> ‘test’;

Q: Слышал, про такую удивительную вещь, что можно создать ключ по последним символам. Приведу пример:
Код:
Таблица 1:
+7 911 655 75 29, Иванов
+7 911 655 75 30, Петров
+7 911 655 75 31, Федоров
+7 911 655 75 32, Кузнецов

Код:
Таблица 2:
911 655 75 29, Москва
911 655 75 30, Воронеж
911 655 75 31, Мурманск
911 655 75 32, Москва

В итоге после формирования ключа и джойна, получаем следующую таблицу:

Код:
Таблица 3:
911 655 75 29, Москва, Иванов
911 655 75 30, Воронеж, Петров
911 655 75 31, Мурманск, Федоров
911 655 75 32, Москва, Кузнецов

A: таблица1:
load Right(НомерПлюс,13) as Номер,ФИО ;
LOAD * INLINE [
НомерПлюс, ФИО
+7 911 655 75 29, Иванов
+7 911 655 75 30, Петров
+7 911 655 75 31, Федоров
+7 911 655 75 32, Кузнецов
];

таблица2:
LOAD * INLINE [
Номер, Город
911 655 75 29, Москва
911 655 75 30, Воронеж
911 655 75 31, Мурманск
911 655 75 32, Москва
];
Без джойнов, ключ по 13 правым символам.

Q: Есть таблица, Область — Регион — Регион РФ
Нужно, записать данные из столба Регион РФ поверх данных Регион. И оставить один объеденный столбец Регион.
Стоит добавить, что «Регион» и «Регион РФ» образуются в результате left join двух таблиц. Если сразу join`ить в Столбец «Регион», то данные по чему то не записываются.
join`ил следующим образом:
Код:
// Присоеденяем Регионы СНГ и МИР (МиМо, РФ, СНГ, Мир)
LEFT join (Demo_N)
LOAD
Страна,
Регион
FROM [lib://Demo_Country.xlsx]
(ooxml, embedded labels, table is Лист1);

// Присоеденяем Регионы МиМо и РФ (МиМо, РФ, СНГ, Мир)
LEFT join (Demo_N)
LOAD
Страна,
Область,
Регион as Регион_РФ
FROM [lib://Demo_Regions.xlsx]
(ooxml, embedded labels, table is Лист1);
http://i.imgur.com/TLYweZC.png
A:
Так же можно if-ом поиграться)
Код:
Tmp:
load * inline [
Область, Регион, РегионРФ
Краснодарский край, РФ, РФ
,СНГ,
Москва,РФ,МиМо
,Мир,
];

Add NoConcatenate
FactTable:
load Область,
Регион,
РегионРФ,
if(IsNull(РегионРФ) or len(РегионРФ)=0, Регион, РегионРФ) as НовыйРегион
Resident Tmp;

drop table Tmp;

Q: суть проблемы в следующем
есть 2 даты надо подсчитать кол- во дней межу этими датами которые были рабочими, т.е. исключить кол- во выходных и праздничных дней

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

Q: Знатоки, подскажите, пожалуйста, можно ли использовать AGGR функцию в скрипте?

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

LOAD
[№ заказа],
aggr(sum([Кол-во в заказе на дату заказа, шт.]),[№ заказа]) as [Кол-во позиций в заказе на дату заказа]
RESIDENT Таблица1;

A: Нет,
аналогичный aggr-у результат может быть получен конструкцией:
Код:
load sum([Кол-во в заказе на дату заказа, шт.]) As [Сумма в заказе]
resident откуда-то
GROUP BY [№ заказа]

Q: Имеется, вот такая таблица.

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

К примеру в итоге должно получиться следующее:
200 — Иванов
100 — Петров
100 — Не учтено.
Итого: 400

A: Самый простой способ прописать в формуле:
— в измерениях:
Код:
if(isnull(Продажа), ‘Не учтено’, Продажа)
— в скрипте в вашей Таблице фактов:
Код:
if(isnull(Продажа), ‘Не учтено’, Продажа) as Продажа
Вам решать, какой вариант лучше 🙂

Q: Подскажите, пожалуйста, по следующему вопросу. Загружаю 2 таблицы.
Первая содержит 3 поля:
— название товара,
— дата покупки,
— количество.
Вторая таблица содержит 2 поля:
— название товара,
— цена товара.

Мне нужно создать оповещение — если после загрузки скрипта есть товары, у которых поле «Цена товара» получается пустое, то нужно вывести такие товары в сообщении или в отдельной таблице, если это возможно. Подскажите, пожалуйста, как это реализовать?

A: Можно вывести значения в список.

1. Создаем новый объект листа — «Список»
2. В выборе поля — «<Выражение>»
3. Прописываем:
Код:
if(ЦенаТовара = 0 or isnull(ЦенаТовара), НазваниеТовара)

В этом случае у нас будут отображаться товары, у которых «Цена товара» пустое.

Чтобы не висел список постоянно, а появлялся только при обнаружении таких случаев, ставим условие на видимость объекта.
В свойствах списка — Макет -> Показать -> По условию:

Код:
count(if(ЦенаТовара = 0 or isnull(ЦенаТовара), НазваниеТовара))>0

P.s.: Так же можно прописать все в скрипте:

Код:
ТаблицаЦен:
load * inline [
НазваниеТовара, ЦенаТовара
1,100
2,200
3,300
4,
]
;

НулевыеЦены:
load if(ЦенаТовара = 0 or isnull(ЦенаТовара), НазваниеТовара) as НазваниеТовараСНулевойЦеной
resident ТаблицаЦен
;

У нас теперь есть отдельное поле, которые выводим в список.
Получаем список с одним значение «4»

Q: Привет, если я правильно понял задачу то вот примерный код:
Код:
export:
LOAD
FileName() as [Файл контракта],
[contract/id] as id,
[contract/number] as [№ контракта],
[contract/regNum] as [Номер реестровой записи контракта],
[contract/priceInfo/price] as [Цена контракта],
[contract/href] as [Ссылка на источник],
Date(Left([contract/publishDate],10),’DD MMMM YYYY’) as [Дата публикации]
FROM [Контракты\contract_*.xml] (XmlSimple, Table is [export]);
STORE * from export into export0.qvd (qvd);
DROP Table export;

tmp0:
Load *, Hash160([Номер реестровой записи контракта],[Дата публикации]) as IdRow from export0.qvd (qvd);
STORE * from tmp0 into export0.qvd (qvd);

tmp1:
load Hash160([Номер реестровой записи контракта],[МаксДата]) as IdRow;
LOAD max([Дата публикации]) as МаксДата,
[Номер реестровой записи контракта]
Resident tmp0
Group by [Номер реестровой записи контракта];
DROP Table tmp0;
Left join LOAD * from export0.qvd (qvd);
drop Field IdRow;

Но возникает вопрос, какую брать запись в том случае когда записи отличаются только по id? Как с
Номером реестровой записи контракта = 0151200007014000002 от 24/06/2015 .
Добрый день!
Номер id всегда уникален. А вот номер реестровой записи повторяется при внесение каких либо изменений в контракт. Соответственно нужно из нескольких записей с одинаковым реестровым номером взять данные с последней датой публикации.
Сейчас попробую данный код применить. Предыдущий код от KVV так и не смог приладить.

A: Обрати внимание на записи в снимке.
Все поля кроме ID и файла совпадают.

Q: Подскажите как данные
столбец столбец2 в нём суммы
«102000000
ВСеГО
I. СНг
АЗЕРБАЙДЖАН
II. Государства Мира
еВРОПА
НиДЕРЛАНДы
ПОЛЬшА
ФРАНЦиЯ
ЧЕХиЯ
«103000000
ПОЛЬшА
ФРАНЦиЯ
ЧЕХиЯ
загрузить так что бы можно было выбрать государство и сумму соответствующие определенному номеру

A:
Используя трансформацию мастера создания файлов можно прийти к требуемому результату за один этап загрузки.
Вот код, который формирует из моего примера требуемую таблицу.
Код:
LOAD text(@1) as Страна,
@2 As Значение,
text(@3) as Код
FROM [Книга1.xlsx]
(ooxml, no labels, table is Лист1, filters(
Remove(Row, RowCnd(CellValue, 1, StrCnd(equal, ‘Итого’))),
Remove(Row, RowCnd(CellValue, 1, StrCnd(contain, ‘Группа’))),
ColXtr(1, RowCnd(CellValue, 1, StrCnd(start, ‘1’)), 0),
Replace(3, top, StrCnd(null)),
ColXtr(1, RowCnd(CellValue, 1, StrCnd(start, ‘1’)), 0),
Replace(3, top, StrCnd(null)),
Remove(Row, RowCnd(CellValue, 1, StrCnd(start, ‘1’)))
));

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

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

Пример — на картинке строчка (дубликат во 2ой таблице) выделена желтым.

A: Проверьте
Код:

LOAD * INLINE [
F1, F2, F3
1, Кофта, 42
2, Штаны, 44
3, Блузка, 44
4, Футболка, 42
];

LOAD * INLINE [
F1, F2, F3
1, Кофта, 42
7, Футболка, 42
];
Будет загружено 6 записей в одну таблицу, «1, Кофта, 42» , будет повторяться.
В простой таблице будет отображаться 5 записей.
Наличие хоть одного Distinct приведет к тому, что дубли будут исключены. Но выглядит как-от непонятно, и чтобы не надеяться на внутренние механизмы Qlikivew можно сделать так:
Код:
load Distinct *;
LOAD * INLINE [
F1, F2, F3
1, Кофта, 42
2, Штаны, 44
3, Блузка, 44
4, Футболка, 42
];
LOAD * INLINE [
F1, F2, F3
1, Кофта, 42
7, Футболка, 42
];
В этом случае всем понятно что мы хотим сделать.

Q: Как реализовать подобную, штуку.
Нужно из xls файла залить данные по следующему принципу.
Столбец А, B, C с 15 по 31 строчку.
Столбец D, F, c 20 по 25 строчку,
Столбец М, только 22 строчку.

Обычно в загружал, только целый столбец, со всеми строчками. Как ограничить?

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

Where RecNo()>14 and RecNo()<32; и т.д. Затем соединяем. Или вариант попроще, Просто прописываем условия в полях например If(recno()=22,Мин) as Мин, If(RecNo()>14 and RecNo()<32,Макс) as Макс,
Найти решение у бизнес-партнера QlikTech (QlikView) в России.

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

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

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

65 queries in 0,224 seconds
Website nonton bokep jepang