Tableau - использовать другую палитру по названию
то, что я ищу, - это назначить цветовую палитру подкатегории. Я не нашел никакой информации в интернете для своей проблемы. Я объясню, используя фиктивные значения:
представьте, что у меня есть школьные данные, с именами учителей, студентов и дворников. В базе данных их именам предшествует их работа в школе (например: проф-Джон, Сент-Тринити, Функ-Мануэль). Цель состоит в том, чтобы построить график с годами на работе каждого человека. Можно создать вычисляемое поле и назначить синее учителям, красным студентам и зеленым дворникам, использующим содержит
2 ответов
самый простой подход, чтобы убедиться, что у вас есть два дискретные (т. е. синие) поля, обычно размеры. Скажем, один-профессия, а другой-годы работы bin. С помощью команды create bins можно создать дискретное измерение bin на основе лет измерения задания. Размер ячейки можно изменить, отредактировав поле bin.
затем вы можете разместить два дискретных поля на цветовой полке, если вы удерживаете клавишу SHIFT при добавлении второго поля. В в этом случае Tableau эффективно создаст комбинированное поле и разумно назначит цвета. Вы можете редактировать цветовые назначения, дважды щелкнув по цветовой легенде.
вот пример.
EDIT: это решение дает вам цветовую палитру для постоянной данные. Если вы хотите назначить цвета дискретным полям, это явно перебор. Предложение Алекса Блейкмора дискретизировать ваши непрерывные данные значительно упрощает этот процесс. Но если вы чувствуете себя резвым и хотите непрерывную цветовую палитру для каждого члена вашего измерения, это должно сделать трюк.
Tableau не позволяет назначать целые палитры члены измерения, но я нашел решение для вас. Несколько предостережений:
- Tableauing всегда кажется, что как-то глупо рубить за другим, но это действительно самый hacktastic вещь, которую я когда-либо делал в Tableau.
- вы собираетесь сделать много ручной работы. Ничто в этом процессе даже отдаленно не динамично.
- это решение чрезвычайно хрупкое. Если ваши данные в настоящее время не содержат ничего, кроме студентов, профессоров и дворников, но один день, вы добавляете человека, который является авантюристом, это немедленно сломается, и вам придется переделать большую часть своей работы.
так... считай, что тебя предупредили.
для простоты я просто буду иметь две роли в данных, но формулы, которые я использую, будут обобщены для любого количества ролей. Я также добавил возраст, просто чтобы у нас была мера для работы.
+-------------+-----+
| Person | Age |
+-------------+-----+
| prof-John | 53 |
| st-Trinity | 22 |
| prof-Andrew | 47 |
| st-Alice | 21 |
| st-George | 20 |
| st-Frank | 21 |
| prof-Ed | 74 |
| st-Ralph | 26 |
| st-Skrillex | 18 |
+-------------+-----+
давайте начнем с легкой части. Табло имеет аккуратный вариант сплит это разбивает поля на разделители. Если вы сделаете пользовательский сплит, вы можете выбрать разделитель, но Tableau довольно умно, поэтому, если вы просто выберете Split, есть солидный шанс, что он разберется для вас.
так щелкните правой кнопкой мыши на [Человек] и нажмите на Transform/Split. Это даст вам два вычисляемых поля, первое из которых выглядит так:
TRIM( SPLIT( [Person], "-", 1 ) )
должно быть довольно ясно, что это делает, и одинаково ясно, что второе поле будет выглядеть. Давайте переименуем эти поля в Role и Name, чтобы наша таблица выглядела так:
+-------------+------+----------+-----+
| Person | Role | Name | Age |
+-------------+------+----------+-----+
| prof-John | prof | John | 53 |
| st-Trinity | st | Trinity | 22 |
| prof-Andrew | prof | Andrew | 47 |
| st-Alice | st | Alice | 21 |
| st-George | st | George | 20 |
| st-Frank | st | Frank | 21 |
| prof-Ed | prof | Ed | 74 |
| st-Ralph | st | Ralph | 26 |
| st-Skrillex | st | Skrillex | 18 |
+-------------+------+----------+-----+
в конечном итоге будет важно добавить серийный идентификатор для каждой из ролей, начиная с 0. Мы будем использовать это число для математики позже. Поскольку у нас есть только две роли, мы можем просто сделать это вручную без особых усилий:
-
роль #
IF [Role] = 'st' THEN 0 ELSEIF [Role] = 'prof' THEN 1 END
если у вас есть больше значений, чем это, тогда вам нужно будет придумать что-то умное, но, честно говоря, если у вас достаточно значений, которые делают это вручную, это будет проблемой, то вы, вероятно, не должны давать каждому из этих значений свою собственную цветовую палитру в любом случае.
пользовательские цветовая палитра. (Вам нужно будет понять, как это работает для остальной части этого пост имеет смысл, поэтому нажмите на эту ссылку если вы не знаете, как сделать пользовательские цветовые палитры. Не волнуйся, это просто.) Более конкретно, мы собираемся построить единую последовательную палитру с областью для каждой из ваших ролей.
наша цель будет нормализовать и манипулировать нашими данными, чтобы студенты были в зеленом регионе, а профессора-в синем регионе. Начнем с нормализации.
мы понадобится минимальный и максимальный возраст в каждой роли, поэтому мы будем использовать выражения LOD:
-
Максимальный Возраст:
{ FIXED [Role] : MAX([Age]) }
-
Минимальный Возраст
{ FIXED [Role] : MIN([Age]) }
теперь давайте нормализуем возраст:
-
нормализованное значение возраста (NAV)
( ([Age] - [Minimum Age]) / ([Maximum Age] - [Minimum Age]) )
теперь у нас есть [нормализованное значение возраста] (отныне NAV) между 0 и 1 для каждого человека, нормализованное внутри каждая роль. Наши данные теперь выглядят так:
+-------------+------+--------+----------+-----+-----+-----+------+
| Person | Role | Role # | Name | Age | Min | Max | NAV |
+-------------+------+--------+----------+-----+-----+-----+------+
| prof-John | prof | 1 | John | 53 | 47 | 74 | .22 |
| st-Trinity | st | 0 | Trinity | 22 | 18 | 26 | .5 |
| prof-Andrew | prof | 1 | Andrew | 47 | 47 | 74 | 0 |
| st-Alice | st | 0 | Alice | 21 | 18 | 26 | .375 |
| st-George | st | 0 | George | 20 | 18 | 26 | .25 |
| st-Frank | st | 0 | Frank | 21 | 18 | 26 | .375 |
| prof-Ed | prof | 1 | Ed | 74 | 47 | 74 | 1 |
| st-Ralph | st | 0 | Ralph | 26 | 18 | 26 | 1 |
| st-Skrillex | st | 0 | Skrillex | 18 | 18 | 26 | 0 |
+-------------+------+--------+----------+-----+-----+-----+------+
теперь нам нужно переместить профессоров в синюю область нашей палитры, и здесь все становится немного сложнее.
в идеальном мире, который существует только в наших снах, мы могли бы просто добавить 1 к NAVs наших профессоров, давая нам NAVs между 0 и 1 для наших студентов и между 1 и 2 для наших профессоров, но наши мечты не заметили, что, поскольку мы используем последовательную цветовую палитру, есть "мертвые зоны"между каждой областью палитры.
предположим, мы построили последовательную цветовую палитру всего с двумя цветами для каждой цветовой области. Назовем их Green0, Green1, Blue0 и Blue1. Между Green1 и Blue0 будет пространство, где цвет постоянно меняется с зеленого на синий, что делает эту область непригодной для использования в нашей палитре. Мы можем привести эту точку домой, дискретизируя палитру:
что раздел зеленовато/голубовато-в середине -легче чем Green1. Поэтому нам нужно убедиться, что наши студенты получают только область палитры между Green0 и Green1, и что наши профессора получают только область палитры между Blue0 и Blue1.
мы не должны рассматривать green0 и Green1 регионы на нашей палитре-они точки. И эти точки разделили нашу палитру на три регионы, зеленая зона, Мертвая зона и синяя зона.
поскольку Мертвая зона - это просто пространство между нашими двумя цветовыми областями (между нашим окончательным зеленым цветом и нашим первым синим цветом), мы можем уменьшить размер мертвой зоны, добавив больше цветов, которые я не думаю, что это обязательно ценно, но это стоит отметить. Вот как выглядят зоны, если мы построим палитру с десятью цветами за регион.
теперь, если мы добавим больше цветовых областей в нашу палитру (например, красную зону), это добавит больше мертвых зон.
теперь нам просто нужна начальная точка каждой цветовой зоны и размер цветовой зоны, и мы заканчиваем с формулой:
[NAV] * [Color Zone Size] + [Color Zone Starting Point]
нетрудно подсчитать размер зон, когда вы знаете размер мертвых Зоны:
таким образом, формула для размера цвета зоны:
-
Цвета Размера
( ([numColorCodes] / [numColorZones]) - 1 ) / ([numColorCodes] - 1)
начальную точку легко вывести оттуда - это просто размер цветовой зоны плюс размер последующей мертвой зоны. Нам нужно будет умножить на ту роль #, которую мы рассчитали ранее:
-
Начало Цветовой Зоны Точка
( ([numColorCodes] / [numColorZones]) * [Role #] ) / ([numColorCodes] - 1)
Итак, повторяю, наше цветовое поле будет:
-
Цвета Координат
[NAV] * [Color Zone Size] + [Color Zone Starting Point]
я пошел вперед и собрал это вместе - вот гистограмма в качестве доказательства концепции.
и, в качестве бонуса, вот 20-кодовая цветовая палитра, которую я сделал.
<color-palette name="Hacktastic" type="ordered-sequential">
<color>#DBE9B1</color>
<color>#BFE38D</color>
<color>#A7DA72</color>
<color>#92D064</color>
<color>#80C45D</color>
<color>#70B557</color>
<color>#62A74D</color>
<color>#569A33</color>
<color>#498E0F</color>
<color>#398300</color>
<color>#B3D4DB</color>
<color>#8CCCE0</color>
<color>#71BFDF</color>
<color>#63ADD6</color>
<color>#4592C2</color>
<color>#2B7FB7</color>
<color>#1471B3</color>
<color>#1660A2</color>
<color>#1C508C</color>
<color>#24446F</color>
</color-palette>
теперь, очевидно, нужно добавить еще один цвет к этому палитра для включения дворников. К сожалению, этот бит всегда будет ручным, но вы можете сохранить несколько цветовых палитр с различным количеством зон, которые вы можете переработать в будущем. Вы также можете иметь таблицу подсчета количества цветовых зон вам нужно с:
{ FIXED : COUNTD([Role]) }
удачи.