# 分析

QV2QS 會自動掃描每個 QlikView 文件，找出移轉後可能需要注意的功能和模式。部分發現項目屬於資訊性質。其他發現會指出不受支援的功能，或在 Qlik Sense 中運作方式不同的部分。結果會顯示在執行摘要的 其他發現 區段，以及 Excel 報告的 分析 工作表中。

分析與轉換報告是分開的。轉換報告可衡量物件的轉換成效。此分析識別出 Qlik Cloud 部署的其他相容性考量。

## 掃描哪些內容

QV2QS 會檢查 QlikView 文件的七個區域。

隱藏的指令碼

QlikView 文件可包含在可見指令碼之前執行的隱藏載入指令碼。隱藏的指令碼儲存在 QVW/QVF 二進位檔案內的壓縮區塊中，且在 PRJ 資料夾中不可見。QV2QS 會從二進位檔案擷取隱藏的指令碼，並將其附加至 `script.qvs` 中可見的載入指令碼前端。當偵測到隱藏的指令碼時，「分析」工作表與執行摘要的「其他調查結果」區段會顯示一項資訊性調查結果。

載入指令碼模式

QV2QS 會掃描載入指令碼 (`LoadScript.txt`)，以找出在移轉期間需要注意的陳述式與函數。當存在隱藏指令碼時，隱藏指令碼內容會包含在掃描中。某些陳述式在 Qlik Sense 中不受支援。其他模式可能需要路徑調整或替代選項做法。註解行和區塊註解已排除在掃描之外。

以下是偵測到的模式：

| 模式 | 描述 |
| --- | --- |
| 二進位載入 | 從另一個 QVW 檔案載入資料的 `BINARY` 陳述式。資料載入方式可能需要修改。 |
| 套件載入 | `BUNDLE` 或 `INFO LOAD` 將影像內嵌於 QVW 的陳述式。在 Qlik Sense 中不支援。 |
| InputField | `INPUTFIELD` 用於使用者資料輸入的陳述式。在 Qlik Sense 中不支援。 |
| Direct Discovery | 適用於即時資料來源連線的 `DIRECT QUERY` 陳述式。在 Qlik Sense 中不支援。 |
| 納入 | `$(Include=...)` 或 `$(Must_Include=...)` 對外部指令碼檔案的參照。檔案路徑可能需要調整。 |
| 命令 | 執行作業系統命令的 `COMMAND` 陳述式。在 Qlik Sense 中不支援。 |
| 執行 | 執行外部程式的 `EXECUTE` 陳述式。在 Qlik Cloud 中不支援。 |
| Image\_Size | `Image_Size` 函數在 Qlik Sense 中不支援。 |
| GetCurrentField | `GetCurrentField` 函數在 Qlik Sense 中不支援。 |
| GetExtendedProperty | `GetExtendedProperty` 函數在 Qlik Sense 中不支援。 |
| 輸入平均值 / 輸入總和 | 輸入欄位的彙總函式。在 Qlik Sense 中不支援。 |
| MsgBox | 適用於對話方塊的 `MsgBox` 函式。在 Qlik Sense 中不支援。 |
| NoOfReports | `NoOfReports` 函數在 Qlik Sense 中不支援。 |
| 報表註解 / 報表識別碼 / 報表名稱 / 報表編號 | 報表相關功能。在 Qlik Sense 中不支援。 |

每項結果都包含來自載入指令碼的行號和行文字。

文件屬性

QV2QS 會檢查 `DocProperties.xml` 是否有需要注意的文件層級功能。有些在 Qlik Sense 中不受支援。其他項目受支援，但需要手動設定，或運作方式有所不同。

| 屬性 | 描述 |
| --- | --- |
| 區段存取 | 列層級安全性已啟用。Qlik Sense 支援區段存取，但語法不同。 |
| 動態資料更新 | 已啟用動態資料更新。在 Qlik Sense 中不支援。 |
| Direct Discovery 模式 | Direct Query 模式是在文件層級啟用。在 Qlik Sense 中不支援。 |
| 警示 | 警示定義已存在。Qlik Sense 不支援警示。 |
| 文件開啟時動作 | 已定義文件層級的 OnOpen 觸發程序動作。需要手動重新建立。 |
| 文件 OnPostReload 動作 | 已定義文件層級的 OnPostReload 觸發程序動作。需要手動重新建立。 |
| 文件延伸 | 文件擴充功能已安裝。不支援 `QVAccessibility` 以外的擴充功能。 |

