データ モデルでは、各列には、列が保持できるデータの種類 (整数、10 進数、テキスト、通貨データ、日付と時刻など) を指定するデータ型が関連付けられています。 データ型は、列に対して実行できる操作の種類と、列に値を格納するために必要なメモリ量も決定します。
PowerPivot アドインを使用している場合は、列のデータ型を変更できます。 日付列が文字列としてインポートされた場合は、これを行う必要がある場合がありますが、別の列にする必要があります。 詳細については、「 PowerPivotで列のデータ型を設定 する」を参照してください。
この記事の内容
データ型の概要
次の表に、データ モデルでサポートされているデータ型の一覧を示します。 元のデータ ソースに別のデータ型が含まれている場合でも、データをインポートするか、数式で値を使用すると、データはこれらのデータ型のいずれかに変換されます。 数式から得られた値では、これらのデータ型も使用されます。
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 桁の 10 進数に制限されます。 |
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 桁の 10 進数で使用できます。 |
該当なし |
空白 |
空白は、SQL NULL を表し、置き換える DAX のデータ型です。 BLANK 関数を使用して空白を作成し、論理関数 ISBLANK を使用して空白をテストできます。 |
1 DAX 数式では、表に記載されているデータ型よりも小さいデータ型はサポートされていません。
2 数値が非常に大きいデータをインポートしようとすると、次のエラーでインポートが失敗する可能性があります。
メモリ内データベース エラー: '<テーブル名>' テーブルの '<列名>' 列には、サポートされていない値 '1.7976931348623157e+308' が含まれています。 操作が取り消されました。
このエラーは、 PowerPivot がその値を使用して null を表しているために発生します。 次の一覧の値は、null 値のシノニムです。
Value |
|
---|---|
9223372036854775807 |
|
-9223372036854775808 |
|
1.7976931348623158e+308 |
|
2.2250738585072014e-308 |
データから値を削除し、もう一度インポートしてみてください。
テーブル データ型
DAX では、集計やタイム インテリジェンスの計算など、多くの関数でテーブル データ型が使用されます。 一部の関数では、テーブルへの参照が必要です。他の関数は、他の関数への入力として使用できるテーブルを返します。 入力としてテーブルを必要とする一部の関数では、テーブルに評価される式を指定できます。一部の関数では、基本テーブルへの参照が必要です。 特定の関数の要件については、「 DAX 関数リファレンス」を参照してください。
DAX 数式での暗黙的および明示的なデータ型変換
各 DAX 関数には、入力と出力として使用されるデータの種類に関する特定の要件があります。 たとえば、一部の関数では、一部の引数には整数が必要で、他の関数の場合は日付が必要です。その他の関数には、テキストまたはテーブルが必要です。
引数として指定した列のデータが関数に必要なデータ型と互換性がない場合、多くの場合、DAX はエラーを返します。 ただし、可能な限り DAX は、データを必要なデータ型に暗黙的に変換しようとします。 次に例を示します。
-
日付を文字列として入力すると、DAX によって文字列が解析され、Windows の日付と時刻の形式の 1 つとしてキャストされます。
-
TRUE + 1 を追加し、結果 2 を取得できます。TRUE は数値 1 に暗黙的に変換され、操作 1 +1 が実行されるためです。
-
2 つの列に値を追加し、1 つの値がテキスト ("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 として返されます。
減算 (-)
次の表では、行ヘッダーは minuend (左側) で、列ヘッダーはサブtrahend (右側) です。
演算子 (-) |
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 |
たとえば、乗算演算で整数と実数を組み合わせた場合、両方の数値が実数に変換され、戻り値も 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"), returns "Expression is true"
=IF("12">12,"Expression is true", "Expression is false") は"Expression is true" を返します。
=IF("12"=12,"Expression is true", "Expression is false"), returns "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 + BLANK |
空砲 |
0 (ゼロ) |
BLANK +5 |
5 |
5 |
BLANK * 5 |
空砲 |
0 (ゼロ) |
5/BLANK |
Infinity |
エラー |
0/BLANK |
NaN |
エラー |
BLANK/BLANK |
空砲 |
エラー |
FALSE または空白 |
FALSE |
FALSE |
FALSE と空白 |
FALSE |
FALSE |
TRUE または空白 |
TRUE |
TRUE |
TRUE と空白 |
FALSE |
TRUE |
空白または空白 |
空砲 |
エラー |
空白と空白 |
空砲 |
エラー |
特定の関数または演算子が空白を処理する方法の詳細については、「DAX 関数リファレンス」セクションの各 DAX 関数の個々のトピック を参照してください。