[Документация Yandex Cloud](../../index.md) > [Практические руководства](../index.md) > [Анализ и визуализация данных](index.md) > DataLens > Функциональные > Параметризация источников

# Параметризация источников в DataLens


{% note warning %}

Часть ресурсов, необходимых для прохождения практического руководства, доступны только в [регионе Россия](../../overview/concepts/region.md).

{% endnote %}



{% note info %}

В рамках руководства все объекты будут создаваться и храниться в воркбуке. Если вы пользуетесь старой навигацией, создайте отдельную папку и работайте в ней. 

{% cut "Создать папку" %}

1. Перейдите на [главную страницу](https://datalens.ru/?skipPromo=true) DataLens.
1. На панели слева выберите ![](../../_assets/console-icons/folders.svg) **Все объекты** или ![](../../_assets/console-icons/folder-house.svg) **Личная папка**.
1. В правом верхнем углу нажмите **Создать** → **Папку**.
1. Введите название папки.
1. Нажмите кнопку **Создать**.

{% endcut %}

{% endnote %}


В этом руководстве вы создадите подключение к источнику данных и узнаете, как использовать параметризацию источников датасета в DataLens.

Параметризация позволит:

* Подменять таблицу в запросах.
* Передавать в SQL, определяющий датасет, параметр как часть запроса.

В качестве источника будет использована демонстрационная база данных ClickHouse® с информацией о продажах товаров в сети московских магазинов.

Для визуализации и исследования данных [подготовьте DataLens к работе](#before-you-begin), затем выполните следующие шаги:

1. [Создайте воркбук](#create-workbook).
1. [Создайте подключение](#create-connection).
1. [Создайте датасет с параметром для замены таблиц](#create-dataset-table-parameter).
1. [Создайте чарт с выбором таблицы в параметре](#create-chart-with-parameter).
1. [Создайте датасет с параметром для подзапроса](#create-dataset-sql-parameter).
1. [Создайте чарт с выбором условия для подзапроса в параметре](#create-chart-with-sql-parameter).


## Перед началом работы {#before-you-begin}

Чтобы начать работать с DataLens:


{% list tabs group=datalens_user %}

- Новый пользователь {#new}

  1. [Войдите](https://passport.yandex.ru/auth) в ваш аккаунт на Яндексе. Если у вас еще нет аккаунта, [создайте](https://yandex.ru/support/passport/authorization/registration.html) его.
  1. Откройте [главную страницу](https://datalens.ru/promo) DataLens.
  1. Нажмите **Начать в облаке**.
  1. Подтвердите, что ознакомились с [Условиями использования](https://yandex.ru/legal/cloud_termsofuse/?lang=ru) и принимаете их и нажмите кнопку **Войти**.

- Уже использую Yandex Cloud {#already}

  1. [Войдите](https://passport.yandex.ru/auth) в ваш аккаунт на Яндексе.
  1. Откройте [главную страницу](https://datalens.ru/promo) DataLens.
  1. Нажмите **Начать в облаке**.
  1. Выберите один из вариантов:

     * Если у вас уже есть организация, выберите ее в выпадающем меню на вкладке **Организации** и нажмите **DataLens**.

       {% note info %}

       Для активации экземпляра DataLens пользователю нужна роль `admin` или `owner`. Подробнее про роли смотрите в разделе [Управление доступом в Yandex Identity Hub](../../organization/security/index.md).

       {% endnote %}

     * Если у вас есть облако, но нет организации, нажмите **Добавить новый DataLens**. В открывшемся окне введите название и описание организации и нажмите **Создать организацию и DataLens**. Подробнее о работе с организациями смотрите в разделе [Начало работы с организациями](../../organization/quickstart.md).

{% endlist %}

Если у вас возник технический вопрос по работе сервиса, обратитесь в [службу поддержки](https://kz.center.yandex.cloud/support) Yandex Cloud. Чтобы спросить совета, обсудить решение вашей задачи или лучшие практики работы сервиса, напишите в чат [DataLens](https://t.me/YandexDataLens) в Telegram.

## Создайте воркбук {#create-workbook}

1. Перейдите на [главную страницу](https://datalens.ru/?skipPromo=true) DataLens.
1. На панели слева выберите ![collections](../../_assets/console-icons/rectangles-4.svg) **Коллекции и воркбуки**.
1. В правом верхнем углу нажмите **Создать** → **Создать воркбук**.
1. Введите название [воркбука](../../datalens/workbooks-collections/index.md) — `Dataset parametrisation`.
1. Нажмите кнопку **Создать**.


## Создайте подключение {#create-connection}

Для доступа к базе данных будет создано подключение **Sample ClickHouse**.

1. В правом верхнем углу воркбука нажмите **Создать** → ![image](../../_assets/console-icons/thunderbolt.svg) **Подключение**.



1. В разделе **Базы данных** выберите подключение **ClickHouse®**.

   
   1. В открывшемся окне выберите тип подключения `Указать вручную` и укажите параметры подключения:

      * Имя хоста — `rc1a-ckg8nrosr2lim5iz.mdb.yandexcloud.net`.
      * Порт HTTP-интерфейса — `8443` (по умолчанию).
      * Имя пользователя — `samples_ro`.
      * Пароль — `MsgfcjEhJk`.

   1. Включите опцию **Уровень доступа SQL-запросов** и выберите **Подзапросы и параметры**.
   1. Нажмите кнопку **Проверить подключение** и убедитесь, что появился зеленый значок.
   1. Нажмите кнопку **Создать подключение**.
   1. Введите название подключения — `Sample ClickHouse`.
   1. Нажмите кнопку **Создать**.



Дождитесь сохранения подключения.

## Создайте датасет с параметром для замены таблиц {#create-dataset-table-parameter}

Создайте [датасет](../../datalens/dataset/index.md) на базе подключения `Sample ClickHouse`:

1. На странице подключения в правом верхнем углу нажмите кнопку **Создать датасет**.
1. Перенесите на рабочую область таблицу `samples.MS_SalesFacts`.
1. Включите [параметризацию](../../datalens/dataset/parametrization.md) в настройках датасета. Для этого вверху нажмите ![icon](../../_assets/console-icons/gear.svg) → **Включить параметризацию**.

   ![image](../../_assets/datalens/dataset-parametrization/dataset-parametrization-on.png)

1. Сохраните датасет:

   1. В правом верхнем углу нажмите кнопку **Сохранить**.
   1. Введите название датасета — `Dataset with parametrisation` и нажмите кнопку **Создать**.

1. Добавьте параметр с именем таблицы:

   1. Перейдите на вкладку **Параметры**.
   1. Нажмите кнопку **Добавить** и укажите:
      
      * **Название** — `table_name`;
      * **Тип** — `Строка`;
      * **Значение по умолчанию** — `MS_SalesFacts`;
      * Включите опцию **Разрешить использовать в настройке источника** и оставьте валидацию по умолчанию.

      ![image](../../_assets/datalens/dataset-parametrization/dataset-add-table-parameter.png)

      При нажатии на кнопку **Добавить** отобразится ошибка, что датасет не прошел валидацию. По умолчанию в значении параметра, разрешенного для использования в источнике, не допускается присутствие символа нижнего подчеркивания `_`.

      ![image](../../_assets/datalens/dataset-parametrization/dataset-parameter-validation-error.png)

1. Измените валидацию датасета так, чтобы она проходила успешно для значения `MS_SalesFacts` в параметре. Для этого:
   
   1. Нажмите кнопку **Добавить** и укажите **Название**, **Тип** и **Значение по умолчанию** как на предыдущем шаге.
   1. Включите опцию **Разрешить использовать в настройке источника** и для валидации значений выберите `Регулярное выражение`.
   1. В поле введите регулярное выражение Python, позволяющее использовать заглавные и строчные символы, цифры и символ нижнего подчеркивания `_`:
   
      ```python
      ^[a-zA-Z0-9_]+$
      ```

   ![image](../../_assets/datalens/dataset-parametrization/dataset-parameter-new-validation.png)

   Название таблицы `MS_SalesFacts` удовлетворяет такому регулярному выражению. При нажатии на кнопку **Добавить** валидация датасета пройдет успешно.

1. Сохраните датасет.
1. Измените определение имени таблицы по параметру:

   1. Перейдите на вкладку **Источники**.
   1. В списке таблиц напротив **MS_SalesFacts** нажмите ![icon](../../_assets/console-icons/ellipsis.svg) → **Изменить настройки**.
   1. Cправа от поля **Имя таблицы** со значением `MS_SalesFacts` нажмите ![icon](../../_assets/console-icons/plus.svg) и выберите параметр `table_name`. Теперь имя таблицы будет определяться указанным параметром.
   
      ![image](../../_assets/datalens/dataset-parametrization/dataset-change-table-settings.png)

   1. Нажмите кнопку **Применить** и сохраните датасет.

## Создайте чарт с выбором таблицы в параметре {#create-chart-with-parameter}

1. Вверху датасета нажмите кнопку **Создать чарт**.
1. Выберите тип визуализации **Таблица**.
1. Создайте [вычисляемое поле](../../datalens/concepts/calculations/index.md):

   1. В левой части экрана над списком полей датасета нажмите ![icon](../../_assets/console-icons/plus.svg) → **Поле**.
   1. Введите название: `Year`.
   1. Введите формулу: `YEAR([OrderDatetime])`.
   1. Нажмите кнопку **Создать**.

1. Добавьте в чарт новое поле. Для этого из раздела **Измерения** перетащите поле `Year` в секцию **Столбцы**.
1. Добавьте в чарт сумму продаж. Для этого из раздела **Измерения** перетащите поле `Sales` в секцию **Столбцы** и измените агрегацию для него:

   1. В секции **Столбцы** нажмите значок `#` у поля `Sales`.
   1. В поле **Агрегация** выберите **Сумма**, затем нажмите **Применить**.

   ![image](../../_assets/datalens/dataset-parametrization/choose-sales-agregate.png)

1. Откройте инспектор и убедитесь, что данные выбираются из таблицы `MS_SalesFacts`. Для этого в правом верхнем углу чарта нажмите ![icon](../../_assets/console-icons/ellipsis.svg) → ![image](../../_assets/console-icons/magnifier.svg) **Инспектор**.

   ![image](../../_assets/datalens/dataset-parametrization/chart-inspector.png)

1. Сохраните чарт:

   1. В правом верхнем углу нажмите кнопку **Сохранить**.
   1. В открывшемся окне введите название чарта `Table with parametrisation` и нажмите кнопку **Сохранить**.

   ![image](../../_assets/datalens/dataset-parametrization/save-chart.png)

1. Измените имя таблицы в параметре чарта:

   1. В разделе **Параметры** нажмите значок у параметра `table_name`.
   1. Значение по умолчанию укажите `MS_SalesFacts_up`.

      ![image](../../_assets/datalens/dataset-parametrization/change-parameter-default-value.png)

   1. Нажмите кнопку **Сохранить**. Теперь данные для чарта выбираются из таблицы `MS_SalesFacts_up`.

      ![image](../../_assets/datalens/dataset-parametrization/chart-changed-parameter.png)

## Создайте датасет с параметром для подзапроса {#create-dataset-sql-parameter}

Создайте еще один датасет на базе подключения `Sample ClickHouse`:

1. Перейдите к подключению `Sample ClickHouse` и в правом верхнем углу нажмите кнопку **Создать датасет**.
1. Добавьте SQL-запрос к источнику:

   1. Внизу слева под списком таблиц нажмите ![icon](../../_assets/console-icons/plus.svg) → **Добавить**.
   1. Перейдите на вкладку **SQL** и в поле **Подзапрос** введите текст запроса:
      
      ```sql
      SELECT * FROM samples.MS_SalesFacts
      ```

   1. Нажмите кнопку **Применить**.

1. Включите параметризацию в настройках датасета. Для этого вверху нажмите ![icon](../../_assets/console-icons/gear.svg) → **Включить параметризацию**.
1. Сохраните датасет:

   1. В правом верхнем углу нажмите кнопку **Сохранить**.
   1. Введите название датасета — `Dataset with parametrisation for sql` и нажмите кнопку **Создать**.

1. Добавьте параметр с условием для подзапроса:

   1. Перейдите на вкладку **Параметры**.
   1. Нажмите кнопку **Добавить** и укажите:
      
      * **Название** — `custom_where`;
      * **Тип** — `Строка`;
      * **Значение по умолчанию** — `1=1`. Такое условие всегда будет возвращать значение `True`;
      * Включите опцию **Разрешить использовать в настройке источника** и для валидации значений выберите `Регулярное выражение`. В поле введите регулярное выражение Python, позволяющее использовать символы, которые могут понадобиться при составлении SQL-запросов:

        ```python
        ^[a-zA-Z0-9а-яАА-ЯёЁ_\s\(\)\.\'\=\-\+\*/\,\<\>!]+$
        ```

      При нажатии на кнопку **Добавить** валидация датасета пройдет успешно.

1. Сохраните датасет.

1. Добавьте условие в текст SQL-запроса, используя параметр:

   1. Перейдите на вкладку **Источники**.
   1. В списке таблиц напротив **SQL** нажмите ![icon](../../_assets/console-icons/ellipsis.svg) → **Изменить настройки**.
   1. В поле **Подзапрос** к тексту запроса добавьте строку `WHERE`:
   
      ```sql
      SELECT * FROM samples.MS_SalesFacts
      WHERE
      ```

   1. Под полем ввода запроса нажмите ![icon](../../_assets/console-icons/plus.svg) **Вставить параметр** и выберите параметр `custom_where`. Теперь условие в SQL-запросе будет определяться указанным параметром:

      ```sql
      SELECT * FROM samples.MS_SalesFacts
      WHERE not_var{{custom_where}}
      ```

      ![image](../../_assets/datalens/dataset-parametrization/dataset-parameter-sql.png)

1. Сохраните датасет.

## Создайте чарт с выбором условия для подзапроса в параметре {#create-chart-with-sql-parameter}

1. Вверху датасета нажмите кнопку **Создать чарт**.
1. Выберите тип визуализации **Индикатор**.
1. Из раздела **Измерения** перетащите поле `Sales` в секцию **Показатель**. К полю автоматически применится агрегация, оно станет показателем.

   ![image](../../_assets/datalens/dataset-parametrization/chart-indicator.png)

1. Откройте инспектор и убедитесь, что в тексте SQL-запроса используется значение параметра из датасета `1=1`.

   ![image](../../_assets/datalens/dataset-parametrization/chart-inspector-sql.png)

1. Измените условие SQL-запроса в параметре:

   1. В разделе **Параметры** нажмите значок у параметра `custom_where`.
   1. Значение по умолчанию укажите: `ProductID IN (SELECT ProductID FROM samples.MS_Products WHERE ProductCategory='Техника для дома')`.
   1. Нажмите кнопку **Сохранить**. Данные в чарте отфильтрованы по условию: только продукты категории `Техника для дома`.
      
      ![image](../../_assets/datalens/dataset-parametrization/chart-indicator-parameter-sql.png)

   1. Откройте инспектор и убедитесь, что в условии SQL-запроса теперь используется новое значение параметра.

      ![image](../../_assets/datalens/dataset-parametrization/chart-inspector-sql-2.png)

1. Сохраните чарт:

   1. В правом верхнем углу нажмите кнопку **Сохранить**.
   1. В открывшемся окне введите название чарта `Chart with parametrisation sql` и нажмите кнопку **Сохранить**.

_ClickHouse® является зарегистрированным товарным знаком [ClickHouse, Inc](https://clickhouse.com)._