# Hash128 — функция скриптa и диаграммы

Hash128() возвращает 128-разрядное значение хэша для сочетания значений входного выражения. Результат — строка из 22 символов. Хеш-значения полезны для маскировки информации, позволяющей установить личность (Personally Identifiable Information, PII), такой как имена клиентов, номера социального страхования или номера счетов.

Синтаксис:

Hash128(expr{, expression})

Возвращаемые типы данных: строка

Аргументы

| Аргумент | Описание |
| --- | --- |
| expr | Текстовая строка для оценки. |

Пример: выражения диаграммы

| Пример | Результат |
| --- | --- |
| `Hash128( 'abc', 'xyz', '123' )` | Возвращает `MA&5]6+3=:>:>G%S<U*S2+` |
| `Hash128 ( Region, Year, Month )`<br><br>Note: `Region`, `Year`, and `Month` are table fields. | Возвращает `G7*=6GKPJ(Z+)^KM?<$'A+` |

## Пример. Основы использования функции Hash128

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/Hash128.htm)

#### Выражение диаграммы

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.

Скрипт загрузки содержит следующее:

* Набор данных, который загружается в таблицу данных под именем `Example`.

* Следующие поля, которые будут использоваться для создания 128-битного хэш-значения:

  * `Region`

  * `Year`

  * `Month`

Скрипт загрузки

```
Example:
Load *
inline [
Region, Year, Month
abc, xyz, 123
EU, 2022, 01
UK, 2022, 02
US, 2022, 02
];
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:

* ` Region
                                   `

* `Year`

* `Month`

Создайте следующее вычисляемое измерение:

* `=Hash128(Region, Year, Month)`, чтобы вычислить 128-битное хэш-значение.

Результирующая таблица

| Регион | Год | Месяц | Hash128(Region, Year, Month) |
| --- | --- | --- | --- |
| abc | xyz | 123 | MA&5]6+3=:&gt;;&gt;G%S&lt;U\*S2+ |
| EU | 2022 | 01 | B40^K&[T@!;VB'XR]&lt;5=/$ |
| UK | 2022 | 02 | O5T;+1?[B&"F&1//MA[MN! |
| US | 2022 | 02 | C6@#]4#\_G-(]J7EQY#KRW0 |

В каждой строке хэш-строки для `Region`, `Year` и `Month` объединяются вместе, и в результате получается строка из 22 символов.

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/Hash128.htm)

#### Скрипт загрузки

Следующий код показывает, как использовать эту функцию в скрипте загрузки.

```
Hash_128:
Load *,
Hash128(Region, Year, Month) as Hash128_Region_Year_Month;
Load * inline [
Region, Year, Month
abc, xyz, 123
EU, 2022, 01
UK, 2022, 02
US, 2022, 02 ];
```

Результирующая таблица

| Регион | Год | Месяц | Hash128\_Region\_Year\_Month |
| --- | --- | --- | --- |
| abc | xyz | 123 | MA&5]6+3=:&gt;;&gt;G%S&lt;U\*S2+ |
| EU | 2022 | 01 | B40^K&[T@!;VB'XR]&lt;5=/$ |
| UK | 2022 | 02 | O5T;+1?[B&"F&1//MA[MN! |
| US | 2022 | 02 | C6@#]4#\_G-(]J7EQY#KRW0 |

## Пример. Сценарий использования Hash128 с дубликатами записей

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/Hash128.htm)

#### Выражение диаграммы

Обзор

В этом примере для каждой записи о продукте создается уникальное хэш-значение. Хэш-значение служит уникальным идентификатором, позволяя компании эффективно обнаруживать и обрабатывать дубликаты.

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.

Скрипт загрузки содержит следующее:

* Набор данных, который загружается в таблицу данных под именем `Example`.

* Следующие поля в таблице данных:

  * `TransactionID`

  * `ProductID`

  * `ProductName`

  * `SupplierID`

Скрипт загрузки

```
Example:
Load *
inline [
TransactionID, ProductID, ProductName, SupplierID
1, 101, Widget A, S001, 100
2, 102, Widget B, S002, 200
3, 101, Widget A, S001, 50
];
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:

