# 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',',',' ' )` | 当 `MoneyFormat` 设置为 `# ##0,00 kr` 时，返回 `35 648,37 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/cloud-services/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/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/InterpretationFunctions/money_hash.htm)

#### 加载脚本

概述

销售订单数据集包含使用不同货币的字段。此示例向您展示了如何根据货币对销售值进行分离和求和。

打开数据加载编辑器，并将下面的加载脚本添加到新部分。

加载脚本包含：

* 加载到名为 `Example` 的数据表中的数据集。

* 数据表中有以下字段：

  * `TransactionID`

  * `Currency`
  * `Amount`

* `MoneyDecimalSep` 、`MoneyFormat` 和 `MoneyThousandSep` 系统变量的设置格式与数据中使用的格式不同，以便演示。

* 前置加载会加载字段 `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` 中的货币值，并将格式从货币更改为数字。