COMBINEVALUES
2 つ以上のテキスト文字列を結合して 1 つのテキスト文字列にまとめます。 この関数の主な目的は、DirectQuery モデルの複数列リレーションシップをサポートすることです。 詳細については、「解説」を参照してください。
構文
COMBINEVALUES(<delimiter>, <expression>, <expression>[, <expression>]…)
パラメーター
用語 | 定義 |
---|---|
delimiter | 連結時に使用する区切り記号。 定数値を指定する必要があります。 |
式 (expression) | その値が 1 つのテキスト文字列に結合される DAX 式。 |
戻り値
連結された文字列。
解説
COMBINEVALUES 関数では、入力値が異なる場合、出力文字列も異なると仮定されますが、検証されません。 この仮定に基づいて、COMBINEVALUES を使用して計算列を作成し、2 つの DirectQuery テーブルから複数の列を結合するリレーションシップを構築すると、クエリ時に最適化された結合条件が生成されます。 たとえば、ユーザーが Table1 (Column1、Column2) と Table2 (Column1、Column2) の間にリレーションシップを作成する場合、各テーブルに 1 つずつ、次のように 2 つの計算列を作成できます。
Table1[CalcColumn] = COMBINEVALUES(",", Table1[Column1], Table1[Column2])
および
Table2[CalcColumn] = COMBINEVALUES(",", Table2[Column1], Table2[Column2])
そして、
Table1[CalcColumn]
とTable2[CalcColumn]
の間にリレーションシップを作成します。 対応する SQL 演算子および関数に文字通り変換される他の DAX 関数および演算子とは異なり、上記のリレーションシップでは次のような SQL 結合述語が生成されます。(Table1.Column1 = Table2.Column1 OR Table1.Column1 IS NULL AND Table2.Column1 IS NULL)
および
(Table1.Column2 = Table2.Column2 OR Table1.Column2 IS NULL AND Table2.Column2 IS NULL)
結合述語は、複雑な SQL 演算子や関数を含むクエリよりもはるかに優れたパフォーマンスを達成する可能性があります。
COMBINEVALUES 関数では、ユーザーが適切な区切り記号を選択していれば、入力値の一意の組み合わせから個別の出力文字列が確実に生成されますが、仮定が正しいことは検証されません。 たとえば、ユーザーが区切り記号として
"| "
を選択し、Table1 のある行にTable1[Column1] = "| "
およびTable2 [Column2] = " "
があり、Table2 のある行にTable2[Column1] = " "
およびTable2[Column2] = "| "
がある場合、2 つの連結された出力は同じ"|| "
になります。これは、結合操作で 2 つの行が一致しているように見えます。 両方のテーブルが同じ DirectQuery ソースのものである場合、2 つの行は結合されませんが、両方のテーブルがインポートされると結合されます。
例
次の DAX クエリを実行します。
EVALUATE
DISTINCT (
SELECTCOLUMNS ( Date, "Month", COMBINEVALUES ( ", ", [MonthName], [CalendarYear] ) )
)
次の単一列テーブルが返されます。
[Month] |
---|
2020 年 1 月 |
2020 年 2 月 |
2020 年 3 月 |
2020 年 4 月 |
2020 年 5 月 |
2020 年 6 月 |
2020 年 7 月 |
2020 年 8 月 |
2020 年 9 月 |
2020 年 10 月 |
2020 年 11 月 |
2020 年 12 月 |
2021 年 1 月 |
2021 年 1 月 |
2021 年 2 月 |
2021 年 3 月 |
2021 年 4 月 |
2021 年 5 月 |
2021 年 6 月 |
2021 年 7 月 |
2021 年 8 月 |
2021 年 9 月 |
2021 年 10 月 |
2021 年 11 月 |
2021 年 12 月 |