# GetUserAttr 脚本和图表功能

GetUserAttr() 函数为访问应用程序的用户返回以下信息：

* 电子邮件地址

* 主题

* 用户所属的组，如身份提供者 (IdP) 组和自定义组

* 首选语言

* 时区

直接在加载脚本或图表表达式中使用 GetUserAttr() 函数。在任何一种情况下，都可以使用函数将属性存储在变量中，也可以直接不使用变量。如果在 Qlik Sense Client-Managed 中使用此函数，它将只返回空的数据值。因此，您可以使用该函数在 Qlik Sense Client-Managed 中开发脚本，而不会遇到错误，以便稍后将应用程序上载到 Qlik Cloud。

语法：

GetUserAttr(name)

返回数据类型： 双

参数

| 参数 | 描述 |
| --- | --- |
| name | 要返回的属性的名称。在表达式中作为字符串值输入。输入的字符串值区分大小写。 |

使用该函数将用户属性加载到您的应用程序中。该函数可以返回以下属性：

GetUserAttr()GetUserAttr() 函数可以返回的用户属性

| 属性 | 描述 | 加载脚本变量的示例 | 图表表达式示例（无变量） | 图表表达式结果示例 |
| --- | --- | --- | --- | --- |
| userEmail | 当前用户的电子邮件。 | `Let vUserEmail = GetUserAttr('userEmail')` | `=GetUserAttr('userEmail')` | `john.doe@company.com` |
| userSubject | 当前用户的主题。 | `Let vUserSubject = GetUserAttr('userSubject')` | `=GetUserAttr('userSubject')` | `00uss7ra3dk9doJln0x7` |
| userGroups | 当前用户所属的组（IdP、自定义组或两者）。以字符串返回以逗号分隔的组列表。默认情况下，`GetUserAttr` 返回 IdP 组，除非在加载脚本语句中设置了 `QlikCloudGroupMode` 系统变量。<br><br>[QlikCloudGroupMode](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/SystemVariables/QlikCloudGroupMode.htm)。 | `Let vUserGroups = GetUserAttr('userGroups')` | `=GetUserAttr('userGroups')` | `Sales,Product-Lead,OKTA-Github-RnD` |
| userLocale | 用户的首选语言，在用户的设置中设置。<br><br>[管理您的个人设置](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Introduction/profile-settings.htm) | `Let vUserLocale = GetUserAttr('userLocale')` | `=GetUserAttr('userLocale')` | `en` |
| userZoneinfo | 用户的时区，在用户的设置中设置。<br><br>[管理您的个人设置](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Introduction/profile-settings.htm) | `Let vUserLanguage = GetUserAttr('userZoneinfo')` | `=GetUserAttr('userZoneinfo')` | `Europe/London` |

## 适合使用 GetUserAttr 的情况

此函数返回应用程序当前用户的用户属性和组。这使您能够构建可为用户自定义显示内容的解决方案。例如，在全球销售应用程序中，您可以仅向负责特定产品组的销售代表显示特定产品的工作表。在应用程序的加载脚本中的加载语句或图表表达式中使用该函数，可以直接作为表达式或存储为变量的表达式。

