Сегодня хочу рассмотреть тему агрегирования данных и рассказать о Dimensionality() в QlikView: что это за зверь, когда удобно использовать эту функцию и показать примеры работы с ней (анализ выполнения плана продаж компании и оценка эффективности работы персонала).
Dimensionality(): что это
Самое время дать определение функции Dimensionality(). Не буду оригинальничать и дам такое же определение как в HELPе по QlikView.
Dimensionality () – возвращает количество столбцов измерений, имеющих неагрегированное содержимое, т.е. не содержащих частичных сумм или свернутых агрегированных показателей.
Ну а теперь в деталях…
Dimensionality () используется в сводных таблицах, чтобы показать, какой уровень агрегирования является активным (развернутым). Так, если все измерения свернуты и видно только первое измерение, функция Dimensionality () возвращает значение 1; если первое измерение развернуто, то будет возвращаться значение 2 и так далее. Таким образом, эта функция отражает уровень вложенности в сводной таблице, и мы можем контролировать поведение выражения в зависимости от контекста. Например, у нас есть таблица с А, B, С и D измерениями, тогда выражение будет иметь разрядность равную пяти. Подитог для измерения D будет иметь размерность равную 4, для С – она будет равна трем, для B – двум, А – одному. Конечная сумма имеет нулевую разрядность.
Поняв эту концепцию, можно погружаться дальше в продвинутое агрегирование и сложные выражения, а сейчас вернемся к работе с Dimensionality ().
Dimensionality(): где использовать
Функция Dimensionality() используется в сводных таблиц, чаще всего, когда у нас есть относительные показатели, которые считаются по-разному на разных уровнях агрегирования, например, в случае работы с сальдовыми мерами.
Продемонстрирую на примере. У нас есть срез данных по средним остаткам за месяц с такими измерениями как ID товара и склад. Когда нам нужны только среднемесячные показатели, все работает хорошо. Но, а что делать, когда нам нужен показатель не за месяц, а год, то есть мы не можем написать единую формулу для всех столбцов? Тогда на помощь приходит функция Dimensionality (), которая говорит развернуто измерение или нет, указывая поведение выражения.
А еще с помощью Dimensionality можно добиться наглядности таблицы, выделяя цветами информацию с различными уровнями агрегирования. Как правило, используются в выражениях атрибута, когда необходимо применить различное форматирование ячеек в зависимости от уровня агрегирования данных.
НА ЗАМЕТКУ! Dimensionality () можно быть использовать только в выражениях диаграмм, ее нельзя использовать в скрипте. При использовании функции dimensionality ()
автоматически отключается запрещение нулевых значений. Для всех типов диаграмм, кроме сводной таблицы, будет возвращено количество измерений во всех строках, кроме общей, которая будет равна 0.
Функция Dimensionality (): пример с аналитикой по продажам
Функцию Dimensionality () можно использовать для анализа выполнения плана продаж в магазинах сети. Давайте пойдем по порядку. Как реализовать эту задачу в QlikView.
Шаг 1. Выбор данных
У нас есть таблица с четырьмя измерениями (столбцами): Продукт (Тип), Дата, Магазин ID, Количество), количеством строк — 40. Из таблицы видно, что значения в столбцах повторяются.
Поэтому для удобства анализа данных создаем сводную таблицу в QlikView, используя измерения из нашей Excel-таблицы.
Шаг 2. Загрузка данных в QlikView.
Загружаю все поля таблицы.
1 2 3 4 5 6 7 |
LOAD Продукт, Дата, [Магазин ID], ceil(Количество) FROM [C:\Users\...\Desktop\Данные\данные.xlsx] (ooxml, embedded labels, table is Лист1); |
Шаг 3. Создание сводной таблицы, использование Dimensionality().
Создаю новый объект листа «Диаграмма», тип диаграммы «Сводная таблица». В качестве измерений выбираю Продукт, Дата, Магазин ID.
- Dimensionality()
- Sum ([ceil(Количество)])
В результате получаю следующую таблицу.
НА ЗАМЕТКУ! Получившаяся таблица наглядней и информативней исходной прямой таблицы. Например, в ней видно количество товара по всем датам и по всем магазинам для Типа =‘Гриль’.
Рассмотрим подробнее 4-ый столбец, в котором отображаются значения функции Dimensionality(). В сводной таблице со столбцами с тремя измерениями слева Dimensionality() возвращается равной:
3 — для всех ячеек простых данных.
2 — для частичных сумм 1-го уровня и записей, не имеющих расширения в 3-м столбце.
1 — для частичных сумм 2-го уровня и записей, имеющих расширения только в 1-м столбце.
Шаг 4. Визуализация с помощью Dimensionality()
Убираю из таблицы столбец Dimensionality(). Для выражения Sum ([ceil(Количество)]) изменяю цвет фона:
1 |
if(Dimensionality()=1 ,RGB(255 ,182, 193),if(Dimensionality()=2 ,RGB(142, 229, 238),if(Dimensionality()=3, RGB(84 ,255, 159)))) |
Таким образом, получаю различные цвета фона для разных значений функции Dimensionality(), т.е. для каждого уровня агрегирования данных используется свой цвет.
Аналогично я настроила цвет текста в зависимости от уровня агрегирования данных. Цветовое разграничение помогает сделать содержащуюся в таблице информацию более наглядной и легко воспринимаемой.
Шаг 5. Цветовое решение для анализа плана продаж.
Сделаем так, чтобы в таблице сразу было видно, выполняется ли план. Зеленым цветом выделю, если план выполнен. Для однозначности задачи задам план:
Для типа ‘Пекарня’.
- Ежедневно в каждом магазине продается >=120 единиц товара – считаю, что план выполнен.
- Ежедневно во всех магазинах продается >=800 единиц товара – считаю, что план выполнен.
- За все даты во всех магазинах продается >=2000 единиц товара – считаю, что план выполнен.
Для типа ‘Гриль’.
- Ежедневно в каждом магазине продается >=6 единиц товара – считаю, что план выполнен.
- Ежедневно во всех магазинах продается >=29 единиц товара – считаю, что план выполнен.
- За все даты во всех магазинах продается >=120 единиц товара – считаю, что план выполнен.
Для типа ‘Пекарня’ и ‘Гриль’ использую разные оттенки зеленого цвета.
Для решения поставленной задачи для цвета фона выражения Sum ([ceil(Количество)]) я задала следующее значение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
if (Тип = 'Пекарня' and (sum([ceil(Количество)])>=120) and (Dimensionality()=3 ), RGB(152, 251, 152), if (Тип = 'Пекарня' and (sum([ceil(Количество)])>=800) and (Dimensionality()=2 ), RGB(152, 251, 152), if (Тип = 'Пекарня' and (sum([ceil(Количество)])>=2000) and (Dimensionality()=1 ), RGB(152, 251, 152), if (Тип = 'Гриль' and (sum([ceil(Количество)])>=6) and (Dimensionality()=3 ), RGB(0, 255, 127), if (Тип = 'Гриль' and (sum([ceil(Количество)])>=29) and (Dimensionality()=2 ), RGB(0, 255, 127), if (Тип = 'Гриль' and (sum([ceil(Количество)])>=120) and (Dimensionality()=1 ), RGB(0, 255, 127), ) ) ) ) ) ) |
Получаю таблицу, в которой видно, выполнен/не выполнен план.Так, например:
- План по ‘Пекарня’ за все даты и по всем магазинам – выполнен
- План по ‘Гриль’ за дату 01.01.2015 по всем магазинам – не выполнен
- План по ‘Гриль’ за дату 02.01.2015 по всем магазинам – выполнен
- План по ‘Гриль’ за дату 04.01.2015 по магазину 40506 – не выполнен
- План по ‘Гриль’ за дату 04.01.2015 по магазину 40515 – выполнен
Можно выделить красным цветом ячейки, для которых План не выполнен.
Замечание: Дополнительно я назначила метку «Количество» для выражения Sum([ceil(Количество)]).
Dimensionality(): Вместо заключения
Подведем небольшой итог: сегодня мы разобрались с возможным применением функции Dimensionality(), получили наглядную таблицу и решили распространённую задачу о проверке выполнения плана для данных с разным уровнем агрегирования.
На этом сегодня все.
P.S. Комментируйте и делитесь своими идеями по применению функции Dimensionality().
Свежие комментарии