Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
Декабрь 18, 2017, 07:47:10 pm

Автор Тема: Проблема с датами в Qlikview / Qlik Sense  (Прочитано 5264 раз)

Оффлайн mutniyglaz

  • Новичок
  • *
  • Сообщений: 26
  • Рейтинг: +1/-0
    • Просмотр профиля
Проблема с датами в Qlikview / Qlik Sense
« : Февраль 17, 2015, 11:19:37 am »
Доброе утро!

Загружаю файл Календарь.

Загружаю файл Продажи - S 01.2013. В данном файле указана суммы продаж по датам.

1. Загружаю как Кросс-таблицу. Выбираю встроенные метки и при загрузке даты становятся числовыми значениями -
01.01.2013 - 41275
02.01.2013 - 41276
03.01.2013 - 41277

2. Поле дата из файла Продаж не ассоциируется с датами из файла Календарь

Вопросы:
1. Как все таки загружать даты чтобы они оставались датами
2. Как добиться того, чтобы поле Дата одинаково ассоциировалось в обоих файлах

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1005
  • Страна: ru
  • Рейтинг: +103/-0
    • Просмотр профиля
Re: Проблема с датами
« Ответ #1 : Февраль 17, 2015, 01:03:07 pm »
Добрый день.

Когда мы загружаем данные из таблицы Excel, то грузятся не отображаемые данные (настроенные по формату ячейки) а подлинные значения. В случае с датами, загружаются числа либо текстовое представление числа, если Qlikview берет данные из заголовка, как в вашем случае.
Обычно, форматы полей при загрузке данных можно подкорректировать в операторе LOAD, предшествующем LOAD FROM.
Но в случае с матрицами этот вариант исключен, поэтому мы воспользуемся обработкой таблицы оператором Load Resident, в котором сначала преобразуем текст в число num#(Дата).
(О том, что поле Дата содержит текстовые данные можно узнать из обозревателя таблиц, наведя курсор на интересующее нас поле.)
Затем число преобразовываем в дату для нормального отображения, согласно установкам системы.
Получится скрипт:
tmp1:
CrossTable(Дата, Данные, 3)
LOAD Номенклатура.Код,
     Партнер.Код,
     ВидРеализации,
     [41275],
     [41276],
     [41277],
     [41278],
     [41279],
     [41280],
     [41281],
     [41282],
     [41283],
     [41284],
     [41285],
     [41286],
     [41287],
     [41288],
     [41289],
     [41290],
     [41291],
     [41292],
     [41293],
     [41294],
     [41295],
     [41296],
     [41297],
     [41298],
     [41299],
     [41300],
     [41301],
     [41302],
     [41303],
     [41304],
     [41305]
FROM
[S 01.2013 - копия.xlsx]
(ooxml, embedded labels, table is TDSheet);