欄位屬性

QV2QS 會偵測已啟用 一律選取一個 屬性的欄位。此屬性是引擎層級的設定，無法透過 JSON 建置輸出套用。部署後，必須在 Qlik Sense 應用程式編輯器中手動套用該屬性。

VBA 巨集

QV2QS 會從 PRJ 資料夾讀取 `Module.txt`，並剖析所有 VBA Sub 與 Function 定義。針對每個巨集，分析會報告名稱、類型 (Sub 或 Function) 以及行數。

QV2QS 也會透過掃描每個物件 XML 檔案與 `DocProperties.xml` 來尋找叫用巨集的動作觸發程序，以交叉參照巨集叫用。交叉參照可指出哪些物件會叫用哪些巨集，以及這些物件所在的工作表。已定義但從未叫用的巨集會標記為未使用。

集合分析中的運算式引號

QV2QS 會掃描所有物件運算式（維度、量值、顯示條件、色彩運算式、文字運算式）與變數定義，以尋找在 Qlik Sense 中運作方式不同的集合分析引號模式。QlikView (2017 年 11 月之前) 將集合修飾詞中的單引號值視為不區分大小寫的搜尋，與雙引號值相同。Qlik Sense 會將單引號括起的值視為區分大小寫的常值。

以下是偵測到的模式：

| 模式 | 規則 | 可能性 | 描述 | 修復 |
| --- | --- | --- | --- | --- |
| 單引號萬用字元 (`'*US*'`, `'A?'`, `'^abc'`) | 單引號內的萬用字元 | 高 | 萬用字元 `*`、`?` 以及 `^` 字詞邊界錨點在 Qlik Sense 中會解譯為原義文字，而非搜尋模式。 | 將單引號取代為雙引號，以還原搜尋行為。 |
| 單引號比較 (`'>=5'`, `'<2020'`) | 單引號中的比較 | 高 | 比較運算子 `>`、`>=`、`<`、`<=` 在 Qlik Sense 中會被解讀為常值文字，而非數值搜尋。 | 將單引號取代為雙引號，以還原數值比較。 |
| 單引號模糊搜尋 (`'~company'`) | 單引號中的模糊搜尋 | 高 | `~` 前置詞會觸發雙引號中的模糊比對。在單引號中，Qlik Sense 會將其視為常值字串。 | 將單引號取代為雙引號，以恢復模糊搜尋。 |
| 單引號運算式搜尋 (`'=Sum(Sales)>100'`) | 單引號內的運算式搜尋 | 高 | `=` 前置詞會觸發雙引號內的運算式搜尋。在單引號中，Qlik Sense 會將其視為常值字串。 | 將單引號取代為雙引號以還原運算式搜尋。 |
| 單引號搜尋修飾詞 (`'+abc'`, `'-solution'`) | 單引號內的搜尋修飾詞 | 高 | `+`（必須包含）和 `-`（不得包含）修飾詞可在雙引號中運作。在單引號中，Qlik Sense 會將其視為常值字串。 | 將單引號取代為雙引號以還原修飾詞行為。 |
| 單引號複合搜尋 (`'(1\|2\|3)'`, `'(*ABC*&?*Inc*)'`) | 單引號中的複合搜尋 | 高 | 使用邏輯運算子 `\|` (OR)、`&` (AND)、`^` (XOR) 的複合搜尋可在雙引號中運作。在單引號中，Qlik Sense 會將其視為常值字串。 | 將單引號替換為雙引號以恢復複合搜尋。 |
| 數值欄位上的單引號值（日期或數值欄位上的 `'2020'`） | 數值欄位上的單引號 | 高 | 以單引號括住的值符合 Qlik Sense 中的文字表示法。在數值或雙重欄位中，文字表示法可能與儲存的值不符，導致型別不相符。 | 請改用未加引號的數值或雙引號。 |
| 未加引號的裸字串 (`{USA,France}`) | 未加引號的裸值 | 低 | Qlik Sense 接受未加引號的值，但在包含空格、運算子或特殊字元時，其行為容易出錯。 | 將值用單引號括起來以進行字面比對。 |
| 裸欄位參照 (`<Field1=Field2>`) | 裸欄位參照 | 高 | QlikView 允許 `<Field1=Field2>` 在欄位之間轉移選取項目。Qlik Sense 不支援在集合修飾詞中使用直接欄位對欄位參照。 | 取代為 `<Field1=P(Field2)>` 以使用 P() 元素函式。 |
| 未加大括號的裸值 (`<Country=USA>`) | 未加大括號的裸值 | 高 | 集合修改器指派右側不帶大括號的裸值。視上下文而定，QlikView 可能會將該值解譯為常值或欄位參照。Qlik Sense 要求值必須放在大括號內。 | 用大括號括起來：`<Country={USA}>` 或 `<Country={'USA'}>`。 |

