# オブジェクト変換の詳細

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`を渡します。

修正は、設定された修飾子値リスト内でのみ、位置指定置換を使用して適用されます。フィールド名、関数名、およびその他の式テキストは一切変更されません。2つの修正は個別に制御されます。シングルクォートの修正を無効にするには、`--noFixSingleQuotedSearch` を渡します。サポートされていない機能の検出結果は変更されません。

Expression\_Findingsワークシートおよびエグゼクティブサマリーダッシュボードには、各検出結果が変数定義またはチャートオブジェクト式のどちらに由来するかを示すSource列が含まれています。「ステータス」列には、検出結果が自動修正されたか、手動レビューが必要か、または自動修正が利用できないかが表示されます。

検出されたパターンの完全なリストについては、[分析](https://help.qlik.com/ja-JP/migration/Content/Qv2qsMigration/conversion-results/analysis.htm)を参照してください。セット分析の構文リファレンスについては、Qlik Cloudヘルプの[セット分析](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/set-analysis-set-operators-modifiers.htm)を参照してください。

情報メモ

QV2QS は、すべての式フィールド (ディメンション、メジャー、表示条件、色式、タイトル、計算条件、その他)、変数定義、およびロード スクリプトで、サポートされていない関数をスキャンします。検出されたインスタンスは、分析レポートに一覧表示されます。

以下の QlikView 固有の関数は Qlik Sense では利用できません。

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

検出されたロード スクリプト パターンのリストについては、[分析](https://help.qlik.com/ja-JP/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 | 日付 (D) |
| TIME | 時間 (T) |
| TIMESTAMP | タイムスタンプ (TS) |
| INTERVAL | 時間間隔 (IV) |

## ソート

QV2QS は、すべての QlikView の並べ替え条件を Qlik Sense の対応するものに変換します。以下の並べ替え設定は1対1でマッピングされます: 状態による並べ替え、頻度による並べ替え、数値による並べ替え、アルファベット順による並べ替え、ロード順による並べ替え、式による並べ替え (式テキストを含む)、およびグレースケールによる並べ替え。

リストボックスフィールドの場合、QV2QSは日付のようなフィールドで状態ベースのソートを抑制するために、追加のヒューリスティックを適用します。詳細については、[引数リファレンス](https://help.qlik.com/ja-JP/migration/Content/Qv2qsMigration/command-line-interface/argument-reference.htm)を参照してください。

## 視覚的な合図および条件付きの色分け

QlikView の視覚的な合図 (しきい値ベースのメジャーの条件付き色) は、テーブルおよびピボット テーブルのビジュアライゼーション向けに Qlik Sense の色式に変換されます。QV2QS は、元の低/標準/高のしきい値の動作を再現する `RGB()` または `ARGB()` の色関数を使用して、ネストされた `If()` 式を生成します。テキストの色と背景色の両方の手がかりが変換されます。チャートの視覚化（棒グラフ、折れ線グラフ、コンボ チャートなど）における視覚的な手がかりは変換されません。

## 式による色付け

QV2QS は、軸ごとおよびメジャーごとの色の式 (背景色とテキストの色) を Qlik Sense の属性式に変換します。テーブルとピボット テーブルの可視化では、背景色とテキスト色の両方の式が保持されます (`cellBackgroundColor` および `cellForegroundColor`)。チャートの視覚化の場合、メジャーの背景色の表現は `colorByExpression` モードに変換されます。軸の色式およびメジャーのテキスト色式は、Qlik Sense チャートが軸ごとの色属性式またはメジャーごとのテキスト色属性をサポートしていないため、チャートタイプでは変換されません。

テーブルおよびピボット テーブルのビジュアライゼーションの場合、メジャーに明示的な色式が存在しない場合でも、ビジュアルキューが定義されていれば、QV2QSはビジュアルキューのしきい値から色式を自動生成します。

## トレンドライン

QlikView のチャートメジャーのトレンドラインは、Qlik Sense のトレンドラインに変換されます。次のトレンドラインの種類はサポートされています。

* 平均、線形、指数、対数、べき乗
* 多項式 (次数 2、3、および 4)

## 基準線

QlikView のチャート軸上の参照線は、Qlik Sense の参照線に変換されます。ラベル、値の式、色、線のスタイル、および表示条件 (条件付き可視性式) は保持されます。基準線に表示条件がない場合、既定の表示設定は常に表示されます。複合グラフは、主軸と第2軸の両方で参照線をサポートしています。

## 複合チャートの軸の割り当て

QV2QS は QlikView コンボ チャートの軸の割り当てを保持します。各メジャーは、元のQlikViewチャートからプライマリまたはセカンダリ軸のバインディングを保持します。測定系列タイプ (棒、線、マーカー) も保持されます。

## ディメンショングループ

QV2QS は QlikView 循環グループおよびドリルダウン グループを Qlik Sense マスターディメンションに変換します。循環グループは循環マスターディメンションとなります。ドリルダウン グループはドリルダウン マスター ディメンションとなります。グループ軸を参照するグラフは、変換されたアプリで対応するマスター軸に紐付けられます。

## フォント処理

Qlik Sense は、固定の Web セーフフォントのセットをサポートしています。QV2QS は QlikView フォントを、最も近い利用可能な Qlik Sense フォントにマッピングします。マッピングできないフォントは、フォールバックフォント (Source Sans Pro) を使用します。

以下の QlikView フォントには明示的なマッピングがあります。

| QlikView フォント | Qlik Sense フォント |
| --- | --- |
| アリアル、ヘルベチカ、タホマ、カリブリ | ソース・サンズ・プロ |
| Segoe UI | インター |
| Verdana | オープン サンズ |
| Times New Roman, Times, Georgia | PT Serif |
| Courier New, Consolas | ソース・サンズ・プロ |

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` オブジェクトが元のチャート位置のシートに配置されます。コンテナはマスター ビジュアライゼーションを参照し、そのデータ定義内で削除されたディメンションをファセット フィールドとして使用します。プライマリとセカンダリの両方のトレリスが有効になっている場合、コンテナのデータ定義には2つのファセットディメンションが含まれます。
3. グリッドを構成します — QlikView の列と行の設定は、トレリス コンテナの列数および最大チャート数にマッピングされます。チャートの最大数は、列数に表示行数を掛けた値として計算されます。ファセット軸のカーディナリティがグリッドサイズを超える場合、QV2QS はすべての軸値を収容するために最大チャート数を増やします。セカンダリトレリスの場合、合計カーディナリティはプライマリおよびセカンダリの軸カーディナリティの積です。値は、列数の最も近い倍数に切り上げられるため、グリッドが均等に埋まります。この拡張はチャート調整として記録されます。

