使用查找来匹配 Power BI/DAX 中列中的多个值
Using lookups to match multiple values in columns in Power BI/DAX
我有一个 table 的大学单位数据。这些单元历来以两种不同的长度(在相同的单元代码下)交付:会话和术语。它看起来像这样:
UnitCode
Year
OfferedIn
UNIT001
2021
Session1
UNIT001
2021
Session2
UNIT002
2021
Session1
UNIT002
2021
Term4
UNIT003
2020
Session1
UNIT003
2020
Session3
UNIT003
2021
Term2
我需要按两种样式提供的单位对各种图表进行切片,而不管实际的年份、会话或学期。因此,额外的列将如右下方所示:
UnitCode
Year
OfferedIn
OfferedInBoth
UNIT001
2021
Session1
UNIT001
2021
Session2
UNIT002
2021
Session1
TRUE
UNIT002
2021
Term4
TRUE
UNIT003
2020
Session1
TRUE
UNIT003
2020
Session3
TRUE
UNIT003
2021
Term2
TRUE
所以我想查看 UnitCode 列中的值,看看它是否在 OfferedIn 列中具有两种不同类型的值(我可以对类型执行 'contains' 表达式)单位代码是一样的。如何生成 OfferedInBoth 列? (或者我是否需要创建一个新的 table?我希望它尽可能保持动态,因为数据集会随着时间的推移添加新的单位代码。)
您可以使用下面的 DAX 代码创建一个计算列。将“Table1”引用替换为您的 table 名称并添加适用于 SWITCH 语句的任何 session/term 值。
OfferedInBoth =
VAR unitCode = Table1[UnitCode]
VAR unitCodeTable = FILTER(Table1, Table1[UnitCode] = unitCode)
VAR containsSession =
SWITCH(
TRUE,
CONTAINS(unitCodeTable, Table1[OfferedIn], "Session1"), TRUE(),
CONTAINS(unitCodeTable, Table1[OfferedIn], "Session2"), TRUE(),
CONTAINS(unitCodeTable, Table1[OfferedIn], "Session3"), TRUE(),
CONTAINS(unitCodeTable, Table1[OfferedIn], "Session4"), TRUE(),
FALSE
)
VAR containsTerm =
SWITCH(
TRUE,
CONTAINS(unitCodeTable, Table1[OfferedIn], "Term1"), TRUE(),
CONTAINS(unitCodeTable, Table1[OfferedIn], "Term2"), TRUE(),
CONTAINS(unitCodeTable, Table1[OfferedIn], "Term3"), TRUE(),
CONTAINS(unitCodeTable, Table1[OfferedIn], "Term4"), TRUE(),
FALSE
)
RETURN containsSession && containsTerm
您可以创建一个 measure 如下-
true_false =
var current_row_unitcode = min('your_table_name'[UnitCode])
var count_sess =
COUNTROWS(
FILTER(
ALL('your_table_name'),
'your_table_name'[UnitCode] = current_row_unitcode
&& LEFT('your_table_name'[OfferedIn],4) = "Sess"
)
)
var count_term =
COUNTROWS(
FILTER(
ALL('your_table_name'),
'your_table_name'[UnitCode] = current_row_unitcode
&& LEFT('your_table_name'[OfferedIn],4) = "Term"
)
)
return if(
count_sess >=1 && count_term >= 1, "True",""
)
输出-
我有一个 table 的大学单位数据。这些单元历来以两种不同的长度(在相同的单元代码下)交付:会话和术语。它看起来像这样:
UnitCode | Year | OfferedIn |
---|---|---|
UNIT001 | 2021 | Session1 |
UNIT001 | 2021 | Session2 |
UNIT002 | 2021 | Session1 |
UNIT002 | 2021 | Term4 |
UNIT003 | 2020 | Session1 |
UNIT003 | 2020 | Session3 |
UNIT003 | 2021 | Term2 |
我需要按两种样式提供的单位对各种图表进行切片,而不管实际的年份、会话或学期。因此,额外的列将如右下方所示:
UnitCode | Year | OfferedIn | OfferedInBoth |
---|---|---|---|
UNIT001 | 2021 | Session1 | |
UNIT001 | 2021 | Session2 | |
UNIT002 | 2021 | Session1 | TRUE |
UNIT002 | 2021 | Term4 | TRUE |
UNIT003 | 2020 | Session1 | TRUE |
UNIT003 | 2020 | Session3 | TRUE |
UNIT003 | 2021 | Term2 | TRUE |
所以我想查看 UnitCode 列中的值,看看它是否在 OfferedIn 列中具有两种不同类型的值(我可以对类型执行 'contains' 表达式)单位代码是一样的。如何生成 OfferedInBoth 列? (或者我是否需要创建一个新的 table?我希望它尽可能保持动态,因为数据集会随着时间的推移添加新的单位代码。)
您可以使用下面的 DAX 代码创建一个计算列。将“Table1”引用替换为您的 table 名称并添加适用于 SWITCH 语句的任何 session/term 值。
OfferedInBoth =
VAR unitCode = Table1[UnitCode]
VAR unitCodeTable = FILTER(Table1, Table1[UnitCode] = unitCode)
VAR containsSession =
SWITCH(
TRUE,
CONTAINS(unitCodeTable, Table1[OfferedIn], "Session1"), TRUE(),
CONTAINS(unitCodeTable, Table1[OfferedIn], "Session2"), TRUE(),
CONTAINS(unitCodeTable, Table1[OfferedIn], "Session3"), TRUE(),
CONTAINS(unitCodeTable, Table1[OfferedIn], "Session4"), TRUE(),
FALSE
)
VAR containsTerm =
SWITCH(
TRUE,
CONTAINS(unitCodeTable, Table1[OfferedIn], "Term1"), TRUE(),
CONTAINS(unitCodeTable, Table1[OfferedIn], "Term2"), TRUE(),
CONTAINS(unitCodeTable, Table1[OfferedIn], "Term3"), TRUE(),
CONTAINS(unitCodeTable, Table1[OfferedIn], "Term4"), TRUE(),
FALSE
)
RETURN containsSession && containsTerm
您可以创建一个 measure 如下-
true_false =
var current_row_unitcode = min('your_table_name'[UnitCode])
var count_sess =
COUNTROWS(
FILTER(
ALL('your_table_name'),
'your_table_name'[UnitCode] = current_row_unitcode
&& LEFT('your_table_name'[OfferedIn],4) = "Sess"
)
)
var count_term =
COUNTROWS(
FILTER(
ALL('your_table_name'),
'your_table_name'[UnitCode] = current_row_unitcode
&& LEFT('your_table_name'[OfferedIn],4) = "Term"
)
)
return if(
count_sess >=1 && count_term >= 1, "True",""
)
输出-