两个或更多文本字符串联接成一个文本字符串。此函数的主要用途是支持 DirectQuery 模型中的多列关系。
语法
COMBINEVALUES ( <分隔符>, <表达式 1>, <表达式 2>, [<表达式 3>] … )
参数 | 属性 | 描述 |
分隔符 | 要在联接过程中使用的分隔符。 必须为一个常量值 | |
表达式 1 | 一个 DAX 表达式,其值将被联接到单个文本字符串中 | |
表达式 2 | 可重复 | 一个 DAX 表达式,其值将被联接到单个文本字符串中 |
返回值
标量
单个已联接的字符串
备注
COMBINEVALUES 函数假设当输入值不同时,输出字符串也不同(但不会对此进行验证)。 基于此假设,使用 COMBINEVALUES 创建计算列来建立联接两个 DirectQuery 表中多个列的关系时,将在查询时生成一个优化的联接条件。 例如,如果用户想要创建 Table1(Column1、Column2)和 Table2(Column1、Column2)之间的关系,他们可以创建两个计算列(这些计算列位于各自的表上),如下所示:
Table1[CalcColumn] = COMBINEVALUES ( ",", Table1[Column1], Table1[Column2] ) 和 Table2[CalcColumn] = COMBINEVALUES ( ",", Table2[Column1], Table2[Column2] )
然后创建 Table1[CalcColumn]
和 Table2[CalcColumn]
之间的关系。 不同于其他 DAX 函数和运算符(会按字面转换为相应的 SQL 运算符和函数),以上关系将生成一个如下所示的 SQL 联接条件:
(Table1.Column1 = Table2.Column1 OR Table1.Column1 IS NULL AND Table2.Column1 IS NULL) and (Table1.Column2 = Table2.Column2 OR Table1.Column2 IS NULL AND Table2.Column2 IS NULL)
与包含复杂 SQL 运算符和函数的联接条件相比,此联接可能会提供更好的查询性能。
COMBINEVALUES 函数依赖于用户选择适当的分隔符来确保输入值的唯一组合产生不同的输出字符串,但它不会验证此假设是否成立。 例如,如果用户选择 "| "
作为分隔符,但 Table1 中的某一行具有 Table1[Column1] = "|"
和 Table1[Column2] = " "
,而 Table2 中的某一行具有 Table2[Column1] = " "
和 Table2[Column2] = "| "
,那么两个连接的输出将为同一 "|| "
,这可能表明这两行在联接操作中是匹配的。 如果两个表都来自同一 DirectQuery 数据源,那两行则不会联接在一起,但如果导入了两个表,则它们会联接在一起。
示例
EVALUATE DISTINCT ( SELECTCOLUMNS ( DimDate, "Month", COMBINEVALUES ( ",", [MonthName], [CalendarYear] ) ) )
- MSDN 文档:COMBINEVALUES
- DAX Guide:COMBINEVALUES
说点什么