文字欄位中以單引號括住的純文字值（例如 `'USA'`）不會被標記。這些值在 Qlik Sense 中可正確作為區分大小寫的常值運作。

QV2QS 支援在集合修飾詞指派的左側使用以方括號括起 (`[Invoice Number]`)、以雙引號括起 (`"Invoice Number"`) 以及以反引號括起 (`` `Invoice Number` ``) 的欄位名稱。在掃描與修復期間，皆可辨識所有三種引號樣式。

依預設，QV2QS 會在轉換期間自動修正物件運算式與變數定義中的單引號搜尋值。包含搜尋語法（萬用字元、比較、模糊搜尋、運算式搜尋、搜尋修飾詞或複合搜尋運算子）且以單引號括住的值會轉換為雙引號。數值欄位中不包含搜尋語法的單引號值會被標記以供手動檢閱，但不會自動修正。針對未加引號的純字串值，另外也提供了實驗性修正，但預設為停用 — 傳遞 `--fixUnquotedSetValues` 即可啟用。修正僅透過集合修飾詞值清單內的位置取代來套用 — 欄位名稱、函數名稱和其他運算式文字絕不會遭到修改。每個修正項目都有獨立的切換開關 (`--noFixSingleQuotedSearch`, `--fixUnquotedSetValues`)。如需詳細資訊，請參閱 [引數參考](https://help.qlik.com/zh-TW/migration/Content/Qv2qsMigration/command-line-interface/argument-reference.htm)。

結果會顯示在主控台摘要的 Expression quoting findings 區段、高階主管摘要儀表板的 Expression 子索引標籤，以及 Excel 報告的 Expression\_Findings 工作表中。每項調查結果都包含一個 狀態 指標：已自動修正（於轉換期間修正）、需要審查（需要手動處理）或 無可用修正（不支援的功能）。執行摘要儀表板提供篩選切換開關，可隱藏已自動修正的資料列，讓您專注於仍需處理的項目。如需有關集合分析語法差異的詳細資訊，請參閱 Qlik Cloud 說明中的 [集合分析](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/set-analysis-set-operators-modifiers.htm)。

不支援的圖功能

QV2QS 會掃描所有物件運算式 (維度、量值、顯示條件、色彩運算式、文字運算式) 與變數定義，以找出 Qlik Sense 不支援的 QlikView 圖函數。掃描器會比對函式呼叫，且函式名稱與左括號之間可包含選用的空白或換行符號。字串常值內的函式名稱已排除。

偵測到下列函式：

| 函數 | 描述 |
| --- | --- |
| GetCurrentField | 傳回目前物件中的作用中欄位名稱。在 Qlik Sense 中不受支援。請參閱 Qlik Cloud 中的 [欄位函數](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/FieldFunctions/field-functions-charts.htm) 以取得支援的替代方案。 |
| GetExtendedProperty | 擷取連結物件中繼資料。在 Qlik Sense 中不受支援。請參閱 Qlik Cloud 中的 [欄位函數](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/FieldFunctions/field-functions-charts.htm) 以取得支援的替代方案。 |
| 輸入 | 擷取使用者輸入的欄位值。在 Qlik Sense 中不支援。 |
| InputAvg | 計算輸入欄位值的平均值。在 Qlik Sense 中不支援。 |
| InputSum | 計算輸入欄位值的總和。在 Qlik Sense 中不支援。 |
| MsgBox | 顯示一個對話方塊。在 Qlik Sense 中不支援。 |
| NoOfReports | 回傳報表物件的數量。在 Qlik Sense 中不支援。 |
| ReportComment | 傳回報表註解。在 Qlik Sense 中不支援。 |
| ReportId | 傳回報表識別碼。在 Qlik Sense 中不支援。 |
| ReportName | 傳回報表名稱。在 Qlik Sense 中不支援。 |
| ReportNumber | 回傳報告編號。在 Qlik Sense 中不支援。 |

不支援的函數發現項目會與集合分析引號發現項目一同顯示在 Expression\_Findings 工作表以及主控台摘要的 潛在運算式問題 區段中。

開發人員書籤

QV2QS 會讀取 `DocInternals.xml` 並列出所有由開發人員建立的書籤。針對每個書籤，分析會回報欄位選取項目、範圍 (全域或工作表特定)，以及是否已儲存版面配置狀態。書籤必須在 Qlik Sense 中手動重新建立。

資訊備註

伺服器層級書籤 (共用和私人) 無法從 PRJ 資料夾中偵測到。

## SaaS 規格估算

QV2QS 會讀取 QVW 二進位檔案，以預估應用程式的基本 RAM 佔用量。此預估是根據內嵌於資料表和欄位描述中的 `ByteSize` 中繼資料。

資訊備註

ByteSize 中繼資料僅在以 QlikView 12.30 或更新版本 (2018 年 11 月) 儲存的 QVW 檔案中提供。如果中繼資料不存在，規模層級將回報為 Unknown。

QV2QS 根據基礎 RAM 佔用空間將應用程式分類為下列層級之一。

| 層級 | 閾值 | 動作 |
| --- | --- | --- |
| 標準 | 最多 5 GB | 不需要採取特殊動作。 |
| 大型應用程式 | 最多 50 GB | 部署至已啟用大型應用程式支援的空間。 |
| 需要最佳化 | 超過 50 GB | 在移轉前，請諮詢 Qlik 管理員或 Qlik 合作夥伴。 |

Analysis 工作表中的大小詳細資料表格也會回報資料表與欄位的數量 (不包含系統資料表與欄位)。如需詳細的欄位基數、資料表資料列數以及每個物件的位元組大小，請參閱 Excel 報表中的 Data\_Model\_Fields 和 Data\_Model\_Tables 工作表。

## 信心水準

每個載入指令碼發現項目都包含一個信賴度等級，指出確實存在相容性問題的可能性。

* 高 — 此模式具體明確。此檢查結果極可能是真正的相容性疑慮。
* 中等 — 此模式可能會比對到不相關的程式碼。手動驗證。
* 低 — 此模式範圍較廣。檢閱已標記的行以確認相關性。

文件屬性結果與巨集結果沒有信賴等級，因為這些結果是以明確的 XML 旗標為依據，而非模式比對。

## 分析限制

分析僅會掃描 PRJ 資料夾和 QVW 二進位檔案。載入指令碼掃描器會偵測 `LoadScript.txt` 中不支援的陳述式與函式。載入指令碼掃描器不會檢查圖運算式。

運算式掃描器會檢查圖運算式 (維度、度量、顯示條件、色彩運算式、文字運算式和變數定義) 中的集合分析引號模式與不支援的函式呼叫。運算式掃描器不會偵測圖運算式中的其他不相容性類別。

存在於 QlikView Server 層級的項目不會被偵測到。未偵測到的項目包括伺服器書籤、伺服器物件、叢集設定、警示條件、報告定義以及工作階段使用資料。

## 深入了解

* [轉換結果](https://help.qlik.com/zh-TW/migration/Content/Qv2qsMigration/conversion-results/conversion-outcomes.htm)
* [轉換報告](https://help.qlik.com/zh-TW/migration/Content/Qv2qsMigration/conversion-results/conversion-report.htm)
* [轉換參考](https://help.qlik.com/zh-TW/migration/Content/Qv2qsMigration/conversion-reference/index.htm)
* [已知限制](https://help.qlik.com/zh-TW/migration/Content/Qv2qsMigration/known-limitations/index.htm)