# Money#Функция скрипта и диаграммы

Money#() преобразует текстовую строку в денежное значение, используя формат, установленный в скрипте загрузки или в операционной системе (если не указана строка форматирования). Пользовательские символы разделителей десятичных разрядов и тысяч являются дополнительными параметрами.

Синтаксис:

Money#(text[, format[, dec\_sep [, thou\_sep ] ] ])

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

Аргументы

| Аргумент | Описание |
| --- | --- |
| text | Текстовая строка для оценки. |
| format | Строка, описывающая ожидаемый формат ввода для использования при преобразовании строки в числовой интервал.<br><br>Если не указано, используется значение `MoneyFormat`, установленное в скрипте загрузки данных.<br><br>Функция `Money#` поддерживает много вариантов формата для различных структур денежных сумм, например:<br><br>​`$#,##0.00`: добавляет знак доллара и два десятичных знака.<br><br>`€ #,##0`: добавляет знак евро и без десятичных знаков, с пробелом после знака евро.<br><br>`​¥#,##0`: добавляет знак японской иены без десятичных знаков.<br><br>​`$#,##0;($#,##0)`: форматирует отрицательные значения, заключая их в круглые скобки.<br><br>​`₣ #.##0,00`:​ добавляет знак швейцарского франка с точкой в качестве разделителя разряда тысяч и запятой для десятичной части (например, `  ₣ 1.000,00 `).<br><br>​`R #,##0.00`: знак южноафриканского ранда с двумя десятичными знаками и пробелом после символа ранда.<br><br>​`$ #,##0.000`: добавляет три знака после запятой к формату доллара. |
| dec\_sep | Строка, определяющая десятичный разделитель. Если не указано, используется значение `MoneyDecimalSep`, установленное в скрипте загрузки данных.<br><br>Функция `Money#` поддерживает много форматов разделителя десятичной дроби, например:<br><br>Запятая «`,`»: например, `$1,000,00` для одной тысячи долларов.<br><br>Точка «`.`»: например, `€ 1,000.00`.<br><br>Дефис «`-`»: когда используется вместо традиционной точки или запятой в качестве десятичного разделителя, отображается как `¥1,000-00`. |
| thou\_sep | Строка, определяющая разделитель тысяч. Если не указано, используется значение `MoneyThousandSep`, установленное в скрипте загрузки данных.<br><br>Функция `Money#` поддерживает много вариантов разделителя разряда тысяч:<br><br>Точка «`.`»: точка используется в качестве разделителя тысяч (распространено в некоторых европейских форматах), отображается как `$1.000,00` в сочетании с запятой в качестве десятичного разделителя.<br><br>Пробел ​« »: пробел используется в качестве для разделителя тысяч, что распространено в некоторых европейских странах. Отображается как `€ 1 000.00`.<br><br>Подчеркивание «`_`»: подчеркивание используется в качестве разделителя тысяч, который иногда используется в технических или специфических региональных форматах. Отображается как `$1_000.00`. |

Функция `Money#` работает почти так же, как функция `Num#`, но использует значения, заданные по умолчанию для разделителей десятичных дробей и тысяч в переменных скрипта для денежного формата, или соответствующие системные настройки для валюты.

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

| Пример | Результаты |
| --- | --- |
| `Money#('35 648,37 kr' , '# ##0,00 kr',',',' ' )` | Возвращает `35 648,37 kr`, если параметр `MoneyFormat` равен `# ##0,00 kr`. Чтобы это число правильно оценивалось, в скрипте загрузки нужно установить следующие параметры:<br><br><ul> <li> <p><code>SET MoneyDecimalSep=',';</code> </p> </li> <li> <p><code>SET MoneyThousandSep=' ';</code> </p> </li> </ul> |
| `Money#( '$35,648.37', ' $#', '.', ',' )` | Возвращает `$35,648.37`, если установлено следующее:<br><br><ul> <li> <p><code>MoneyFormat</code> — <code>$#</code></p> </li> <li> <p><code>SET MoneyDecimalSep=',';</code> </p> </li> <li> <p><code>SET MoneyThousandSep=' ';</code> </p> </li> </ul> |

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

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

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

Обзор

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

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

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

* Одно поле в таблице данных называется `MoneyValue`.

