Перед тем, как начать, несколько замечаний. Во-первых, я опубликовал пособие по Tableau Public, которое включает в себя примеры показанные ниже. Я также буду ссылаться на примеры с форума Tableau Community Forums. Во всех своих примерах я буду использовать фиксированные уровни детализации (FIXED LOD), которые являются наиболее распространенным типом, а также INCLUDE и EXCLUDE LOD-функции. Их использование может быть более подходящим в зависимости от ваших данных, значений в поле визуализации и других факторов. Стоит отметить, что некоторые из этих примеров могут быть выполнены с помощью табличных вычислений (Александр Мо сделал абсолютно то же в пособии — 20 Use Cases for Table Calculations). В некоторых случаях они обеспечивают даже более эффективное решение, но я все же хотел бы сосредоточится на использовании LOD.
1. Работа с дубликатами записей
Возможно, самое распространенное использование LOD-функций — это работа с дубликатами записей. К примеру, в нашей таблице для магазина под названием People есть по два человека на каждый регион. И когда вы объединяете таблицы заказов и людей, Orders и People, каждый заказ будет продублирован (в нашем случае для каждого заказа будет по две записи вместо одной). Если вы будете автоматически высчитывать сумму, то полученное значение будет в два раза больше реального.
С новыми возможностями моделирования данных разрабатываемых для Tableau эти проблемы будет гораздо проще решать, но сегодня пойдёт речь о том, как сделать это через LOD-функции. Чтобы решить проблему, описанную выше, можно сделать следующее:
Sales LOD (LOD-функция для подсчета продаж)
{FIXED [Row ID]: MAX([Sales])}
В этом случае, мы фиксируем Row ID, поскольку знаем, что для каждого ряда оно уникально в таблице заказов Orders. Далее мы берем максимальное значение для Sales. Рассчитываем и получаем следующее:
Возможно сейчас вы задаете себе вопрос: “А почему Tableau не агрегирует значение?”. К примеру, для Row ID 1, LOD-функция возвращает 262. Но, поскольку здесь есть дублированное значение, разве оно не должно суммироваться (как показано выше), ведь оно повторяется дважды для каждой записи? Дело в том, что LOD-функция действуют в лоб. В случае с Tableau, это отлично описывается в онлайн-справочнике, поэтому не будем тратить на это дополнительное время. Однако, я настоятельно рекомендую прочитать раздел “Aggregation and Level of Detail Expressions” (“ Вычисление и задание LOD-функций”) в главе о работе функций уровней детализации How Level of Detail Expressions Work in Tableau.
2. Получить единую агрегированную величину
Существует много сценариев, в которых можно получить общее минимальное или максимальное значение. Допустим, вы хотите найти максимальную сумму продаж для заказа. Мы можем создать следующую LOD для этого:
Max Customer Sales (максимальная сумма по заказам)
{FIXED : MAX([Sales])}
Мы хотим получить общий максимум по всем заказам, поэтому не зацикливаемся на каком-либо конкретном измерении.
Мы можем использовать это значение для любого вычисляемого поля, не беспокоясь о том, какие измерения используются в визуализации.
3. Если нужно изолировать конкретное значение
Иногда вы хотите получить общее значение, чтобы провести некоторые сравнения, как описано выше. Но иногда вам нужно выделить какое-то конкретное значение, а затем сделать его доступным для других целей. Например, у вас есть определенные данные и вы хотите получить последнюю дату, когда клиент приобрел технологию (“Technology”).
Можно создать следующую LOD-функцию, используя IF или IIF для того, чтобы изолировать эту величину.
Last Technology Order Date IF (Последний заказ “технологии”)
{FIXED [Customer Name]: MAX(
IF [Category]="Technology" THEN
[Order Date]
END
)}
Или то же, только используя IIF:
Last Technology Order Date IF (Последний заказ “технологии”)
{FIXED [Customer Name]: MAX(IIF( [Category]="Technology", [Order Date], NULL))}
Здесь стоит отметить, что, как показано выше, LOD-функции могут использоваться не только для получения конкретного значения. Хотя это наиболее распространенное их применение, но мы можем использовать их и для получения значений измерений.
4. Синхронизация осей диаграмм
Предположим, у вас есть две диаграммы на дашборде: одна показывает продажи для западного региона, а другая — для восточного.
Все выглядит неплохо, но есть одна проблема — оси не синхронизированы. В некоторых ситуациях это может быть хорошо, но во многих случаях это может привести к неправильной интерпретации информации пользователями. В приведенном выше примере лучше всего синхронизировать оси так, чтобы вы могли провести корректное сравнение между ними. Вы можете определить максимальный показатель на оси, но в конечном итоге это может не сработать, поскольку объем продаж может в превысить установленную вами границу.
Здесь мы можем применить следующий прием — использовать опорную линию для создания корректирующей фиксированной оси. Начнем с создания LOD-функции, чтобы получить сумму продаж за месяц для каждого региона. Выше показаны месячные продажи, поэтому мы хотим определить показания за месяц.
Region Month Sales (продажи региона за месяц)
{FIXED [Region], DATETRUNC('month', [Order Date]): SUM([Sales])}
Примечание:
Очень важно, чтобы вы не просто фиксировали месяц (т. е. дату заказа в форме MONTH([Order Date]), поскольку это даст вам лишь дискретные значения от 1 до 12. Вы должны убедиться, что включаете в эти данные и год, то есть фиксируете как год, так и месяц, или используете функцию DATETRUNC.
Тогда можно найти максимум из них для выбранных регионов:
Max Regional Monthly Sales (максимальные продажи в регионах за месяц)
// Maximum regional monthly sales
{FIXED : MAX([Region Month Sales])}
Теперь у нас есть одно рассчитанное поле, которое дает нам максимальную месячную прибыль от продаж в выбранных регионах. Далее заносим значение Max Regional Monthly Sales в свойства и создаем контрольную линию (reference line), которая выглядит следующим образом.
Примечание: Убедитесь, что отключили ярлыки и всплывающие подсказки, а саму линию сделали невидимой.
Как только вы добавите контрольную линию на все листы, она будет синхронизировать ваши оси координат. И это гораздо лучше, чем исправлять оси вручную, потому что область вычислений будет постоянно меняться с добавлением новых данных.
Другие примеры использования этой функции можно посмотреть по ссылке Creating Zoomable Charts in Tableau.
5. Найти минимум и максимум за все время
В некоторых случаях необходимо найти минимальное или максимальное значение среди показателей. Например, у вас есть подобный график и вы хотите выделить минимальное и максимальное значение.
Можно создать следующие LOD-функции:
Min Value (минимальное значение)
// Minimum total sales for a given month
{FIXED : MIN({FIXED DATETRUNC('month', [Order Date]) : SUM([Sales])})}
Max Value (максимальное значение)
// Maximum total sales for a given month
{FIXED : MAX({FIXED DATETRUNC('month', [Order Date]) : SUM([Sales])})}
Мы могли бы использовать их для выполнения различных действий, например, для нанесения опорных линий и границ. В других случаях, можно обозначить самые большие и маленькие значения точками.
Min or Max Sales (минимальное и максимальное значение продаж)
IF SUM([Sales]) = MIN([Min Value]) OR SUM([Sales]) = MAX([Max Value]) THEN
SUM([Sales])
END
Используя двойные оси, мы можем вывести эти точки на график:
Чтобы посмотреть на другие примеры зайдите сюда — Highest/Lowest Points on Sparklines (вывод самых высоких и низких значений)