Приветствую, коллеги.
Каюсь, каюсь и еще раз каюсь... Очередной простой в блоге, но Вы должны менять понять :) конец года как никак... Ну да ладно, хватит о грустном и перейдем непосредственно к самому интересному...
Сегодня предлагаю поговорить о таком интересном типе данных QlikView как Dual.
Как видно из его названия это некий двойной тип данных, а проще говоря, тип данных хранящий сразу два представления. Для начала давайте заглянем в справку и посмотрим что нам предлагает официальный источник. Заглянули? Отлично. А теперь приведу пример использования этой фичи из своего реального опыта. Для начала немного предыстории… Я всегда на всех проектах формирую отдельную таблицу календарь, где создаю на основании поля “Дата транзакции” различные поля типа: Год, Месяц, Квартал, Месяц-Год, Квартал-Год… Выглядит это примерно так:
Calendar:
LOAD
TransDate,
Year(TransDate) as Year,
Month(TransDate) as Month,
'Q' & ceil(Month(TransDate)/3) as Quarter,
Date(Monthstart(TransDate), 'MMM-YYYY') as MonthYear,
num(QuarterStart(TransDate))) as QuarterYear,
'Q' & Ceil(Month(TransDate)/3) &'-'& Year(TransDate) as QuarterYear,
Day(TransDate) as Day
;
LOAD
($(vMinDate) + IterNo()) as TransDate
AUTOGENERATE 1
WHILE ($(vMinDate) + IterNo()) <= $(vMaxDate);
И все вроде замечательно, пока я не обнаружил, что значения поля QuarterYear постоянно в различных объектах, будь то диаграмма(Chart) или список значений(ListBox), различным образом сортируется. В диаграмме по оси X может нормально сортироваться:
Q1-2008, Q2-2008, Q3-2008, Q4-2008, Q1-2009, Q2-2009…,
а в Списке значений может сортироваться как текст, т.е. как то так:
Q1-2008, Q1-2009, Q2-2008, Q2-2009, Q3-2008, Q3-2009,…
Причем настройка типа Сортировки(как Текст, либо как Число) в свойствах объекта не всегда приводила к нужному варианту, что заставило меня задуматься над этой ситуацией. Почему собственно наблюдается такое непредсказуемое поведение системы? Ведь в случае с очень похожем полем MonthYear ничего подобного и в помине нет – всегда сортируется так, как мы указываем в параметрах сортировки объекта. А ответ очень прост – посмотрите на реализацию календаря – поле MonthYear формируется при помощи функций работы с датами, просто выбирается необходимый формат представления - 'MMM-YYYY'. А поле QuarterYear реализуется в виде обычной строки, без какого либо намека на привязку к дате. В этом и весь ответ.
В итоге немного поразмыслив я переделал формирование своего календаря, а точнее поля QuarterYear. Теперь это выглядит следующим образом:
Dual('Q' & Ceil(Month(TransDate)/3) &'-'& Year(TransDate), num(QuarterStart(TransDate))) as QuarterYear
т.е. в поле QuarterYear мы “загоняем” сразу 2 типа данных: строковый и числовой. И в этом нам помогает собственно тип данных Dual. В результате теперь во всех объектах QlikView мы можем производить сортировку так как нам будет необходимо и система всегда правильно нас “поймет” и отсортирует значения в нужном порядке.
Вот такой вот натюрморт получается :).
Автор слегка чайник. Появляется проблема в табличных чартах - если значение ячейки невлазит в ширину столбца. Для сего есть Sort: Load order
ОтветитьУдалитьХм. интересное замечание про кухонную утварь :) Особенно лестно слышать это от анонима :) А каким боком сюда приплетена ширина столюца так вообще непонятно... Согласен, что одним из вариантов решения вышеописанных проблем может быть "Sort: Load order", однако, тип данных Dual как решение также вполне корректно на мой взгляд(взгляд автора)
ОтветитьУдалитьСпасибо , Анатолии . Пример может и не слиском удачен , но возможност функции передана прекрастно.
ОтветитьУдалитьи доступно.
Я исползовал Dual , когда нуйно отсортировать Character data in P&L reporting such account cathegory .
Revenue account should be first
then Cost Of Goods
Then Expenses
и так далее.
Great job on qlikview forum as well !!!!!!
Artur.