* ` Transaction ID
                                   `

* ` ProductID
                                   `

* `ProductName`

* `SupplierID`

Создайте следующее вычисляемое измерение:

* `=Hash128(ProductID, ProductName, SupplierID)`, чтобы вычислить ключ из 22 символов.

Результирующая таблица

| TransactionID | ProductID | ProductName | SupplierID | Hash128(ProductID, ProductName, SupplierID) |
| --- | --- | --- | --- | --- |
| 1 | 101 | ​Widget A ​ ​ | S001 | ​CY`&^(N,E/#`TJT4&]/7N% |
| 2 | 102 | Widget B | S002 | ​O7(1;V1%MG;Z+A[/H)G5&0 |
| 3 | 101 | Widget A | S001 | ​CY`&^(N,E/#`TJT4&]/7N% |

Сравните вывод функции `Hash128`. Обратите внимание, что первая и третья записи `TransactionID` имеют дубликаты хэш-значений, потому что комбинация строковых значений `ProductID`, `ProductName` и `SupplierID` в этих строках одинакова.

## Пример. Сценарий использования функии Hash128 для анонимизации данных

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/Hash128.htm)

#### Выражение диаграммы

Обзор

Компания, предоставляющая финансовые услуги, обрабатывает конфиденциальную информацию клиентов, такую как номера кредитных карт, номера социального страхования и имена клиентов. Для защиты конфиденциальности и обеспечения соответствия нормативным требованиям, таким как «Общий регламент по защите данных» (General Data Protection Regulation, GDPR) или «Закон о передаче и защите данных учреждений здравоохранения» (Health Insurance Portability and Accountability Act, HIPAA), необходимо анонимизировать конфиденциальные данные при создании отчетов для анализа. Однако также необходимо поддерживать согласованность, чтобы можно было отслеживать одного и того же клиента в разных наборах данных, не раскрывая его личности.

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки в новый раздел.

Скрипт загрузки содержит следующее:

* Набор данных, который загружается в таблицу данных под именем Example.

* Следующие поля в таблице данных:

  * CustomerID

  * CustomerName

  * SSN

Скрипт загрузки

```
Example:
Load *
inline [
CustomerID, CustomerName, SSN
101, John Doe, 123-45-6789|
102, Jane Smith, 987-65-4321
];
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:

* CustomerID

* CustomerName

* SSN

Создайте следующие вычисляемые измерения:

* ​=Hash128(CustomerName)

* =Hash128(SSN)

Результирующая таблица

| CustomerID | CustomerName | SSN | Hash128(CustomerName) | Hash128(SSN) |
| --- | --- | --- | --- | --- |
| 101 | ​John Doe | ​123-45-6789\| | ​GMD(\*B9\*!PQ&MTY2@$4A\+ | ​N&[PSH:I$M?OF&lt;5/9LV&N# ​ |
| 102 | Jane Smith | ​987-65-4321 | ​EP@9]GSI)5G\I\*,B?H,C?) | ​HCFXMR'2=\3WF6?\_\6LN;$​ ​ |

В выходных данных генерируются уникальные ключи, что обеспечивает следующие преимущества:

* Конфиденциальность данных: оригинальные конфиденциальные данные не раскрываются напрямую, но хеш-значение остается неизменным в разных записях. Это позволяет проводить анализ, например, агрегирование активности клиентов, не раскрывая их реальной личности.

* Соответствие нормам: благодаря хешированию конфиденциальных полей компания обеспечивает соблюдение правил обращения с конфиденциальными данными.

* Безопасность: функция хеширования создает выходные данные фиксированного размера, эту операцию нельзя обратить, что создает дополнительный уровень защиты конфиденциальных данных.