# Num#脚本和图表功能

Num() 将文本字符串解释为数值，即使用第二个参数中指定的格式将输入字符串转换为数字。如果省略第二个参数，它将使用数据加载脚本中设置的小数点和千位分隔符。自定义小数位和千分位分隔符的符号为可选参数。

语法：

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

返回数据类型： 双

Num#() 函数返回同时包含字符串和数字值的双重值。函数接受输入表达式的文本表示并生成一个数字。它不会改变数字的格式：输出的格式与输入的格式相同。

参数

| 参数 | 描述 |
| --- | --- |
| text | 可以计算文本字符串值。 |
| format | 指定第一个参数中使用的数字格式的字符串。如果省略，则使用数据加载脚本中设置的十进制和千位分隔符。<br><br>`Num#` 功能支持多种格式选项，可用于不同的数字结构，例如：<br><br>`#,##0`：显示不带小数位的数字。<br><br>`#,##0.00`：显示带两个小数位的数字。<br><br>`##0.00%`：以百分比形式显示带两个小数位的数字。<br><br>`​#,##0;(#,##0)`：格式化括号中显示的负数。<br><br>`$#,##0.00`：将数字格式化为带有 $ 符号的货币。<br><br>`​0.00E+0`：以科学记数法显示数字。 |
| dec\_sep | 指定小数位数字分隔符的字符串。如果省略，则使用数据加载脚本中设置的变量 DecimalSep 的值。<br><br>`Num#` 函数支持多种小数位分隔符格式，例如：<br><br>逗号 '`,`'：例如，`$1,000,00` 代表一千美元。<br><br>句号 '`.`'：例如，`€ 1,000.00`。<br><br>连字符 '`-`'：当使用连字符代替传统的句号或逗号作为小数位分隔符时，它显示的值类似`¥1,000-00`。<br><br>有关更多信息，请参阅[DecimalSep](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/NumberInterpretationVariables/DecimalSep.htm)。 |
| thou\_sep | 指定千分位数字分隔符的字符串。如果省略，则使用数据加载脚本中设置的变量 ThousandSep 的值。<br><br>`Num#` 函数支持多种千位数字分隔符选项：<br><br>句号 '`.`' ：使用句号作为千位分隔符（在某些欧洲格式中很常见），如果与逗号小数位分隔符结合使用，则显示为 `$1.000,00`。<br><br>空格 ​' '：使用空格作为千位分隔符，这在一些欧洲国家很常见。显示为 `€ 1 000.00`。<br><br>下划线 '`_`' ：使用下划线作为千位分隔符，有时用于技术格式或特定地区格式。显示类似 `$1_000.00` 的值。<br><br>有关更多信息，请参阅[ThousandSep](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/NumberInterpretationVariables/ThousandSep.htm)。 |

示例：图表表达式

| 示例 | 结果（返回的字符串值） |
| --- | --- |
| `Num#( '35,648.31', '#', '.' , ',' )` | 返回 `35,648.31` 的字符串和 `35648.31` 的数值。 |
| `Num#( ‘35 648.312’, '#', '.' , ',' )` | 返回 `35 648.312` 的字符串和 `35648.312` 的数值。 |
| `Num#( '35.648,3123', '#', '.' , ',' )` | 返回 `35.648,3123` 的字符串和 ` NULL  `(`-`) 的数值。 |
| `Num#( '35 648,31234', '#', '.' , ',' )` | 返回 `35 648,31234` 的字符串和 ` NULL  `(`-`) 的数值。 |
| `Num#('1,234.56', '#,##0.00')` | 返回 `1,234.56` 的字符串和 `1230.45` 的数值。 |
| `Num#('$1,230.45', '$#,##0.00')` | 返回 `$1,230.45` 的字符串和 `1234.56` 的数值。 |
| `Num#('20220315', 'YYYYMMDD')` | 返回 `20220315` 的字符串和 `20220315` 的数值。 |

## 示例 - Num# 基本原理

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

#### 加载脚本

概述

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

加载脚本包含：

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

加载脚本包含：

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

* 数据表中有以下字段：

  * `ProductID`

  * `ProductName`

  * `SalesAmount`

* 用于显示该示例的 `ThousandSep` 和 `DecimalSep` 的标准设置。

* 使用 `Num#` 函数的前置加载。执行时，它会创建一个名为 `FormattedSalesAmount` 的附加字段。

加载脚本

```
SET ThousandSep=',';
SET DecimalSep='.';
Example:
LOAD
ProductID,
ProductName,
SalesAmount,
Num#(SalesAmount, '#.##0,00',',','.') AS FormattedSalesAmount
INLINE [
ProductID, ProductName, SalesAmount
1, Product A, '1.234,56'
2, Product B, '2.456,78'
3, Product C, '345,67'
4, Product D, '987,12'
5, Product E, '1.200,45'
];
```

结果

加载数据并打开工作表。创建新表并将这些字段添加为维度：

* ` ProductID
                                       `

* `ProductName`

* `SalesAmount`

* `FormattedSalesAmount`

创建以下度量：

* `=Num(FormattedSalesAmount)`，根据数字格式的系统设置查看字段的数值。

Results table

| ProductID | ProductName | SalesAmount | FormattedSalesAmount | Num(FormattedSalesAmount) |
| --- | --- | --- | --- | --- |
| 1 | Product A | 1.234,56 | 1.234,56 | 1234.56 |
| 2 | Product B | 2.456,78 | 2.456,78 | 2456.78 |
| 3 | Product C | 345,67 | 345,67 | 345.67 |
| 4 | Product D | 987,12 | 987,12 | 987.12 |
| 5 | Product E | 1.200,45 | 1.200,45 | 1200.45 |

在这个示例中，您可以观察到 `Num#` 函数如何将 `SalesAmount` 数据从原始文本格式转换为数值。

## 示例 – Num# 场景

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

#### 加载脚本

概述

数据集包含来自多个国家的不同文本格式的销售数据。我们希望将数据标准化并显示在表格中。

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

加载脚本包含：

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

* 数据表中有以下字段：

  * `Country`

  * `Product`

  * `Amount`

* 前置加载使用 `Num#` 函数转换 `Amount` 字段中的值。

加载脚本

```
Example:
LOAD
Country,
Product,
IF(Country = 'Germany', Num#(Amount, '#.##0,00', ',', '.'), Num#(Amount, '#,##0.00')) AS Amount
INLINE [
Country, Product, Amount
Germany, Product A, '1.234,56'
USA, Product B, '2,345.78'
Germany, Product C, '987,12'
USA, Product D, '1,200.45'
Germany, Product E, '345,67'
];
```

结果

加载数据并打开工作表。创建新表并将这些字段添加为维度：

* ` Product
                                       `

* ` Country
                                       `

* `Amount`

创建以下度量：

* `Num(Amount)`，查看在数字格式的系统设置中设置的 `Amount` 字段的数值。

Results table

| Product | Country | Amount | Num(Amount) |
| --- | --- | --- | --- |
| Customer A | Germany | 1.234,56 | 1234.56 |
| Customer B | USA | 2,345.78 | 2345.78 |
| Customer C | Germany | 987,12 | 987.12 |
| Customer D | USA | 1,200.45 | 1200.45 |
| Customer E | Germany | 345,67 | 345.67 |

比较 `Amount` 列和 `Num(Amount)` 列，可以发现使用 `  Num# ` 函数显示的数据改变了基本数值，但保持了字符串格式不变。例如，`Amount` 列中 `Germany` 的所有值都使用逗号作为小数位分隔符，但 `Num(Amount)` 中的基本格式对所有值都使用点号。