Qlik Community

QlikView Scripting

Discussion Board for collaboration on QlikView Scripting.

Announcements
QlikView Fans! We’d love to hear from you.
Share your QlikView feedback with the product team… Click here to participate in our 5-minute survey.
Rules, plus terms and conditions, can be found here.
dima1987
New Contributor II

Пара новичковых вопросов.

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

1.

Загружается пачка екселевских файлов, с названиями: Город.xlsx и столбцами (например) 

"покупки", "продажи", "дата".

Можно ли как-то собрать их в одну табличку со столбцами

"Город", "покупки", "продажи", "дата" ?

Т.е. как-то вытащить имя файла и загрузить его, как значение столбца.

2. (к первому никак не относится). Можно ли как-то сгруппировать таблицу, по 2м столбцам, из получившейся выкинуть строки по какому-либо условию и снова её разгруппировать, пользуясь тем,что осталось?

Заранее благодарю, за любую помощь.

1 Solution

Accepted Solutions
crusader_
Valued Contributor

Re: Пара новичковых вопросов.

1. Тогда в скрипте нужно будет делать циклическую загрузку.

Пример можно посмотреть тут

Re: Loading Multiple Excel Files In qlikview through Loop

Там более менее понятно должно быть.

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

Если нет, то можно создать

LOAD *,

     AutoNumberHash128(ФИО&[тип операции]&[код операции]) as KEY

from ...;

Результирующая таблица с агрегатами получается через Resident LOAD.

Потом к ней можно присоединить исходную таблицу на left join. Это первое что пришло в голову.

Возможно, если посидеть подумать, можно придумать и более изящное решение.

Всего доброго.

Андрей Калягин

4 Replies
crusader_
Valued Contributor

Re: Пара новичковых вопросов.

Добрый день,

1. В загрузочном скрипте необходимо дописать:

Таблица1:

LOAD

     Покупки,

     Продажи,

     Дата,

     left(filename(),index(filename(),'.xls')-1) as Город  // не важно будет ли это файл xls или xlsx

FROM .... xlsx;

concatenate //аналог операции UNION из SQL

LOAD

     Покупки,

     Продажи,

     Дата,

     left(filename(),index(filename(),'.xls')-1) as Город

FROM .... xlsx;

и т.д при загрузке файлов. Если имена столбцов будут идентичны и не используется инструкция QUALIFY, то Qlikview выполнит  Concatenate автоматически.

В итоге получится одна таблица с 4 столбцами.

2. Не совсем понял, что Вы имеете ввиду. Группировка полей подразумевает выполнение агрегации или нет?

Опишите более конкретный пример что Вы хотите получить, на таких-то исходных данных.

Всего доброго,

Андрей Калягин

dima1987
New Contributor II

Re: Пара новичковых вопросов.

1.Спасибо!

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

2. Да агрегация предполагается.

Есть поля : ФИО, Время начала, Время окончания, чистое время, тип операции... и куча других столбцов.

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

Вот необходимо выкинуть все строки, где разности между длинной сессии ( Время окончания-Время начала)

и Суммой 'чистое времябудет >10.

Т.е. на этом этапе вроде всё получается,

"..where avg(nach_vrem-kon_vrem)-sum(chist_vrem)<10

group by ФИО, Время начала;


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

И вот тут я в тупике.


crusader_
Valued Contributor

Re: Пара новичковых вопросов.

1. Тогда в скрипте нужно будет делать циклическую загрузку.

Пример можно посмотреть тут

Re: Loading Multiple Excel Files In qlikview through Loop

Там более менее понятно должно быть.

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

Если нет, то можно создать

LOAD *,

     AutoNumberHash128(ФИО&[тип операции]&[код операции]) as KEY

from ...;

Результирующая таблица с агрегатами получается через Resident LOAD.

Потом к ней можно присоединить исходную таблицу на left join. Это первое что пришло в голову.

Возможно, если посидеть подумать, можно придумать и более изящное решение.

Всего доброго.

Андрей Калягин

dima1987
New Contributor II

Re: Пара новичковых вопросов.

Точно, лефт джоином- то что надо. Спасибо.

Community Browser