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 の 1 つの行にTable1[Column1] = "| "
とTable2 [Column2] = " "
がある場合、Table2 の 1 つの行にTable2[Column1] = " "
とTable2[Column2] = "| "
がある場合、連結された 2 つの出力は同じ"|| "
になります。これは、2 つの行が結合操作で一致していることを示しているようです。 両方のテーブルが同じ DirectQuery ソースの場合、2 つの行は結合されませんが、両方のテーブルがインポートされた場合は結合されます。
例
次の DAX クエリ:
EVALUATE
DISTINCT (
SELECTCOLUMNS ( Date, "Month", COMBINEVALUES ( ", ", [MonthName], [CalendarYear] ) )
)
次の単一列テーブルを返します。
[月] |
---|
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 月 |