Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
Январь 17, 2018, 07:56:22 am

Автор Тема: how to change header row with ODBC (xlsb binary-file)  (Прочитано 298 раз)

Оффлайн AdoreuLogy

  • Новичок
  • *
  • Сообщений: 10
  • Страна: ru
  • Рейтинг: +1/-0
    • Просмотр профиля
how to change header row with ODBC (xlsb binary-file)
« : Декабрь 08, 2017, 08:21:21 pm »
Коллеги, добрый день!

Заказчик предоставляет бинарный .xlsb замысловатого вида. Файл в аттачах.

Пишем:
ODBC CONNECT32 TO [Excel Files;DBQ=...\FileName.xlsb];
SQL SELECT * FROM `...\FileName.xlsb`.`Реестр$;
Как корректно выгрузить данные, где только 9 строка -- заглавие.

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1012
  • Страна: ru
  • Рейтинг: +104/-0
    • Просмотр профиля
Re: how to change header row with ODBC (xlsb binary-file)
« Ответ #1 : Декабрь 09, 2017, 11:17:33 am »
Привет.

В этом случае можно поступить следующим образом:
- загрузить все данные с использование предшествующего load c добавлением колонки = номер строки rowno() As RowID.
LOAD rowno() as RowId, *;
SQL SELECT * FROM `C:\Users\123\Documents\тест.xlsb`.`Лист1$`;

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


Оффлайн AdoreuLogy

  • Новичок
  • *
  • Сообщений: 10
  • Страна: ru
  • Рейтинг: +1/-0
    • Просмотр профиля
Re: how to change header row with ODBC (xlsb binary-file)
« Ответ #2 : Декабрь 09, 2017, 06:13:09 pm »
Спасибо, будем посмотреть.

Неофициальный форум пользователей QlikView & Qlik Sense

Re: how to change header row with ODBC (xlsb binary-file)
« Ответ #2 : Декабрь 09, 2017, 06:13:09 pm »

Оффлайн AdoreuLogy

  • Новичок
  • *
  • Сообщений: 10
  • Страна: ru
  • Рейтинг: +1/-0
    • Просмотр профиля
Re: how to change header row with ODBC (xlsb binary-file)
« Ответ #3 : Декабрь 11, 2017, 01:07:06 pm »
rowno() As RowID.
LOAD rowno() as RowId, *;
SQL SELECT * FROM `C:\Users\123\Documents\тест.xlsb`.`Лист1$`;

Так, пишу предшествующий лоад, гружу
SQL SELECT * FROM WHERE RowId > 8;
Возвращает типичное:
> SQL##f - SqlState: 07001, ErrorCode: 4294964286, ErrorMsg: [Microsoft][Драйвер ODBC Excel] Слишком мало параметров. Требуется 1.

Я кликвьювер не-настоящий, поэтому могу примитивных вещей не понимать.

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1012
  • Страна: ru
  • Рейтинг: +104/-0
    • Просмотр профиля
Re: how to change header row with ODBC (xlsb binary-file)
« Ответ #4 : Декабрь 11, 2017, 01:15:26 pm »
Сначала загрузите все строки, добавьте номер строки.
Затем, уже после просмотра результата сформируйте условие для обрезки заголовка.

Оффлайн AdoreuLogy

  • Новичок
  • *
  • Сообщений: 10
  • Страна: ru
  • Рейтинг: +1/-0
    • Просмотр профиля
Re: how to change header row with ODBC (xlsb binary-file)
« Ответ #5 : Декабрь 11, 2017, 01:39:30 pm »
Затем, уже после просмотра результата сформируйте условие для обрезки заголовка.
Т.е., гружу sql_table: SQL SELECT,
затем пишу привычное
table1:
load *
resident sql_table
where rowid > 8;

table1 не формируется под действием неведомых сил.

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1012
  • Страна: ru
  • Рейтинг: +104/-0
    • Просмотр профиля
Re: how to change header row with ODBC (xlsb binary-file)
« Ответ #6 : Декабрь 11, 2017, 01:42:50 pm »
При загрузке из бинарника не используйте никаких условий.
Результат есть?
Заголовок в таблице в 9 строке, но при загрузке первой строкой будет строка в которой появится первое значение в любой колонке.

Неофициальный форум пользователей QlikView & Qlik Sense

Re: how to change header row with ODBC (xlsb binary-file)
« Ответ #6 : Декабрь 11, 2017, 01:42:50 pm »

Оффлайн AdoreuLogy

  • Новичок
  • *
  • Сообщений: 10
  • Страна: ru
  • Рейтинг: +1/-0
    • Просмотр профиля
Re: how to change header row with ODBC (xlsb binary-file)
« Ответ #7 : Декабрь 11, 2017, 02:11:34 pm »
При загрузке из бинарника не используйте никаких условий.
Результат есть?

Да, гружу бинарник безусловно.
Результирующая таблица Table1, понятно, содержит "не те" поля.
ОК.
Затем гружу буферный Table2 LOAD * RESIDENT Table1 WHERE RowId > 8;, в котором провожу выборку записей по интересующий нас заголовок. Затем гружу уже итоговую таблицу со всеми наворотами, сборка проходит без ошибок, но итоговой таблицы нет. Возможно можно обойтись и БЕЗ буфера Table2, но тогда поля определяются -- как несуществующие.

Заголовок в таблице в 9 строке, но при загрузке первой строкой будет строка в которой появится первое значение в любой колонке.
Это первая строка.

Оффлайн AdoreuLogy

  • Новичок
  • *
  • Сообщений: 10
  • Страна: ru
  • Рейтинг: +1/-0
    • Просмотр профиля
Re: how to change header row with ODBC (xlsb binary-file)
« Ответ #8 : Декабрь 11, 2017, 03:22:55 pm »
Пример файла импорта.

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1012
  • Страна: ru
  • Рейтинг: +104/-0
    • Просмотр профиля
Re: how to change header row with ODBC (xlsb binary-file)
« Ответ #9 : Декабрь 11, 2017, 03:37:49 pm »
t1:
LOAD RowNo() as RowId,*;
SQL SELECT *
FROM "Реестр$";
t2:
NoConcatenate
load * Resident t1 where RowId>8;
DROP Table t1;

Оффлайн AdoreuLogy

  • Новичок
  • *
  • Сообщений: 10
  • Страна: ru
  • Рейтинг: +1/-0
    • Просмотр профиля
Re: how to change header row with ODBC (xlsb binary-file)
« Ответ #10 : Декабрь 11, 2017, 04:20:31 pm »
Так он верно собирает данные, но в качестве заголовков тянет первые NOTNULL-значения. Как это победить?

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1012
  • Страна: ru
  • Рейтинг: +104/-0
    • Просмотр профиля
Re: how to change header row with ODBC (xlsb binary-file)
« Ответ #11 : Декабрь 11, 2017, 08:11:05 pm »
Ну если названия не будут меняться можно и просто вручную переименовать при загрузке.
Если же часть выше заголовка ненадежна можно выгрузить таблицу в qvd-файл, и используя Функции файлов
, циклы и операторы скрипта добиться желаемого результата.

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

Оффлайн AdoreuLogy

  • Новичок
  • *
  • Сообщений: 10
  • Страна: ru
  • Рейтинг: +1/-0
    • Просмотр профиля
Re: how to change header row with ODBC (xlsb binary-file)
« Ответ #12 : Декабрь 12, 2017, 07:54:49 pm »
Store Into CSV позволяет задать нужные заголовки.
Единственное, при подключении теряются ~700 полей -- большой файл  :) :).

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1012
  • Страна: ru
  • Рейтинг: +104/-0
    • Просмотр профиля
Re: how to change header row with ODBC (xlsb binary-file)
« Ответ #13 : Декабрь 12, 2017, 08:55:21 pm »
то есть теряются? бинарник не отдает все колонки?
Конвертируйте в открытый формат.

Оффлайн AdoreuLogy

  • Новичок
  • *
  • Сообщений: 10
  • Страна: ru
  • Рейтинг: +1/-0
    • Просмотр профиля
Re: how to change header row with ODBC (xlsb binary-file)
« Ответ #14 : Декабрь 13, 2017, 10:52:09 am »
То есть -- конвертируйте? Отказаться от бинарника?
Поля теряются при подключении.