データ モデルでは、各列には、列が保持できるデータ型 (整数、10 進数、テキスト、通貨データ、日付と時刻など) を指定するデータ型が関連付けられています。 また、データ型によって、その列に対して実行できる操作の種類や、その列に値を格納するのにどれだけのメモリが必要かも決まります。
PowerPivot アドインを使用している場合は、列のデータ型を変更できます。 日付列が文字列としてインポートされたが、別の文字列である必要がある場合は、この操作が必要になることがあります。 詳細については、「Power Pivot で 列のデータ型を設定する 」を参照してください。
この記事の内容
データ型の概要
次の表に、データ モデルでサポートされるデータ型を示します。 データをインポートするとき、または数式で値を使うとき、元のデータ ソースに別のデータ型が含まれている場合でも、データがこれらのデータ型のいずれかに変換されます。 数式から得られる値も、これらのデータ型を使用します。
| Excel のデータ型 | DAX のデータ型 | 説明 |
|---|---|---|
| 整数 | 64 ビット (8 バイト) の整数値 1、2 | 小数点以下の桁数がない数値。 整数は正または負の数値にできますが、-9,223,372,036,854,775,808 (-2^63) から 9,223,372,036,854,775,807 (2^63-1) の間の整数である必要があります。 |
| 小数 | 64 ビット (8 バイト) の実数 1、2 | 実数は、小数点以下の桁数を持つことができる数値です。 実数は幅広い値をカバーします。 -1.79E +308 から -2.23E -308 までの負の値 ゼロ 2.23E -308 から 1.79E + 308 までの正の値 ただし、有効桁数は 15 桁以下に制限されます。 |
| TRUE/FALSE | Boolean | True または False の値。 |
| テキスト | String | Unicode 文字のデータ文字列。 文字列、数値、日付をテキスト形式で表すことができます。 最大の文字列長は、268,435,456 Unicode 文字 (256 メガ文字) または 536,870,912 バイトです。 |
| 日付 | 日付/時刻 | 日付と時刻を使用できる日付/時刻表現。 有効な日付は 1900 年 1 月 1 日以降のすべての日付です。 |
| 通貨 | 通貨 | 通貨データ型では、-922,337,203,685,477.5808 から 922,337,203,685,477.5807 までの値を、小数点以下 4 桁の固定精度で指定できます。 |
| 該当なし | 空白 | 空白は DAX のデータ型で、SQL null を表して置換します。 BLANK 関数を使用してブランクを作成し、論理関数 ISBLANK を使用してブランクをテストできます。 |
1 DAX 数式は、表に記載されているデータ型より小さいデータ型をサポートしていません。
2 非常に大きな数値を含むデータをインポートしようとすると、インポートが失敗し、次のエラーが表示されることがあります。
メモリ内データベース エラー: '<テーブル名>' テーブルの '<列名>' 列には、サポートされていない値 '1.7976931348623157e+308' が含まれています。 操作は取り消されました。
このエラーは、Power Pivot がその値を使用して null を表すために発生します。 次の一覧の値は、null 値の同義語です。
| Value |
|---|
| 9223372036854775807 |
| -9223372036854775808 |
| 1.7976931348623158e+308 |
| 2.2250738585072014e-308 |
データから値を削除して、インポートを再試行します。
テーブルのデータ型
DAX では、集計やタイム インテリジェンス計算など、多くの関数でテーブル データ型が使用されます。 一部の関数にはテーブルへの参照が必要です。他の関数はテーブルを返し、このテーブルは他の関数への入力として使用できます。 入力としてテーブルを必要とする一部の関数では、テーブルに評価される式を指定できます。関数によっては、ベース テーブルへの参照が必要です。 特定の関数の要件については、「 DAX 関数リファレンス」を参照してください。
DAX 数式での暗黙的および明示的なデータ型変換
各 DAX 関数には、入力および出力として使用されるデータの種類に関する特定の要件があります。 たとえば、一部の関数では、引数には整数が必要で、他の引数には日付が必要です。その他の関数にはテキストまたはテーブルが必要です。
引数として指定した列のデータが、関数で要求するデータ型と互換性がない場合、DAX は多くの場合エラーを返します。 ただし、可能な限り、DAX はデータを必要なデータ型に暗黙的に変換しようとします。 次に例を示します。
- 日付を文字列として入力すると、DAX はその文字列を解析し、Windows の日付と時刻の形式のいずれかとしてキャストしようとします。
- TRUE が暗黙的に数値 1 に変換され、操作 1+1 が実行されるため、TRUE + 1 を加算すると結果 2 になります。
- 2 つの列に値を加算し、一方の値がテキスト ("12") として表され、もう一方が数値 (12) として表される場合、DAX は暗黙的に文字列を数値に変換し、その結果を加算します。 次の式は 44 を返します: = "22" + 22
- 2 つの数値を連結しようとすると、Excel はそれらを文字列として表示してから連結します。 次の式は "1234" を返します: = 12 & 34
次の表は、数式で実行される暗黙的なデータ型変換をまとめたものです。 Excel は、指定された操作で必要に応じて、可能な場合は常に暗黙的な変換を実行します。
暗黙的なデータ変換の表
実行される変換の種類はオペレーターによって決定され、要求された操作を実行する前に必要な値をキャストします。 次の表は、演算子を示し、列の各データ型が交差する行のデータ型とペアになっているときに、そのデータ型に対して実行される変換を示します。
注
テキスト データ型は、これらのテーブルに含まれていません。 数値がテキスト形式で表されている場合、PowerPivot は数値の種類を判断して数値として表そうとする場合があります。
加算 (+)
| 演算子 (+) | INTEGER | CURRENCY | REAL | 日付/時刻 |
|---|---|---|---|---|
| INTEGER | INTEGER | CURRENCY | REAL | 日付/時刻 |
| CURRENCY | CURRENCY | CURRENCY | REAL | 日付/時刻 |
| REAL | REAL | REAL | REAL | 日付/時刻 |
| 日付/時刻 | 日付/時刻 | 日付/時刻 | 日付/時刻 | 日付/時刻 |
たとえば、通貨データと組み合わせて加算演算で実数を使用した場合、両方の値が REAL に変換され、結果は REAL として返されます。
減算 (-)
次の表では、行ヘッダーは負値 (左側) で、列ヘッダーはサブトラエンド (右側) です。
| 演算子 (-) | INTEGER | CURRENCY | REAL | 日付/時刻 |
|---|---|---|---|---|
| INTEGER | INTEGER | CURRENCY | REAL | REAL |
| CURRENCY | CURRENCY | CURRENCY | REAL | REAL |
| REAL | REAL | REAL | REAL | REAL |
| 日付/時刻 | 日付/時刻 | 日付/時刻 | 日付/時刻 | 日付/時刻 |
たとえば、他のデータ型の減算演算で日付が使用された場合、両方の値が日付に変換され、戻り値も日付になります。
注
データ モデルでは単項演算子 - (負) もサポートされていますが、この演算子ではオペランドのデータ型は変更されません。
乗算 (*)
| 演算子 (*) | INTEGER | CURRENCY | REAL | 日付/時刻 |
|---|---|---|---|---|
| INTEGER | INTEGER | CURRENCY | REAL | INTEGER |
| CURRENCY | CURRENCY | REAL | CURRENCY | CURRENCY |
| REAL | REAL | CURRENCY | REAL | REAL |
たとえば、乗算演算で整数と実数を組み合わせた場合、両方の数値は実数に変換され、戻り値も実数になります。
除算 (/)
次の表では、行ヘッダーが分子で、列ヘッダーが分母です。
| 演算子 (/) (行/列) |
INTEGER | CURRENCY | REAL | 日付/時刻 |
|---|---|---|---|---|
| INTEGER | REAL | CURRENCY | REAL | REAL |
| CURRENCY | CURRENCY | REAL | CURRENCY | REAL |
| REAL | REAL | REAL | REAL | REAL |
| 日付/時刻 | REAL | REAL | REAL | REAL |
たとえば、除算演算で整数と通貨値を組み合わせると、両方の値が実数に変換され、結果も実数になります。
比較演算子
比較式では、ブール値は文字列値より大きいと見なされ、文字列値は数値または日付/時刻値よりも大きいと見なされます。数値と日付/時刻の値は、同じランクを持つと見なされます。 ブール値または文字列値に対して暗黙的な変換は実行されません。BLANK または空白の値は、他の比較された値のデータ型に応じて 0/""/false に変換されます。
次の DAX 式は、この動作を示しています。
=IF(FALSE()>"true","Expression is true", "Expression is false"), は "Expression is true" を返します
=IF("12">12,"Expression is true", "Expression is false"), は "Expression is true" を返します。
=IF("12"=12,"Expression is true", "Expression is false"), は "Expression is false" を返します
次の表で説明するように、変換は数値型または日付/時刻型に対して暗黙的に実行されます。
| 比較演算子 | INTEGER | CURRENCY | REAL | 日付/時刻 |
|---|---|---|---|---|
| INTEGER | INTEGER | CURRENCY | REAL | REAL |
| CURRENCY | CURRENCY | CURRENCY | REAL | REAL |
| REAL | REAL | REAL | REAL | REAL |
| 日付/時刻 | REAL | REAL | REAL | 日付/時刻 |
空白、空の文字列、および 0 の値の処理
DAX では、null、空白の値、空のセル、または欠損値はすべて、同じ新しい値型である BLANK で表されます。 また、BLANK 関数を使用して空白を生成したり、ISBLANK 関数を使用して空白をテストしたりすることもできます。
追加や連結などの操作でブランクを処理する方法は、個々の関数によって異なります。 次の表は、空白の処理方法に関する DAX 数式と Microsoft Excel 数式の違いをまとめたものです。
| 式 | DAX | Excel |
|---|---|---|
| 空白 + 空白 | BLANK | 0 (ゼロ) |
| 空白 +5 | 5 | 5 |
| 空白 * 5 | BLANK | 0 (ゼロ) |
| 5/空白 | Infinity | エラー |
| 0/BLANK | NaN | エラー |
| 空白/空白 | BLANK | エラー |
| FALSE または空白 | FALSE | FALSE |
| FALSE および空白 | FALSE | FALSE |
| TRUE または空白 | TRUE | TRUE |
| TRUE と空白 | FALSE | TRUE |
| 空白または空白 | BLANK | エラー |
| 空白と空白 | BLANK | エラー |
特定の関数または演算子が空白を処理する方法の詳細については、「 DAX 関数リファレンス」セクションの各 DAX 関数の個々のトピックを参照してください。