# データ モデリングのベスト プラクティス

Qlik Sense アプリへのデータ ロード方法は、データ構造や希望するデータ モデルによって異なります。このセクションでは、こうしたデータ ロード方法について説明します。



## データ列を行に変える

次のようなデータがあり、売上高を別個の項目にする場合:

元のデータ テーブル

| 年 | Q1 | Q2 | Q3 | Q4 |
| --- | --- | --- | --- | --- |
| 2013 | 34 | 54 | 53 | 52 |
| 2014 | 47 | 56 | 65 | 67 |
| 2015 | 57 | 56 | 63 | 71 |

提案されたアクション

テーブルをロードするときに、Crosstable プレフィックスを使用します。

結果は次のようになります。

Crosstable プレフィックスを適用した後のテーブル

| Year | Quarter | Sales |
| --- | --- | --- |
| 2013 | Q1 | 34 |
| 2013 | Q2 | 54 |
| 2013 | Q3 | 53 |
| 2013 | Q4 | 52 |
| 2014 | Q1 | 47 |
| ... | ... | ... |

Crosstable の詳細については、「[データ ロード スクリプトでのクロス集計の使用](https://help.qlik.com/ja-JP/sense/November2025/Subsystems/Hub/Content/Sense_Hub/LoadData/work-with-cross-tables.htm)」および「[Crosstable](https://help.qlik.com/ja-JP/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/crosstable.htm)」を参照してください。

## データ行を項目に変える

次のような 3 つの項目を持つ汎用テーブルがあり、各属性を個別のテーブルにする場合:

3 つの項目を含む Generic テーブル

| Object | Attribute | Value |
| --- | --- | --- |
| ball | color | red |
| ball | diameter | 25 |
| ball | weight | 3 |
| box | color | 56 |
| box | height | 30 |
| box | length | 20 |
| box | width | 25 |

提案されたアクション

[Generic] ロード プレフィックスを使用して汎用データ モデルを作成します。

次のようなデータ モデルを取得します。

![汎用データ モデル。](https://help.qlik.com/ja-JP/sense/November2025/Subsystems/Hub/Content/Resources/Images/ex_gen_GenericDatabase_300x300.png)

汎用データの詳細については、「[汎用データベース](https://help.qlik.com/ja-JP/sense/November2025/Subsystems/Hub/Content/Sense_Hub/DataSource/generic-databases.htm)」および「[Generic](https://help.qlik.com/ja-JP/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Generic.htm)」を参照してください。

## 階層レベルに整理されたデータ (組織図など) をロードする

次のような隣接するノード テーブルにデータが格納されている場合:

隣接するノード テーブル

| NodeID | ParentNodeID | Title |
| --- | --- | --- |
| 1 | - | General manager |
| 2 | 1 | Country manager |
| 3 | 2 | Region manager |

提案されたアクション

Hierarchy プレフィックスを使用してデータをロードし、展開ノード テーブルを作成します。

展開されたノード テーブル

| NodeID | ParentNodeID | Title | Level1 | Level2 | Level3 |
| --- | --- | --- | --- | --- | --- |
| 1 | - | General manager | General manager | - | - |
| 2 | 1 | Country manager | General manager | Country manager | - |
| 3 | 2 | Region manager | General manager | Country manager | Region manager |

階層レベルの詳細については、「[階層データのロード](https://help.qlik.com/ja-JP/sense/November2025/Subsystems/Hub/Content/Sense_Hub/DataSource/hierarchies.htm)」および「[Hierarchy](https://help.qlik.com/ja-JP/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Hierarchy.htm)」を参照してください。

## 大きなデータベースから新しいレコードや更新されたレコードのみをロードする

多数のレコードを含むデータベースがあり、アプリでデータを更新するためにデータベース全体はリロードしたくありません。新しい、または更新されたレコードのみをロードし、データベースから削除されたレコードを除去したいと思っています。

提案されたアクション

QVD ファイルを使用して、増分ロード ソリューションを実装します。

詳細については、「[増分ロードにより新規および更新された記録をロード](https://help.qlik.com/ja-JP/sense/November2025/Subsystems/Hub/Content/Sense_Hub/LoadData/use-QVD-files-incremental-load.htm)」を参照してください。

## 共通項目を持つ 2 つのテーブルのデータを結合する

Qlik Sense は自動的に共通項目をテーブルに関連付けるが、テーブルの結合方法を制御する必要がある場合、

提案されたアクション : Join / Keep

Join または Keep プレフィックスを使用して 2 つのテーブルを 1 つの内部テーブルに結合できます。

詳細については、「[Join と Keep を使用したテーブルの結合](https://help.qlik.com/ja-JP/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/combine-tables-join-keep.htm)」を参照してください。

提案されたアクション : マッピング

テーブルを結合する代わりにマッピングを使用して、マッピング テーブルに関連付けられた値の検索を自動化します。これにより、ロードするデータ量を減らすことができます。

詳細については、「[結合の代替としてのマッピング](https://help.qlik.com/ja-JP/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/use-mapping-as-alternative-join.htm)」を参照してください。

## 不連続値を間隔に一致させる

1 つの不連続数値のテーブル (Event) があり、これを 1 つ以上の間隔 (Start と End) に一致させる場合、

離散数値のテーブル (EventEvent)

| Time | Event (イベント) | コメント |
| --- | --- | --- |
| 00:00 | 0 | シフト 1 の開始 |
| 01:18 | 1 | ラインの停止 |
| 02:23 | 2 | ラインの 50% の再開 |
| 04:15 | 3 | ライン速度 100% |
| 08:00 | 4 | シフト 2 の開始 |
| 11:43 | 5 | 稼働の終了 |

間隔が含まれているテーブル (StartStart および End End)

| 開始 | End | 順序 |
| --- | --- | --- |
| 01:00 | 03:35 | A |
| 02:30 | 07:58 | B |
| 03:04 | 10:27 | C |
| 07:23 | 11:43 | D |

提案されたアクション

IntervalMatch プレフィックスを使用して、Time 項目を Start と End で定義される間隔にリンクします。

詳しくは「[不連続データと間隔の一致](https://help.qlik.com/ja-JP/sense/November2025/Subsystems/Hub/Content/Sense_Hub/LoadData/matching-intervals-to-discrete-data.htm)」を参照してください。

間隔の開始と終了が明示的に定義されていない場合は、次の表のようにタイム スタンプのみを変更して間隔テーブルを作成する必要があります。

変更の日付と時刻を含むテーブル

| 通貨 | データの変更 | Rate |
| --- | --- | --- |
| EUR | - | 8.59 |
| EUR | 28/01/2013 | 8.69 |
| EUR | 15/02/2013 | 8.45 |
| USD | - | 6.50 |
| USD | 10/01/2013 | 6.56 |
| USD | 03/02/2013 | 6.30 |

詳細については、「[単一の日付からの日付間隔の作成](https://help.qlik.com/ja-JP/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/create-date-interval-from-single-date.htm)」を参照してください。

## 不一致項目値を処理する

データに、異なるテーブル間で名前が一致しない項目値が含まれる場合例えば、あるテーブルには国の値 US が、別のテーブルには United States が含まれます。関連付けが阻止されます。

テーブル 1

| 国 | 地域 |
| --- | --- |
| 米国 | メリーランド |
| 米国 | アイダホ |
| 米国 | ニューヨーク |
| 米国 | カリフォルニア |

Table 2

| Country | Population |
| --- | --- |
| United States | 304 |
| Japan | 128 |
| Brazil | 192 |
| China | 1333 |

提案されたアクション

マッピング テーブルを使用してデータ クレンジングを実行することで、項目値を比較して正しく関連付けることができます。

詳しくは「[データ クレンジング](https://help.qlik.com/ja-JP/sense/November2025/Subsystems/Hub/Content/Sense_Hub/LoadData/data-cleansing.htm)」を参照してください。

## 不一致の項目値の大文字の処理

自分のデータに、テーブル間で書式設定が整合していない項目値が含まれているとします。例えば、あるテーブルのTypeにはsingleという値が含まれており、別のテーブルの同じ項目にはSingleという値が含まれているとします。この状況では、Type項目にsingleとSingleの値の両方が含まれており、大文字と小文字の違いがあるため、関連付けが妨げられます。

テーブル 1

| タイプ | 価格 |
| --- | --- |
| 単色 | 23 |
| 2 色 | 39 |

テーブル 2

| タイプ | 色 |
| --- | --- |
| 単色 | 赤色 |
| 単色 | 青 |
| 2 色 | 白色 |
| 2 色 | ブラック |

提案されたアクション

[データの追加] でデータをロードした場合は、この問題をデータ マネージャーで修正できます。

次の手順を実行します。

1. データ マネージャーのテーブル エディタで、Table2を開きます。

2. Type項目の名前をTable2.Typeに変更します。

   データ プロファイリングを有効にして、[データの追加] で単にテーブルを追加した場合は、自動関連付けが行われないようにするため、その項目にはTable2.Typeという名前がすでに付けられています。この場合は、次の手順によって 2 つのテーブルが関連付けられます。

3. 数式`Lower(Table2.Type)`を使用して計算項目を作成し、Typeという名前を付けます。

4. [データのロード] をクリックします。

これで、Table1とTable2が項目Typeによって関連付けられます。この項目には、singleやdoubleのような小文字の値のみが含まれています。

大文字の部分が異なる値を使用する場合は、同様の手順で関連付けを行うことができますが、テーブルでは、同じ名前の項目を使用して関連付けが行われることに注意してください。

* Singleのようにすべての値を大文字にする場合は、代わりにTable1で計算されたType項目を作成し、数式`Capitalize(Table1.Type)`を使用します。
* SINGLEのようにすべての値を大文字にする場合は、両方のテーブルで計算されたType項目を作成し、それぞれのテーブルで数式`Upper(Table1.Type)`と`Upper(Table2.Type)`を使用します。

計算された項目の詳細については、「[計算された項目の使用](https://help.qlik.com/ja-JP/sense/November2025/Subsystems/Hub/Content/Sense_Hub/LoadData/add-calculated-field.htm)」を参照してください。

大文字化の詳細については、「[Capitalize - スクリプトおよびチャート関数](https://help.qlik.com/ja-JP/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/Capitalize.htm)」、「[Lower - スクリプトおよびチャート関数](https://help.qlik.com/ja-JP/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/Lower.htm)」、および「[Upper - スクリプトおよびチャート関数](https://help.qlik.com/ja-JP/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/Upper.htm)」を参照してください。

## 地理空間データをロードしてマップのデータを可視化する

マップを使用して可視化するデータ (国別または店舗別の売上データなど) がある場合、マップ ビジュアライゼーションを使用するには、エリア データまたはポイント データをロードする必要があります。

提案されたアクション

KML ファイルまたは Excel ファイルから、データ値の場所と一致するエリア データまたはポイント データをロードできます。また、実際のマップの背景もロードする必要があります。

詳細については、「[ユーザー独自のマップ データのロード](https://help.qlik.com/ja-JP/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Visualizations/Map/load-map-data.htm)」を参照してください。