20 способов использовать LOD-функции, 1 часть

Перед тем, как начать, несколько замечаний. Во-первых, я опубликовал пособие по 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 (вывод самых высоких и низких значений)

20 Uses for Level-of-Detail Calculations

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.