# 物件轉換詳細資料

QV2QS 在轉換期間處理一系列 QlikView 特有的功能。

## 表達式

QV2QS 將 QlikView 運算式傳遞至 Qlik Sense，僅進行最少的轉換。運算式語言在 QlikView 和 Qlik Sense 之間大致共用，因此大多數運算式無需修改即可運作。

QV2QS 會套用以下轉換：

* 等號前綴 — Qlik Sense 要求量值表達式和某些屬性表達式以 `=` 開頭。QV2QS 在需要時添加前綴，如果原始的 QlikView 表達式不包含前綴。
* 註解移除 — 整行註解，凡以 `//`、`#` 或 `REM` 開頭者，會從內嵌運算式中移除。Qlik Sense 屬性表達式對註解語法的支援不一致，因此移除註解可避免評估錯誤。區塊註解 (`/* */`) 不會被移除。程式碼行內的行內 `//` 註解也不會被移除。

以下表達式功能會原樣傳遞，並在 Qlik Sense 中運作而無需修改：

* 集合分析表達式 (例如，`{<Year={2024}>}`)
* 錢號擴展和變數參考 (例如，`$(vMyVar)`)
* 巢狀 `Aggr()` 運算式
* `If()` 運算式，包括條件式格式設定運算式
* `Pick()`、`Match()`、和`Dual()` 模式
* 計算維度

### 設定集合分析引號

QlikView (2017 年 11 月之前) 將集合修飾符中的單引號值視為不區分大小寫的搜尋，與雙引號值相同。Qlik Sense 會將單引號值視為區分大小寫的常值。這種差異可能會破壞依賴萬用字元、比較運算子或在單引號內進行數值比對的運算式。

QV2QS 會掃描所有物件運算式和變數定義，以尋找在 Qlik Sense 中行為不同的集合分析引號模式。偵測到的模式包括單引號萬用字元 (`'*US*'`)、單引號比較運算子 (`'>=5'`)、數值欄位上的單引號值，以及未加引號的裸字串值。結果會顯示在 Excel 報告的 Expression\_Findings 工作表中。

QV2QS 會在轉換期間自動修正單引號搜尋值。針對未加引號的裸字串值，也提供一個實驗性的修復，但預設為停用。

* 單引號搜尋值 (預設啟用) 會轉換為雙引號：`{<Country={'*US*'}>}` 變成 `{<Country={"*US*"}>}`。偵測到的搜尋模式包括萬用字元 (`*`, `?`, `^`), 比較運算子, 模糊搜尋 (`~`), 表達式搜尋 (`=`), 搜尋修飾詞 (`+`, `-`), 以及複合搜尋。數值欄位中不含搜尋語法的單引號值，會被標記以供手動審查，但不會自動修正。
* 未加引號的裸字串值 (實驗性，預設為停用) 會以單引號包覆：`{<Country={USA}>}` 變成 `{<Country={'USA'}>}`。傳入 `--fixUnquotedSetValues` 以啟用。

修正僅在設定修飾符值清單中，透過位置替換來應用。欄位名稱、函數名稱及其他表達式文字絕不會被修改。這兩個修正獨立控制。傳入 `--noFixSingleQuotedSearch` 以停用單引號修正。不支援的功能結果未經修改。

「Expression\_Findings 工作表和執行摘要儀表板包含一個 Source 欄，指示每個發現是源自於變數定義或圖物件表達式。」一個 狀態 欄位會顯示該發現是否已自動修復、需要手動審查，或沒有可用的自動修復。