トレリス コンテナは元のチャートと同じqv\_idマッピングを使用するため、シート上で同じ位置を占めます。

プライマリーのみのトレリスには、少なくとも2つのディメンションが必要です（1つはトレリスのファセット用、もう1つはマスターチャート用です）。プライマリとセカンダリのトレリスには、少なくとも3つのディメンションが必要です（トレリスファセット用に2つ、マスターチャート用に1つ）。必要なディメンション数に満たないチャートはスキップされます。

## 蓄積を測定する

QlikView のメジャーの累積 (累計) は、Qlik Sense の累積修飾子に変換されます。以下の累積モードがサポートされています。

* 全累積 — メジャー式は、`RangeSum()` を使用し、`Above()` および `RowNo()` と共に、全ての行にわたる累計を生成するように書き換えられます。修飾子`fullAccumulation`フラグは`true`に設定されており、`steps`の値は6です。
* ステップの累積 — QlikView の累積ステップ数が 1 より大きい場合、メジャー式は、`Above()` と指定されたステップ数と共に `RangeSum()` を使用します。修飾子`fullAccumulation`フラグが`false`に設定されています。

生成された累積式は、軸フィールドのタイプに適応します。

* 数値ディメンション — 分析範囲を設定するには、フィールドに`Min()`と`Max()`を使用します。
* テキストの寸法 — フィールドの分析範囲を設定するには、`MinString()` と `MaxString()` を使用します。
* 二軸グラフ — `Aggr()`ラッパーが生成され、外側の軸のコンテキスト内で集計がネストされます。

蓄積が適用されると、QV2QSは連続軸モード(`preferContinuousAxis=false`)を無効にし、正しい視覚的レンダリングを保証するために`nullMode`を`connect`に設定します。元のメジャー式とラベルは、モディファイアの `base` プロパティに保持されます。

## タブコンテナ

