Выполнить несколько преобразований groupby и агрегатных функций в Tableau

#if-statement #tableau-api #visualization

#оператор if #tableau-api #визуализация

Вопрос:

У меня есть набор данных, который выглядит очень похоже на приведенные ниже данные.

  1. Я хотел бы создать две группы, используя значения в столбце group.

    группа 1 — новая amp;

    group2 — старый

  2. В group1 — new я хотел бы затем сгруппировать идентификатор и взять среднее значение каждого сгруппированного идентификатора, а затем суммировать

данные:

      id     type    backup  free    total   Last refreshed
     a      old     1       4       5       11/1/2020
     b      old     1       4       5       11/1/2020
     c      old     1       4       5       11/1/2020
     d      new     2       1       3       11/1/2020
     e      new     2       1       3       11/1/2020
     f      old     1       1       2       11/1/2020
     g      old     1       1       2       11/1/2020
     e      new     2       2       4       11/1/2020
     d      new     2       2       4       11/1/2020
 

1-й шаг — создайте group1 и group2

     id  group   type    used free   total   Last refreshed
    a   group2  old     1    4      5       11/1/2020
    b   group2  old     1    4      5       11/1/2020
    c   group2  old     1    4      5       11/1/2020
    f   group2  old     1    1      2       11/1/2020
    g   group2  old     1    1      2       11/1/2020
    d   group1  new     2    1      3       11/1/2020
    e   group1  new     2    1      3       11/1/2020
    e   group1  new     2    2      4       11/1/2020
    d   group1  new     2    2      4       11/1/2020
 

2-й шаг идентификатор groupby

 id  group   type    used    free    total       Last refreshed
   d    new     group1  2       1       3       11/1/2020
   d    new     group1  2       2       4       11/1/2020
   e    new     group1  2       1       3       11/1/2020
   e    new     group1  2       2       4       11/1/2020
   a    old     group2  1       4       5       11/1/2020
   b    old     group2  1       4       5       11/1/2020
   c    old     group2  1       4       5       11/1/2020
   f    old     group2  1       1       2       11/1/2020
   g    old     group2  1       1       2       11/1/2020
 

3-й шаг
мы группируем по идентификатору и берем среднее значение d (для каждого столбца)
мы группируем по идентификатору и берем среднее значение e (для каждого столбца).
затем мы суммируем значения в старой группе (для каждого столбца).
затем мы суммируем их в целом

   id    used    free    total   Last refreshed
  d     2       1.5     3.5     11/1/2020
  e     2       1.5     3.5     11/1/2020
  old   5       14      19      11/1/2020
 

Желаемый результат

Все это суммируется вместе, чтобы получить:

  used   free    total   Last refreshed
 9      17      26      11/1/2020
 

График:

введите описание изображения здесь

Это то, что я делаю:

2. поместите тип в группы 2. создайте вычисляемое поле

 zn(avg(if [Group]= 'Group1' end))
 
zn(sum(if [Group] = 'Group2' end))
 

введите описание изображения здесь

любое предложение приветствуется

Комментарии:

1. В вашей group2 все id s разные, нет двух одинаковых. Итак, если вы возьмете среднее значение этих отдельных строк (в group2), результат будет таким же. Кроме того, как предлагалось ранее, вам необходимо повернуть столбцы, чтобы отобразить значения меры вместе. Я пытаюсь сказать, что (i) если идентификаторы группы различны, проблема может быть решена намного проще, (ii) С вашим желаемым результатом, показанным выше, вы не можете достичь визуального (просто потому, что в вашем результате есть три меры, а на диаграмме только одна)

2. @AnilGoyal значения в group2 должны быть только суммированы. Меры используются, доступны и суммируются

3. Нет ли способа создать две группы: group1 и group2, а затем сгруппировать по значениям в одной из этих групп и взять среднее значение, а другое — сумму? Я все еще работаю над этим

4. @Lynnette может ли ваш образец данных когда-либо содержать более одной строки для «старого» идентификатора, скажем, две строки данных с id =»a'»? если да, то не могли бы вы сначала сгруппировать по идентификатору и усреднить значения (перед последним шагом суммирования), как вы делаете с новыми идентификаторами?

5. Точно, Алекс! именно это я и пытался спросить у Линетт. Если все старые идентификаторы имеют одну строку на дату, проблема намного проще. смотрите этот снимок экрана

Ответ №1:

Для первой части, т.е. Преобразований и агрегаций groupby, пожалуйста, создайте три вычисляемых поля со следующими вычислениями

  1. desired free
 {SUM({Fixed [Last Refreshed]: SUM(IF [Type] = "new" THEN
{FIXED [Last Refreshed], [Type], [Id] : AVG([Free])}
ELSEIF [Type] = "old"
THEN {FIXED [Last Refreshed], [Type], [Id] : SUM([Free])}
END)})}
 

аналогично для desired used и desired total . Вы получите агрегированную таблицу по желанию (см. Скриншот)

введите описание изображения здесь

Для создания гистограммы (в стеке) вам нужно будет преобразовать (преобразовать) данные, объединив используемые и свободные в одно измерение. Если вы хотите, я могу снова представить вам решение.

Комментарии:

1. Хорошее решение — да, есть ли способ представить с помощью гистограммы

2. К вашему сведению, для интенсивного использования вычислений LOD требуются затраты на сложность и производительность. Полезный, а иногда и необходимый инструмент, но я бы сначала попробовал вычисления уровня записи и агрегирования, а затем добавлял вычисления LOD в микс только при необходимости.