Продажи:
NoConcatenate
load Номенклатура.Код,
     Партнер.Код,
     ВидРеализации,
     date(num#(Дата)) as [Дата],
     Данные
Resident tmp1;
DROP Table tmp1;

В итоге получаем таблицу с полем Дата, которое как и положено содержит числовое значение даты, но отображается в формате даты и будет стыковаться с одноименными полями аналогичного формата.



Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1005
  • Страна: ru
  • Рейтинг: +103/-0
    • Просмотр профиля
Re: Проблема с датами
« Ответ #2 : Февраль 17, 2015, 01:10:43 pm »
Далее грузим подготовленный календарь, который также можно сформировать в Qlikview.
LOAD date(Дата) As Дата,
     Месяц,
     Квартал,
     Год
FROM
[Календарь.xlsx]
(ooxml, embedded labels, table is Лист1);

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

Re: Проблема с датами
« Ответ #2 : Февраль 17, 2015, 01:10:43 pm »

Оффлайн mutniyglaz

  • Новичок
  • *
  • Сообщений: 26
  • Рейтинг: +1/-0
    • Просмотр профиля
Re: Проблема с датами
« Ответ #3 : Февраль 17, 2015, 03:33:33 pm »
С Календарем разобрался, но с Датами из файла Продажи, не получается... Скорее всего запутался в скрипте...

Мне надо загружать:
1. Таблица:

CrossTable(Дата, Данные, 3)
LOAD Номенклатура.Код,
     Партнер.Код,
     ВидРеализации,
     [41275],
     [41276], и т.д.

2. В этом же скрипте как продолжение:

Продажи:
NoConcatenate
load Номенклатура.Код,
     Партнер.Код,
     ВидРеализации,
     date(num#(Дата)) as [Дата],
     Данные

В данном скрипте что такое:

"Продажи:"
"Данные"

?

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1005
  • Страна: ru
  • Рейтинг: +103/-0
    • Просмотр профиля
Re: Проблема с датами
« Ответ #4 : Февраль 17, 2015, 07:19:34 pm »
Изначально, когда выполняется первый скрипт, преобразующий матрицу в обычную таблицу
tmp1:
CrossTable(Дата, Данные, 3)
LOAD Номенклатура.Код,
     Партнер.Код,
     ВидРеализации,
     [41275],
     [41276],
     [41277],
     [41278],
     [41279],
     [41280],
     [41281],
     [41282],
     [41283],
     [41284],
     [41285],
     [41286],
     [41287],
     [41288],
     [41289],
     [41290],
     [41291],
     [41292],
     [41293],
     [41294],
     [41295],
     [41296],
     [41297],
     [41298],
     [41299],
     [41300],
     [41301],
     [41302],
     [41303],
     [41304],
     [41305]
FROM
[S 01.2013 - копия.xlsx]
(ooxml, embedded labels, table is TDSheet);
Формируется таблица tmp1:
(Извините, но вы не имеете доступа к галерее)

Оффлайн mutniyglaz

  • Новичок
  • *
  • Сообщений: 26
  • Рейтинг: +1/-0
    • Просмотр профиля
Re: Проблема с датами
« Ответ #5 : Февраль 17, 2015, 08:15:01 pm »
Не могу понять куда подставлять скрипт, который будет определять дату

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1005
  • Страна: ru
  • Рейтинг: +103/-0
    • Просмотр профиля
Re: Проблема с датами
« Ответ #6 : Февраль 17, 2015, 08:29:57 pm »
Но так как нас не устраивает такой формат поля Дата, мы запускаем еще один запрос
Продажи:
NoConcatenate
load Номенклатура.Код,
     Партнер.Код,
     ВидРеализации,
     date(num#(Дата)) as [Дата],
     Данные
Resident tmp1;
DROP Table tmp1;
И получаем таблицу уже с нужным форматом поля Дата
(Извините, но вы не имеете доступа к галерее)
Т.е. очередность такая:
- грузим из Excel матрицу и преобразовываем в таблицу tmp1.
- формируем таблицу Продажи из tmp1, с преобразованием Дата в формат даты.
- Удаляем первую, промежуточную таблицу Tmp1.

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

Re: Проблема с датами
« Ответ #6 : Февраль 17, 2015, 08:29:57 pm »

Оффлайн mutniyglaz

  • Новичок
  • *
  • Сообщений: 26
  • Рейтинг: +1/-0
    • Просмотр профиля
Re: Проблема с датами
« Ответ #7 : Февраль 17, 2015, 08:43:55 pm »
Resident tmp1;
DROP Table tmp1;

я так понимаю эти команды тоже надо использовать?

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1005
  • Страна: ru
  • Рейтинг: +103/-0
    • Просмотр профиля
Re: Проблема с датами
« Ответ #8 : Февраль 18, 2015, 08:12:37 am »
Приведу цитаты из документации.

Цитировать
Загрузка данных из ранее загруженной таблицы
Можно использовать логическое условие Resident в операторе LOAD, чтобы загрузить данные из ранее загруженной таблицы. Это удобно, когда необходимо выполнить вычисления с данными, загруженными с помощью оператора SELECT, когда нет возможности использовать функции Qlik Sense, такие как обработка даты или числовых значений.

Цитировать
Часто элемент Resident используется, при необходимости временной таблицы для выполнения вычислений или фильтра. Если временная таблица больше не нужна, избавьтесь от нее с помощью оператора Drop table.

Цитировать
Элемент Resident или предшествующий элемент LOAD?

В большинстве случаев тот же результат можно достичь с помощью предшествующего элемента LOAD. Это оператор LOAD, который выполняет загрузку из оператора LOAD или SELECT ниже, не указывая префикс источника, такой как From или Resident, который обычно указывается. Предшествующий элемент LOAD — это обычно более быстрый способ, но есть случаи, когда необходимо использовать Resident LOAD:

    В случае необходимости использования утверждения Order_by для сортировки записей перед обработкой оператора LOAD.
    В случае необходимости использования одного из следующих префиксов. В этом случае предшествующий элемент LOAD не поддерживается:
        Crosstable
        Join
        Intervalmatch

Первоисточник

Оффлайн mutniyglaz

  • Новичок
  • *
  • Сообщений: 26
  • Рейтинг: +1/-0
    • Просмотр профиля
Re: Проблема с датами
« Ответ #9 : Февраль 18, 2015, 09:59:35 am »
Спасибо, буду разбираться  :)

Оффлайн mutniyglaz

  • Новичок
  • *
  • Сообщений: 26
  • Рейтинг: +1/-0
    • Просмотр профиля
Re: Проблема с датами
« Ответ #10 : Февраль 18, 2015, 10:05:30 am »
Ура, получилось!!!

Буду читать подробно документацию )

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1005
  • Страна: ru
  • Рейтинг: +103/-0
    • Просмотр профиля
Re: Проблема с датами
« Ответ #11 : Февраль 18, 2015, 10:48:10 am »
Буду читать подробно документацию )

По загрузке данных рекомендую скачать в PDF-формате руководство
Загрузка и моделирование данных для Sense, но справедливо и для Qlikview (кроме источников lib)

Оффлайн mutniyglaz

  • Новичок
  • *
  • Сообщений: 26
  • Рейтинг: +1/-0
    • Просмотр профиля
Re: Проблема с датами
« Ответ #12 : Февраль 18, 2015, 12:24:26 pm »
С одной таблицей все получилось за (допустим) январь месяц.

Но я планирую загружать порядка 24 таблиц за 2 года.

Данную процедуру замены данных придется делать для каждой таблицы?

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1005
  • Страна: ru
  • Рейтинг: +103/-0
    • Просмотр профиля
Re: Проблема с датами
« Ответ #13 : Февраль 18, 2015, 01:27:22 pm »
А почему бы не взять данные сразу из базы?
Или сформировать отчет в табличном варианте и затем уже загружать.
Иначе, для каждого месяца потребуется править сценарий.

Оффлайн mutniyglaz

  • Новичок
  • *
  • Сообщений: 26
  • Рейтинг: +1/-0
    • Просмотр профиля
Re: Проблема с датами
« Ответ #14 : Февраль 18, 2015, 01:39:04 pm »
А почему бы не взять данные сразу из базы?

Из 1С?

Или сформировать отчет в табличном варианте и затем уже загружать.

Отчет в табличном варианте, но Дни продаж по столбцам идут...