QV2QS は、コンテナの構成とコンテキストに応じて、3つの戦略を使用して QlikView タブ コンテナを変換します。すべての場合において、子オブジェクトはコンテナと同じ Qlik Sense シートに留まります。

* タブ付きコンテナ — 他のオブジェクトと重ならないスタンドアロンのマルチタブ コンテナは、ネイティブのQlik Senseタブ付きコンテナに変換されます (`sn-tabbed-container`)。各タブメンバーは、コンテナ内でタブになります。タブ順は元のQlikViewメンバー順に従います。
* 擬似タブ — 複数タブのコンテナが他のオブジェクトと重なる場合、または別のコンテナ内にネストされている場合、QV2QSはタブをレイアウトコンテナにフラット化します。ボタンストリップは、タブごとに1つの`action-button`で生成されます。各ボタンは、`SetVariable`アクションを使用してナビゲーション変数を設定します。子オブジェクトの表示条件 (例: `=If('$(vCT01Tab)'='1',1,0)`) は、どのタブコンテンツを表示するかを制御します。一度に1つのタブのみが表示されます。ボタンストリップは、元の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 app build`ツールを使用して、出力をQlik Cloud テナントに展開する際に作成する必要があります。

## オブジェクトアクション

QV2QS はボタン (BU, BT) とテキストオブジェクト (TX) のアクションを変換します。アクションを含むテキストオブジェクトは、アクションボタン(`action-button`)に昇格されます。サポートされているアクションタイプには、ナビゲーション、`SetVariable`、`SelectField`、および[コンバージョン結果](https://help.qlik.com/ja-JP/migration/Content/Qv2qsMigration/conversion-results/conversion-outcomes.htm)に記載されているその他のものが含まれます。

他のオブジェクトタイプ (チャート、リストボックス、スライダー、コンテナ) でのアクションは変換されません。QlikView は `OnActivate` アクションをあらゆるオブジェクト タイプでサポートしていますが、QV2QS はボタンおよびテキスト オブジェクトの XML からのみアクションを解析します。チャート、リストボックス、またはその他のボタン以外のオブジェクトにアタッチされているマクロ以外の操作 (`SetVariable`、`SelectField`、ナビゲーション) は、変換中に削除され、変換レポートには表示されません。ドロップされたアクションを見つけるには、PRJ XMLファイル内の非ボタンオブジェクト定義で`<Actions>`要素を検索します。

情報メモ

ギャップスキャナーは、レポート作成目的で、すべてのオブジェクトタイプにわたるマクロ呼び出しを検出します。分析ワークシート内のマクロの相互参照は、ボタンだけでなく、すべてのオブジェクトを反映します。ボタン以外のオブジェクトに対するマクロではないアクションタイプは報告されません。

## 計算条件

計算条件は、以下の視覚化タイプに対して保持されます: 棒グラフ、ボックスプロット、コンボ チャート、ゲージ、折れ線グラフ、メッコ チャート、円グラフ、散布図、グリッド チャート、ピボット テーブル、テーブル、ツリーマップ、およびウォーターフォール グラフ。

条件式とカスタムエラーメッセージ（条件が満たされない場合にユーザーに表示されるテキスト）の両方が、ハイパーキューブ定義に適用されます。元の QlikView オブジェクトにカスタムメッセージがない場合、Qlik Sense は、既定の計算条件メッセージを表示します。

上記リストにない視覚化タイプ (ファネル チャート、レーダー チャート、KPI を含む) は、計算条件を受け取りません。QlikViewオブジェクトに計算条件が設定されており、ターゲットのビジュアライゼーション タイプがその機能をサポートしていない場合、条件とメッセージの両方が警告なしに破棄されます。

## 詳細はこちら

* [変換スコープ](https://help.qlik.com/ja-JP/migration/Content/Qv2qsMigration/known-limitations/conversion-scope.htm)
* [オブジェクトタイプマッピング](https://help.qlik.com/ja-JP/migration/Content/Qv2qsMigration/object-type-mapping.htm)
* [コンバージョンの成果](https://help.qlik.com/ja-JP/migration/Content/Qv2qsMigration/conversion-results/conversion-outcomes.htm)
* [ディメンションとメジャーの制限](https://help.qlik.com/ja-JP/migration/Content/Qv2qsMigration/conversion-reference/dimension-and-measure-limits.htm)