* Предшествующая загрузка, которая использует функцию `Money#` для преобразования текстовых значений в данных в значение, которое Qlik Sense будет распознавать как правильное.

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

```
SET MoneyFormat='$ #,##0.00';
SET MoneyThousandSep=',';
Example:
Load *, Money#(MoneyValue, '# ##0,00 kr',',',' ') as FormattedMoneyValue;
Load * inline [
MoneyValue
35 648,37 kr
56 735,56 kr
] (delimiter is ';');
```

Результаты

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

* `MoneyValue`

* `FormattedMoneyValue`

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

* `=Money( FormattedMoneyValue, 'kr #,##0', '.' , ',' )`, чтобы представить значение в виде денежной суммы, отформатированной с использованием аргументов, заданных в функции `Money`.

* `=Num(FormattedMoneyValue)`, чтобы вернуть числовое значение после его обработки функцией `Money#`.

Results table

| MoneyValue | FormattedMoneyValue | Money( FormattedMoneyValue, 'kr #,##0', '.' , ',' ) | Num(FormattedMoneyValue) |
| --- | --- | --- | --- |
| 56 735,56 kr | 56 735,56 kr | kr 56,736 | 56735.56 |
| 35 648,37 kr | 35 648,37 kr | kr 35,648 | 35648.37 |

В таблице результатов показано, как можно отобразить значения с использованием следующих функций и формата: `Money#`, `Money` и `Num`. Во втором столбце показано измерение `FormattedMoneyValue`, вычисленное с помощью функции `Money#` для преобразования значения в денежную сумму с форматом `'# ##0,00 kr',',',' '`. В третьем столбце используется функция `Money` для изменения денежного формата `FormattedMoneyValue` на `'kr #,##0', '.' , ','`. В четвертом столбце используется функция `Num` для отображения числового значения измерения `FormattedMoneyValue` с использованием формата в системной переменной.

## Пример. Сценарий использования функции Money\#

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

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

Обзор

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

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

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

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

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

  * `TransactionID`

  * `Currency`
  * `Amount`

* Системные переменные `MoneyDecimalSep`, `MoneyFormat` и `MoneyThousandSep`, настроенные для использования формата, отличного от используемого в данных, в целях демонстрации.

* Предшествующий оператор load, который загружает поля `TransactionID`, `Currency` и `Amount` и создает следующее поле:

  * `AmountValue`, это поле использует функцию `Money#` для преобразования полученного текста в значение, понятное системе.

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

```
SET MoneyDecimalSep='-';
SET MoneyFormat='###0-00';
SET MoneyThousandSep=';';
Example:
LOAD
TransactionID,
Currency,
Amount,
IF(Currency = 'USD', Money#(Amount, '$#,##0.00','.',','),
IF(Currency = 'EUR', Money#(Amount, '€ #.##0,00',',','.'))) AS AmountValue
INLINE [
TransactionID, Currency, Amount
"TXN001", "USD", "$ 1,500.00"
"TXN002", "EUR", "€ 1.200,75"
"TXN003", "USD", "$ 1,750.50"
"TXN004", "EUR", "€ 950,00"
"TXN005", "USD", "$ 2,600.25"
];
```

Результаты

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

* `TransactionID`

* `Currency`

* `Amount`

* `AmountValue`

Создайте следующую меру:

* `Num(AmountValue)`

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

| TransactionID | Currency | Amount | AmountValue | Num(AmountValue) |
| --- | --- | --- | --- | --- |
| TXN001 | USD | $1,500.00 | $ 1,500.00 | 1500 |
| TXN002 | EUR | € 1.200,75 | € 1.200,75 | 1200.75 |
| TXN003 | USD | $ 1,750.50 | $ 1,750.50 | 1750.5 |
| TXN004 | EUR | € 950,00 | € 950,00 | 950 |
| TXN005 | USD | $ 2,600.25 | $ 2,600.25 | 2600.25 |

Результаты показывают, как функция `Money#` преобразует текстовые значения в денежные числовые значения, которые затем могут быть обработаны. Например, значения в поле `Amount` являются текстом и выравниваются по левому краю. Однако после того, как функция `Money#` обрабатывает их и создает новое поле `AmountValue`, система распознает их как денежные числовые значения. Функция `Num`, используемая в крайнем правом столбце, теперь может оценить денежные значения в `AmountValue` и изменить формат с денежного на числовой.