# GetUserAttr 指令碼與圖表函數

GetUserAttr() 函數為存取應用程式的使用者傳回以下資訊：

* 電子郵件地址

* 主旨

* 使用者所屬的群組，例如識別提供者 (IdP) 群組和自訂群組

* 偏好的語言

* 時區

直接在載入指令碼或圖表運算式中使用 GetUserAttr() 函數。在任一種情況下，您可以使用該函數儲存變數中的屬性，或以沒有變數的方式直接使用。若您在 Qlik Sense 用戶端管理 中使用此函數，只會傳回空的資料值。因此，您可以使用函數在 Qlik Sense 用戶端管理 中開發指令碼，而不會遇到錯誤，之後再將應用程式上傳至 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-TW/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-TW/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-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Introduction/profile-settings.htm) | `Let vUserLanguage = GetUserAttr('userZoneinfo')` | `=GetUserAttr('userZoneinfo')` | `Europe/London` |

## 何時使用 GetUserAttr

此函數會傳回應用程式目前使用者的使用者屬性和群組。這可讓您建置可自訂使用者顯示內容的解決方案。例如，在全球銷售應用程式中，您可以僅向負責特定產品群組的銷售代表顯示特定產品的工作表。在應用程式的載入指令碼中的 Load 陳述式或圖表運算式中使用該函數，可直接作為運算式使用，或在運算式中儲存為變數使用。

[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 | Sales,Product-Lead,OKTA-Github-RnD | en | 美洲/多倫多 |

## 範例 – 儲存使用者屬性作為變數並在圖表運算式中使用

[](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')

   * 使用者地區設定

     * 名稱：vUserLocale

     * 定義： =GetUserAttr('userLocale')

   * 使用者區域資訊

     * 名稱：vUserZoneinfo

     * 定義： =GetUserAttr('userZoneinfo')

5. 建立表格並新增下列運算式作為維度：

   * `=vUserEmail`

   * `=vUserSubject`

   * `=vUserGroups` (傳回字串中以逗號分隔的清單)

   * `=vUserLocale`

   * `=vUserZoneinfo`

提示備註您可以新增維度標籤，例如使用者電子郵件，以提高建立維度時的可讀取性。

新表格中的輸出動態顯示可用的使用者屬性。下表顯示了從 `GetUserAttr` 函數傳回的結果範例。

結果表格

| =vUserEmail | =vUserSubject | =vUserGroups | =vUserLocale | =vUserZoneinfo |
| --- | --- | --- | --- | --- |
| john.doe@company.com | 00uss7ra3dk9doJln0x7 | Sales,Product-Lead,OKTA-Github-RnD | en | 美洲/多倫多 |

資訊備註預設情況下，`GetUserAttr('userGroups')` 函數傳回使用者的 IdP 群組。您可以在指令碼陳述式中設定 `QlikCloudGroupMode` 系統變數，以選擇傳回哪些群組，例如 `Set QlikCloudGroupMode = 2` 傳回 IdP 和自訂群組。如需詳細資訊，請參閱[QlikCloudGroupMode](https://help.qlik.com/zh-TW/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-TW/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` 網域的電子郵件地址。