如需偵測到的完整模式清單，請參閱[分析](https://help.qlik.com/zh-TW/migration/Content/Qv2qsMigration/conversion-results/analysis.htm)。如需設定分析語法參考，請參閱[設定分析](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/set-analysis-set-operators-modifiers.htm)中的 Qlik Cloud 說明。

資訊備註

QV2QS 會掃描所有運算式欄位 (維度、量值、顯示條件、色彩運算式、標題、計算條件及其他)，以及變數定義和載入指令碼，以尋找不支援的函數。偵測到的實例列於分析報告中。

下列 QlikView 專用函數在 Qlik Sense 中無法使用：

* `GetCurrentField`, `GetExtendedProperty`
* `Input`, `InputSum`, `InputAvg`
* `MsgBox`
* `Image_Size`
* `NoOfReports`, `ReportComment`, `ReportId`, `ReportName`, `ReportNumber`

如需偵測到的載入指令碼模式清單，請參閱 [分析](https://help.qlik.com/zh-TW/migration/Content/Qv2qsMigration/conversion-results/analysis.htm)。

## 數字格式

QV2QS 會將 QlikView 數字格式定義轉換為 Qlik Sense 數字格式類型。格式類型會對應至 Qlik Sense 的對應項目，且自訂格式字串 (`Fmt`)、小數點分隔符號、千位分隔符號以及小數點精確度都會如實保留。自訂格式字串，例如 `#,##0.00;(#,##0.00)` 或 `'$'#,##0`，會在 `qFmt` 欄位中原樣傳遞。

以下 QlikView 格式類型已對應：

| QlikView 類型 | Qlik Sense 類型 |
| --- | --- |
| 固定、實數、整數 | 固定 (F) |
| MONEY | 貨幣 (M) |
| DATE | 日期 (日) |
| TIME | 時間 (T) |
| TIMESTAMP | 時間戳記 (時間戳記) |
| INTERVAL | 區間 (IV) |

## 排序

QV2QS 將所有 QlikView 排序條件轉換為 Qlik Sense 對應項。以下排序設定為一對一對應：依狀態排序、依頻率排序、依數值排序、依字母順序排序、依載入順序排序、依運算式排序 (包括運算式文字)、以及依灰度排序。

對於列表框欄位，QV2QS 會應用額外的啟發式演算法，來抑制在日期類型欄位上基於狀態的排序。如需詳細資訊，請參閱[引數參考](https://help.qlik.com/zh-TW/migration/Content/Qv2qsMigration/command-line-interface/argument-reference.htm)。

## 視覺提示和條件式色彩

QlikView 視覺提示 (基於閾值的量值條件式色彩) 會轉換為 Qlik Sense 色彩運算式，用於表格和樞紐分析表視覺化。QV2QS 會產生巢狀的`If()`運算式，其中包含`RGB()`或`ARGB()`色彩函數，可重現原始的低/正常/高閾值行為。文字顏色和背景顏色提示皆會轉換。圖表視覺效果上的視覺提示 (長條圖、折線圖、組合圖及其他) 不會轉換。

## 基於運算式的著色

QV2QS 會將每個維度和每個量值的色彩運算式 (背景色彩和文字色彩) 轉換為 Qlik Sense 屬性運算式。對於表格和樞紐分析表視覺化，背景顏色運算式和文字顏色運算式都會保留 (`cellBackgroundColor` 和 `cellForegroundColor`)。對於圖的視覺化，量值背景顏色表達式會轉換為 `colorByExpression` 模式。維度色彩運算式和量值文字色彩運算式不會轉換為圖表類型，因為 Qlik Sense 圖不支援每個維度的色彩屬性運算式或每個量值的文字色彩屬性。

對於表格和樞紐分析表視覺效果，如果量值上沒有明確的色彩表達式，但已定義視覺提示，QV2QS 會自動從視覺提示閾值產生色彩表達式。

## 趨勢線

QlikView 圖量值上的趨勢線會轉換為 Qlik Sense 趨勢線。支援下列趨勢線類型：

* 平均、線性、指數、對數、冪次
* 多項式 (2、3 和 4 次)

## 參考資料行

QlikView 在圖軸上的參考線會轉換為 Qlik Sense 參考線。標籤、值運算式、顏色、線條樣式和顯示條件 (條件式可見性運算式) 都會保留。如果參考線沒有顯示條件，則預設可見性為始終顯示。組合圖支援同時在主要和次要座標軸上設定參考線。

## 組合圖軸指派

QV2QS 保留 QlikView 組合圖的軸指派。每個量值保留來自原始 QlikView 圖的主要或次要軸繫結。測量數列類型（長條、線、標記）也會保留。

## 維度群組

QV2QS 將 QlikView 循環群組和鑽研群組轉換為 Qlik Sense 主維度。循環群成為循環主維度。向下鑽研群組成為向下鑽研主維度。參考群組維度的圖表會連接到轉換後的應用程式中對應的主維度。

## 字型處理

Qlik Sense 支援一組固定的網路安全字型。QV2QS 將 QlikView 字型對應到最接近的可用 Qlik Sense 字型。無法映射的字型會使用備用字型 (Source Sans Pro)。

以下 QlikView 字型具有明確的對應：

| QlikView 字體 | Qlik Sense 字型 |
| --- | --- |
| Arial, Helvetica, Tahoma, Calibri | Source Sans Pro |
| Segoe UI | 國際 |
| Verdana | Open Sans |
| 時代新羅馬, 時代, 喬治亞 | PT Serif |
| Courier New, Consolas | Source Sans Pro |

自訂字型若不在 Qlik Sense 字型物件庫中，則會對應至 Source Sans Pro。

資訊備註

等寬字體 (Courier New、Consolas) 會對應到比例字體 Source Sans Pro。等寬字元對齊未保留。

## 系統變數

QV2QS 會將系統變數從轉換後的變數清單中排除。這些變數由 Qlik 引擎管理，且不需要包含在 `variables.json` 中。範例包括`DateFormat`、`ThousandSep`、`DecimalSep`、`TimestampFormat`、`ErrorMode`，以及`NullDisplay`。

在載入指令碼中明確設定的系統變數 (例如，`SET DateFormat='YYYY-MM-DD';`) 會保留在載入指令碼中，並在重新載入時生效。排除僅適用於轉換後的應用程式中的變數定義，不適用於載入指令碼中的`SET`或`LET`陳述式。

使用者定義變數會轉換。

## 網格模式

已啟用格線模式的 QlikView 圖表 (`EnablePrimaryDimension`) 使用第一個維度做為分面欄位，以顯示迷你圖表的格線。Qlik Sense 在標準圖表上沒有原生格狀模式。QV2QS 會自動轉換網格圖表，方法是使用 Visualization Bundle 中的 Qlik Sense 網格容器延伸 (`qlik-trellis-container`)。

在轉換過程中，QV2QS 會執行以下步驟：

1. 建立主要視覺化 — 原始圖會轉換，不含網格維度。對於僅限主要格線圖，維度 0 已移除。當次要網格也啟用時，維度 0 和 1 都會被移除。剩餘的圖會儲存為應用程式中的主要視覺化。
2. 建立格線容器 — `qlik-trellis-container` 物件會放置在工作表的原始圖位置。容器參考主要視覺化，並使用已移除的維度作為其資料定義中的分面欄位。當主要和次要網格都啟用時，容器資料定義包含兩個分面維度。
3. 配置格線 — QlikView 欄和列設定會對應至 trellis 容器欄計數和最大圖計數。圖表的上限數量是透過欄數乘以列數計算的。當刻面維度的數量超過格線大小時，QV2QS 會增加最大圖表計數以容納所有維度值。對於次要網格，總基數是主要維度與次要維度的基數的乘積。此值會向上捨入至欄數的最近倍數，以便格線均勻填滿。此擴展記錄為圖調整。

網格容器使用與原始圖相同的qv\_id映射，因此它在工作表上佔據相同的位置。

僅限主要格線需要至少兩個維度 (一個用於格線分面，另一個用於主圖)。主要加上次要的網格至少需要三個維度（兩個用於網格分面，一個用於主圖）。圖表若維度少於所需，則會被跳過。

## 測量累積

QlikView 量值累計 (執行中總計) 會轉換為 Qlik Sense 累計修飾符。支援以下累積模式：

* 完整累計 — 量值運算式會使用 `RangeSum()` 搭配 `Above()` 和 `RowNo()` 重新撰寫，以產生跨所有列的執行中總計。修飾符 `fullAccumulation` 旗標設定為 `true`，其 `steps` 值為 6。
* 步驟累計 — 當 QlikView 累計步數大於 1 時，量值運算式會使用 `RangeSum()` 搭配 `Above()` 以及指定的步數。修飾元 `fullAccumulation` 旗標已設定為 `false`。

生成的累積表達式適應維度欄位類型：

* 數值維度 — 設定分析邊界使用 `Min()` 和 `Max()` 針對該欄位。
* 文字尺寸 — 設定分析邊界使用 `MinString()` 和 `MaxString()` 用於欄位。
* 二維圖表 — 會產生一個 `Aggr()` 包裝器，以將累積巢狀地放置在外部維度內容中。

當套用累積時，QV2QS 會停用連續軸模式 (`preferContinuousAxis=false`)，並將 `nullMode` 設定為 `connect`，以確保正確的視覺呈現。原始量值表達式和標籤保存在修飾符的 `base` 屬性中。

## 分頁容器

QV2QS 會使用三種策略轉換 QlikView 索引標籤容器，具體取決於容器組態和內容。在所有情況下，子物件會保留在與容器相同的 Qlik Sense 工作表上。

* 索引標籤式容器 — 不會與其他物件重疊的獨立多索引標籤容器，會轉換為原生 Qlik Sense 索引標籤式容器 (`sn-tabbed-container`)。每個分頁成員都會成為容器中的一個分頁。Tab 鍵順序遵循原始 QlikView 成員順序。
* 偽分頁 — 當多分頁容器與其他物件重疊，或巢狀內嵌於另一個容器中時，QV2QS 會將分頁扁平化為一個版面配置容器。會產生一個按鈕列，其中每個分頁都有一個`action-button`。每個按鈕都會使用 `SetVariable` 動作來設定一個導覽變數。顯示子物件上的條件 (例如，`=If('$(vCT01Tab)'='1',1,0)`) 控制哪個分頁內容可見。一次只能看到一個分頁。按鈕列重現原始 QlikView 容器的索引標籤切換行為。
* 版面配置容器 — 容器在格線模式中會轉換為版面配置容器(`sn-layout-container`)。

單一物件容器已簡化。未建立分頁條或變數。單一子物件直接放置於容器位置，並套用容器顯示條件。

巢狀容器支援最多可達 8 層深度。QV2QS 會偵測循環並停止遞迴，如果容器建立循環參照。

在容器上以及在個別子物件上的顯示條件，是使用邏輯 AND 組合的。子物件僅在容器條件、分頁變數條件以及子物件條件全部評估為 true 時可見。

## 顯示條件

QlikView 在個別物件上的顯示條件會被保留。Qlik Sense 不支援直接在視覺化物件上設定顯示條件。QV2QS 將具有顯示條件的物件包裝在單一子項版面配置容器中，並將條件套用為容器上的`condition`項目。已在版面配置容器內的物件 (由於重疊)，會直接收到容器項目上的條件。

當顯示條件評估為 false 時，版面配置容器仍會保留在格線位置，但不顯示任何內容。隱藏的容器不會摺疊或導致相鄰物件重排。在動態格線和固定畫布模式下，隱藏的物件會在原始位置留下空白空間。空白空間行為與 QlikView 相符，其中隱藏的物件也會留下空白空間。

## 替代狀態

QV2QS 保留替代狀態指派。繫結至 QlikView 中替代狀態的物件，在 Qlik Sense 中會保留相同的狀態繫結。州名會被精確保留。QV2QS 在部署期間，於 Qlik Cloud 應用程式中建立所需的替代狀態。在集合分析表達式中的替代狀態參考 (例如，`{[State2]<Year={2024}>}`) 會原樣傳遞，並在 Qlik Sense 中無需修改即可運作。

在「僅限本機」模式下 (`--unbuildOnly`)，替代狀態名稱會寫入 `cloud/alternate_states.json` 到專案子資料夾中 (例如，`<outputDir>/Sales/cloud/alternate_states.json`)。部署輸出至 Qlik Cloud 租用戶時，必須手動或透過 `qlik app build` 工具建立狀態。

## 物件動作

QV2QS 轉換按鈕 (BU、BT) 和文字物件 (TX) 上的動作。包含動作的文字物件會升級為動作按鈕 (`action-button`)。支援的動作類型包括導覽、`SetVariable`、`SelectField`，以及其他記載於[轉換結果](https://help.qlik.com/zh-TW/migration/Content/Qv2qsMigration/conversion-results/conversion-outcomes.htm)的類型。

其他物件類型（圖表、列表框、滑桿和容器）上的動作不會轉換。QlikView 支援 `OnActivate` 動作於任何物件類型，但 QV2QS 僅從按鈕和文字物件 XML 解析動作。非巨集動作 (`SetVariable`、`SelectField`、導覽) 附加到圖表、清單方塊或其他非按鈕物件，會在轉換期間捨棄，且不會出現在轉換報告中。為了尋找已捨棄的動作，請在 PRJ XML 檔案中搜尋非按鈕物件定義裡的 `<Actions>` 元素。

資訊備註

間隙掃描器會偵測跨所有物件類型的巨集呼叫，以用於報告目的。分析工作表中的巨集交叉參照會反映所有物件，不只按鈕。非按鈕物件上的非巨集動作類型不會被報告。

## 計算條件

計算條件會保留用於下列視覺化類型：長條圖、盒鬚圖、組合圖、量測計、折線圖、Mekko 圖、圓形圖、散佈圖、格線圖、樞紐分析表、表格、樹狀結構圖和瀑布圖。

條件表達式和自訂錯誤訊息 (當條件不符合時向使用者顯示的文字) 都會套用至超立方體定義。如果原始 QlikView 物件沒有自訂訊息，Qlik Sense 會顯示預設計算條件訊息。

不在上述清單中的視覺效果類型 (包括漏斗圖、雷達圖和 KPI) 不會收到計算條件。如果 QlikView 物件具有計算條件，且目標視覺化類型不支援此功能，則條件和訊息都會被靜默捨棄。

## 了解更多

* [轉換範圍](https://help.qlik.com/zh-TW/migration/Content/Qv2qsMigration/known-limitations/conversion-scope.htm)
* [物件類型對應](https://help.qlik.com/zh-TW/migration/Content/Qv2qsMigration/object-type-mapping.htm)
* [轉換結果](https://help.qlik.com/zh-TW/migration/Content/Qv2qsMigration/conversion-results/conversion-outcomes.htm)
* [尺寸和測量限制](https://help.qlik.com/zh-TW/migration/Content/Qv2qsMigration/conversion-reference/dimension-and-measure-limits.htm)