Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

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

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

1.

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

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

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

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

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

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

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

1 Solution

Accepted Solutions
crusader_
Partner - Specialist
Partner - Specialist

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

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

Re: Loading Multiple Excel Files In qlikview through Loop

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

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

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

LOAD *,

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

from ...;

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

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

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

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

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

View solution in original post

4 Replies
crusader_
Partner - Specialist
Partner - Specialist

Добрый день,

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. Не совсем понял, что Вы имеете ввиду. Группировка полей подразумевает выполнение агрегации или нет?

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

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

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

Anonymous
Not applicable
Author

1.Спасибо!

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

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

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

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

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

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

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

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

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


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

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


crusader_
Partner - Specialist
Partner - Specialist

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

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

Re: Loading Multiple Excel Files In qlikview through Loop

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

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

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

LOAD *,

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

from ...;

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

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

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

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

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

Anonymous
Not applicable
Author

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