---
# System prepended metadata

title: Дополнительные материалы Tableau ICH
tags: [' курсы', tableau, ICH]

---

# Дополнительные ресурсы

## Мои материалы
- [Курс "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

![изображение](https://hackmd.io/_uploads/Bkx1JUUZ0.png)

Значения для параметра
- `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**

![изображение](https://hackmd.io/_uploads/Sy8Rfuxfke.png)

### 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| Задержка, вызванная погодными условиями 