# Дополнительные ресурсы
## Мои материалы
- [Курс "BI разработчик. Основы работы в Tableau"](https://stepik.org/course/56280/promo)
- [Видеоуровки по работе с Tableau в Youtube](https://www.youtube.com/watch?v=TL_4HdyuJoI&list=PLiEhcUyRBhuGPT80soCtMaq85vFRRpuU6)
## Официальные ресурсы Tableau
- [Tableau Public](https://public.tableau.com/app/discover)
- [Скачать Tableau Public](https://www.tableau.com/products/public/download)
- [Видеокурсы с основами работы от Tableau (англ)](https://www.tableau.com/learn/training)
# Создание дашборда №1
## Пример дашборда
https://public.tableau.com/app/profile/artem6593/viz/SuperstoreHigh-LevelDashboardv_222-03/SuperstoreHigh-LevelDashboard
## Формулы текущий и прошлый год
### Sales
**Sales Current Year**
```sql!=
IF YEAR([Order Date]) = INT([Year])
THEN [Sales]
END
```
---
**Sales Previous Year**
```sql!=
IF YEAR([Order Date]) = INT([Year])-1
THEN [Sales]
END
```
---
### Profit
**Profit Current Year**
```sql!=
IF YEAR([Order Date]) = INT([Year])
THEN [Profit]
END
```
---
**Profit Previous Year**
```sql!=
IF YEAR([Order Date]) = INT([Year])-1
THEN [Profit]
END
```
---
### Orders
**Orders Current Year**
```sql!=
COUNTD(
IF YEAR([Order Date]) = INT([Year])
THEN [Order ID]
END
)
```
---
**Orders Previous Year**
```sql!=
COUNTD(
IF YEAR([Order Date]) = INT([Year])-1
THEN [Order ID]
END
)
```
---
### Customers
**Customers Current Year**
```sql!=
COUNTD(
IF YEAR([Order Date]) = INT([Year])
THEN [Customer Name]
END
)
```
---
**Customers Previous Year**
```sql!=
COUNTD(
IF YEAR([Order Date]) = INT([Year])-1
THEN [Customer Name]
END
)
```
---
## Формулы проценты
Форматирование процентов
`▲ +0.0%; ▼ -0.0%`
---
**Sales % Difference**
```sql!=
(SUM([Sales Current Year]) - SUM([Sales Previous Year]))
/
SUM([Sales Previous Year])
```
---
**Profit % Difference**
```sql!=
(SUM([Profit Current Year]) - SUM([Profit Previous Year]))
/
SUM([Profit Previous Year])
```
---
**Orders % Difference**
```sql!=
(([Orders Current Year]) - ([Orders Previous Year]))
/
([Orders Previous Year])
```
---
**Customers % Difference**
```sql!=
(([Customers Current Year]) - ([Customers Previous Year]))
/
([Customers Previous Year])
```
## Прочие расчеты
### Создание параметра Choose Measure

Значения для параметра
- `Sales`
- `Profit`
- `Customers`
- `Orders`
---
### **Measure**
```sql!=
CASE [Choose Measure]
WHEN 'Sales' THEN SUM([Sales])
WHEN 'Profit' THEN SUM([Profit])
WHEN 'Customers' THEN COUNTD([Customer Name])
WHEN 'Orders' THEN COUNTD([Order ID])
END
```
---
### **Color for table**
```sql!=
if (ZN([Measure]) - LOOKUP(ZN([Measure]), -1)) / ABS(LOOKUP(ZN([Measure]), -1)) < 0
then 'Red'
else 'Green'
end
```
# Создание дашборда №2
**Название KPI**
- Total Orders
- Returned Orders |
- Average Order Value
- Average Delivery Time
## Orders
**Total Orders**
`COUNTD([Order ID])`
---
**Max Orders #**
`IF [Total Orders] = WINDOW_MAX([Total Orders]) THEN [Total Orders] END`
---
**Min Orders #**
`IF [Total Orders] = WINDOW_MIN([Total Orders]) THEN [Total Orders] END`
---
**% of Returned Orders**
`COUNTD(IF [Returned] = 'Yes' THEN [Order ID] END) / SUM( { COUNTD([Order ID]) } )`
---
## Average Orders
**Avg Order Value**
`SUM([Sales]) / [Total Orders]`
---
**Max AOV**
`IF [Avg Order Value] = WINDOW_MAX([Avg Order Value]) THEN [Avg Order Value] END`
---
**Min AOV**
`IF [Avg Order Value] = WINDOW_MIN([Avg Order Value]) THEN [Avg Order Value] END`
## Order Delivery Time
**Order Delivery Time**
`DATEDIFF('day', [Order Date], [Ship Date])`
---
**Max Avg Delivery Time**
`IF AVG([Order Delivery Time]) = WINDOW_MAX(AVG([Order Delivery Time])) THEN AVG([Order Delivery Time]) END`
---
**Min Avg Delivery Time**
`IF AVG([Order Delivery Time]) = WINDOW_MIN(AVG([Order Delivery Time])) THEN AVG([Order Delivery Time]) END`
---
## Прочие формуры
**Distinct Orders for Donut**
`COUNTD([Order ID])`
---
**Orders Difference for Donuts**
`SUM({COUNTD([Order ID])}) - [Distinct Orders for Donut]`
---
**Jitter**
`RANDOM()`
# Кастомные визуализации
## Формулы и параметры
### Барчарт на таймлайне
**Additional months**
```sql=
{MAX (DATE(DATEADD('month', 6, [Order Date])))}
```
**Parameter for fake X axis**

### Calendar Heatmap
**Months**
```sql=
CASE MONTH([Order Date])
WHEN 1 THEN 1
WHEN 2 THEN 2
WHEN 3 THEN 3
WHEN 4 THEN 1
WHEN 5 THEN 2
WHEN 6 THEN 3
WHEN 7 THEN 1
WHEN 8 THEN 2
WHEN 9 THEN 3
WHEN 10 THEN 1
WHEN 11 THEN 2
WHEN 12 THEN 3
END
```
**Week Index**
```sql=
DATEPART('week', [Order Date]) -
{FIXED DATEPART('month', [Order Date]): MIN(DATEPART('week', [Order Date]) ) }
```
# Лайфхаки в работе с цветом и визуализациями
### Свои фигуры (прямоугольник)
https://drive.google.com/file/d/1EkRza8jsfWpmSnvnUwoUiCUaxzqWb2Lu/view
Сайты с иконками
- [Icons8](https://icons8.ru/)
- [Iconfinder](https://www.iconfinder.com/)
### Примеры палитры
```xml!=
<?xml version='1.0'?>
<workbook>
<preferences>
<color-palette name="Sequential Palette from White" type="ordered-sequential">
<color>#ffffff</color>
<color>#285fd1</color>
</color-palette>
<color-palette name="Diverging through Gray" type="ordered-diverging">
<color>#de003e</color>
<color>#e0e1e8</color>
<color>#285fd1</color>
</color-palette>
<color-palette name="Diverging through White" type="ordered-diverging">
<color>#de003e</color>
<color>#ffffff</color>
<color>#285fd1</color>
</color-palette>
<color-palette name="My Superstore Palette" type="regular">
<color>#264653</color>
<color>#2A9D8F</color>
<color>#E9C46A</color>
<color>#F4A261</color>
<color>#E76F51</color>
</color-palette>
</preferences>
</workbook>
```
Документация
https://help.tableau.com/current/pro/desktop/en-us/formatting_create_custom_colors.htm
# Дашборды
http://duelingdata.blogspot.com/2019/01/5-types-of-dashboards.html
# Проект
[Описание источника](https://www.kaggle.com/datasets/usdot/flight-delays/data)
## Таблички
### Авиакомпании (airlines.csv)
|Поле|Описание|
|---|---|
IATA_CODE| ИАТА Код авиакомпании
AIRLINE|Название авиакомпании
### Аэропорты (airports.csv)
|Поле|Описание|
|---|---|
IATA_CODE| ИАТА Код аэропорта
CITY|Город
STATE|Код штата
COUNTRY|Страна
LATITUDE|Широта аэропорта
LONGITUDE|Долгота аэропорта
### Полёты (flights.csv)
|Поле|Описание|
|---|---|
YEAR| Год полёта
MONTH| Месяц полёта
DAY| День полёты
DAY_OF_WEEK| День недели
AIRLINE| Код авиакомпании
FLIGHT_NUMBER| Номер рейса
TAIL_NUMBER| Номер самолёта
ORIGIN_AIRPORT| Аэропорт вылета
DESTINATION_AIRPORT| Аэропорт прилёта
SCHEDULED_DEPARTURE| Planned Departure Time
DEPARTURE_TIME| WHEEL_OFF - TAXI_OUT
DEPARTURE_DELAY| Общее время задержки
TAXI_OUT| Промежуток времени, прошедший с момента отправления из аэропорта (от гейта) отправления и до взлёта
WHEELS_OFF| Момент взлёта
SCHEDULED_TIME| Планируемое количество времени, необходимое для перелета
ELAPSED_TIME| AIR_TIME+TAXI_IN+TAXI_OUT
AIR_TIME| Длительность времени между взлетом и посадкой
DISTANCE| Расстояние между двумя аэропортами
WHEELS_ON| Момент приземления самолёта
TAXI_IN| Время, прошедшее между посадкой на колеса и стыковкой с гейтом
DEPARTURE_TIME| WHEEL_OFF - TAXI_OUT
SCHEDULED_ARRIVAL| Запланированное время прибытия
ARRIVAL_TIME| WHEELS_ON+TAXI_IN
ARRIVAL_DELAY| ARRIVAL_TIME-SCHEDULED_ARRIVAL (отклонение от плана)
DIVERTED| Самолёты перенаправленные в другой аэропорт
CANCELLED| Отменённые рейсы (1 = отменён)
CANCELLATION_REASON| Причина отмены рейса: A - Авиакомпания/перевозчик; B - Погода; C - Национальная воздушная система; D - Безопасность
AIR_SYSTEM_DELAY| Задержка, вызванная воздушной системой
SECURITY_DELAY| Задержка, вызванная безопасностью
AIRLINE_DELAY| Задержка, вызванная авиакомпанией
LATE_AIRCRAFT_DELAY| Задержка, вызванная воздушным судном
WEATHER_DELAY| Задержка, вызванная погодными условиями