[Dynamic titles based on user language using the GetUserAttr function](https://play.vidyard.com/bozy96G13YU5YrBjnqNNDF)

## 示例 - 在脚本中将用户属性存储为变量

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

#### 加载脚本变量和图表表达式

此示例定义了一组可用于您创建的应用程序内容的脚本变量。每次重新加载应用程序时，都会评估属性并将其添加到应用程序中。

执行以下操作：

1. 创建新的 Qlik Sense 应用程序。

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

   * 一个名为 `Transactions` 的新表，其中包含示例事务数据。这可以替换为任何数据，并且作为占位符添加。

   * 将 `QlikCloudGroupMode` 系统变量设置为 `2` 的脚本语句。`userGroups` 属性将返回 IdP 和用户所属的自定义组。

   * GetUserAttr 函数可以返回的可用属性的一系列脚本变量定义。

     ```
     Set QlikCloudGroupMode = 2;
     Transactions:
     Load * inline [
     id,date,amount
     1,1/1/2023,500.67
     2,1/2/2023,458.91
     3,1/3/2023,12.34
     4,1/4/2023,90.90
     5,1/5/2023,256.30
     6,1/6/2023,789.16
     7,1/7/2023,501.25
     8,1/8/2023,87.01
     9,1/9/2023,161.16
     10,1/10/2023,300.06
     ];
     Let vUserEmail = GetUserAttr('userEmail');
     Let vUserSubject = GetUserAttr('userSubject');
     Let vUserGroups = GetUserAttr('userGroups');
     Let vUserLocale = GetUserAttr('userLocale');
     Let vUserZoneinfo = GetUserAttr('userZoneinfo');
     ```

3. 加载数据并以高级编辑模式打开新工作表。

4. 创建一个表格，并将以下表达式添加为维度：

   * `=vUserEmail`

   * `=vUserSubject`

   * `=vUserGroups`，这将以字符串形式返回一个逗号分隔的列表

   * `=vUserLocale`

   * `=vUserZoneinfo`

提示注释您可以在创建维度时添加维度标签，如用户电子邮件，以提高可读性。

表中的输出动态显示可用的用户属性。下表显示了使用 `GetUserAttr` 函数返回的结果示例。

结果表

| =vUserEmail | =vUserSubject | =vUserGroups | =vUserLocale | =vUserZoneinfo |
| --- | --- | --- | --- | --- |
| john.doe@company.com | 00uss7ra3dk9doJln0x7 | 销售、产品负责人、OKTA-Github-RnD | en | America/Toronto |

## 示例 – 将用户属性存储为变量，并在图表表达式中使用它们

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

#### 变量和图表表达式

在此示例中，变量不是在加载脚本中定义的，而是在应用程序中定义的。定义后，变量可以在应用程序的图表表达式中使用。在图表表达式中使用该函数的主要好处是，属性将自动刷新，而无需重新加载应用程序。这使得应用程序能够在用户之间更顺畅地移动，成为应用程序生命周期的一部分。

执行以下操作：

1. 创建新的 Qlik Sense 应用程序。

2. 在高级编辑模式下打开新的工作表。

3. 打开变量对话框。

4. 选择新建，然后执行以下操作：

   * 在名称下输入 vUserEmail。

   * 在定义下输入=GetUserAttr('userEmail')。

   * 选择创建。

   即会创建一个应用程序变量来显示用户的电子邮件地址。重复此步骤，使用以下参数为剩余属性创建变量：

   * 用户主题

     * 名称：vUserSubject

     * 定义：=GetUserAttr('userSubject')

   * 用户组

     * 名称：vUserGroups

     * 定义：=GetUserAttr('userGroups')

   * User Locale

     * 名称：vUserLocale

     * 定义：=GetUserAttr('userLocale')

   * 用户 Zoneinfo

     * 名称：vUserZoneinfo

     * 定义：=GetUserAttr('userZoneinfo')

5. 创建一个表格，并将以下表达式添加为维度：

   * `=vUserEmail`

   * `=vUserSubject`

   * `=vUserGroups`（以字符串形式返回一个以逗号分隔的列表）

   * `=vUserLocale`

   * `=vUserZoneinfo`

提示注释您可以在创建维度时添加维度标签，如用户电子邮件，以提高可读性。

新表中的输出动态显示可用的用户属性。下表显示了使用 `GetUserAttr` 函数返回的结果示例。

结果表

| =vUserEmail | =vUserSubject | =vUserGroups | =vUserLocale | =vUserZoneinfo |
| --- | --- | --- | --- | --- |
| john.doe@company.com | 00uss7ra3dk9doJln0x7 | 销售、产品负责人、OKTA-Github-RnD | en | America/Toronto |

信息注释默认情况下，`GetUserAttr('userGroups')` 函数会返回用户的 IdP 组。您可以通过在脚本语句中设置 `QlikCloudGroupMode` 系统变量来选择返回哪些组，例如 `Set QlikCloudGroupMode = 2` 同时返回 IdP 和自定义组。有关更多信息，请参阅[QlikCloudGroupMode](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/SystemVariables/QlikCloudGroupMode.htm)。

## 示例 – 使用加载脚本中的 GetUserAttr 函数

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

#### 加载脚本

你也可以在没有变量的情况下使用应用程序中的函数。这个示例演示了如何加载一个表，其中每个属性都作为一个单独的字段。从这里，您可以在应用程序中创建可视化以显示这些详细信息。

执行以下操作：

1. 创建新的 Qlik Sense 应用程序。

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

   * 一个名为 `Attributes` 的新表，以字段形式将每个属性包含在内。

   * 为自定义组将 `QlikCloudGroupMode` 系统变量设置为 `1` 的脚本语句。`userGroups` 属性将仅返回用户所属的自定义组。

   ```
   Set QlikCloudGroupMode = 1;
   Attributes:
   Load RowNo() as Key,
   GetUserAttr('userEmail') as UserEmail,
   GetUserAttr('userSubject') as UserSubject,
   GetUserAttr('userLocale') as UserLocale,
   GetUserAttr('userZoneinfo') as UserZoneinfo,
   GetUserAttr('userGroups') as UserGroups autogenerate 1;
   ```

3. 加载数据。在数据模型中创建一个表，在各个字段中显示每个属性。

   现在，您可以在可视化中使用属性字段，例如表或文本和图像对象。

## 示例 – 在图表表达式中使用 GetUserAttr 函数

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

#### 图表表达式

您可以在不使用变量的情况下将函数直接输入图表表达式。用户属性将刷新，无需重新加载应用程序。这使得应用程序能够在用户之间更顺畅地移动，成为应用程序生命周期的一部分。

执行以下操作：

1. 创建新的 Qlik Sense 应用程序。

2. 在高级编辑模式下打开新的工作表。

3. 将文本和图像对象拖到工作表上。

4. 在空白图表内单击并输入以下标签：

   用户电子邮件：

5. 在属性面板中，选择添加度量 。

6. 输入以下表达式：

   * =GetUserAttr('userEmail')

7. 在新行上为其他属性 添加标签和度量。对每个属性使用以下表达式：

   * =GetUserAttr('userSubject')（针对用户主题）

   * =GetUserAttr('userGroups')（针对用户组）

   * =GetUserAttr('userLocale')（针对用户区域设置）

   * =GetUserAttr('userZoneinfo')（针对用户地区信息）

信息注释默认情况下，`GetUserAttr('userGroups')` 函数会返回用户的 IdP 组。您可以通过在脚本语句中设置 `QlikCloudGroupMode` 系统变量来选择返回哪些组，例如 `Set QlikCloudGroupMode = 2` 同时返回 IdP 和自定义组。有关更多信息，请参阅[QlikCloudGroupMode](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/SystemVariables/QlikCloudGroupMode.htm)。

## 示例 - 使用图表表达式有条件地隐藏一列

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

#### 图表表达式

概述

此示例根据用户电子邮件地址的域显示或隐藏表中的列。

执行以下操作：

1. 创建新的 Qlik Sense 应用程序。

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

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

   * 数据表中有以下字段：

     * `ID`

     * `Date`

     * `Amount`

     加载脚本

     ```
     Transactions:
     Load * inline [
     ID, Date, Amount
     1, 1/1/2023, 500.67
     2, 1/2/2023, 458.91
     3, 1/3/2023, 12.34
     ];
     ```

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

   * `ID`

   * `Date`

   * `Amount`

   将以下表达式添加为计算维度：

   * `=WildMatch(GetUserAttr('userEmail'),'*@qlik.com')>0`，用于检查用户的电子邮件域是否匹配 `@qlik.com`。

4. 在 `Amount` 维度的属性面板中，在显示列条件下添加以下表达式：

   * `=WildMatch(GetUserAttr('userEmail'),'*@qlik.com')>0`，如果用户的电子邮件与 `qlik.com` 域匹配，则用于显示“数额”列。

   该表达式将仅显示电子邮件地址域包含 `@qlik.com` 的用户的 `Amount` 列。该列将对具有其他域名的用户隐藏。

Results table 1 - User with email address: `user@qlik.com`user@qlik.com

| ID | Date | Amount | WildMatch(GetUserAttr('userEmail'),'\*@qlik.com')&gt;0 |
| --- | --- | --- | --- |
| 1 | 1/1/2023 | 500.67 | -1 |
| 2 | 1/2/2023 | 458.91 | -1 |
| 3 | 1/3/2023 | 12.34 | -1 |

Results table 2 - User with email address: `user@gmail.com`user@gmail.com

| ID | Date | WildMatch(GetUserAttr('userEmail'),'\*@qlik.com')&gt;0 |
| --- | --- | --- |
| 1 | 1/1/2023 | 0 |
| 2 | 1/2/2023 | 0 |
| 3 | 1/3/2023 | 0 |

在这个例子中，您可以看到如何使用 `GetUserAttr` 函数有条件地隐藏或显示特定列。`Amount` 列显示在第一个表中，因为查看应用程序的用户的电子邮件地址包含域 `@qlik.com`，并且第 4 列中的维度表达式返回 `-1`。`Amount` 列被隐藏在第二个表的结果中，因为用户没有带有 `qlik.com` 域的电子邮件地址。