Join us for an expert-led overview of the tools and concepts you'll need to pass exam PL-300. The first session starts on June 11th. See you there!
Get registeredJoin us at FabCon Vienna from September 15-18, 2025, for the ultimate Fabric, Power BI, SQL, and AI community-led learning event. Save €200 with code FABCOMM. Get registered
在本文中,我们将讨论如何从另一张表中查找值。我们将向你展示一些示例,以帮助你更好地理解。
样本数据:
任务表:
过程表:
员工表:
关系:
场景1:
假设我想计算员工完成每项任务后剩余的任务数。
使用DAX:
剩余 =
VAR _required =
LOOKUPVALUE ( '任务'[要求], [任务], '过程'[任务] )
VAR _hasDone =
CALCULATE (
SUM ( '过程'[已完成] ),
FILTER (
'过程',
[任务] = EARLIER ( '过程'[任务] )
&& [已完成] <= EARLIER ( '过程'[已完成] )
)
)
RETURN
_required – _hasDone
结果:
场景2:
假设我想获得任务表 中每项任务最后剩余多少量。
方法1 ——使用DAX:
由于过程表 中的每个任务都有多个完成日期和值,我们不能再使用 LOOKUPVALUE()。在这种情况下,我们需要获取每个任务的 “已完成”值的累计和,然后用 需求列减去它。
剩余 =
var _hasDone=CALCULATE(SUM('过程'[已完成]),FILTER('过程',[任务]=EARLIER('任务'[任务])))
return [要求] - _hasDone
结果:
方法2 ——在Power Query中使用 M 语言:
完整的M语法:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUXIEYiMDIyN9I30Q19DMQClWJ1rJCMh2QkiZgaRMTcBSxkC2M0LKAsQ0tlCKjQUA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [索引 = _t, 任务 = _t, 开始日期 = _t, 要求 = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"索引", Int64.Type}, {"任务", type text}, {"开始日期", type date}, {"要求", Int64.Type}}),
#"Merged Queries" = Table.NestedJoin(#"Changed Type", {"任务"}, 过程, {"任务"}, "过程", JoinKind.LeftOuter),
#"Aggregated Process" = Table.AggregateTableColumn(#"Merged Queries", "过程", {{"已完成", List.Sum, "Sum of 过程.已完成"}}),
#"Added Custom" = Table.AddColumn(#"Aggregated Process", "遗留", each [要求]-[Sum of 过程.已完成]),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Sum of 过程.已完成"})
in
#"Removed Columns"
结果:
场景3:
假设我想知道每位员工都处理过哪些不同的任务。
方法1——使用DAX:
由于每位员工可能会处理多项任务,所以我们应该使用 CONCATENATEX() 来合并。
处理了哪些任务 =
VAR _t =
SUMMARIZE (
FILTER ( '过程', [员工] = EARLIER ( '员工'[员工] ) ),
[任务]
)
RETURN
CONCATENATEX ( _t, [任务], "," )
结果:
方法2——在Power Query中使用M语言:
完整的M语法:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WcszJLE5UitWJVnJKzQPTrpWpOZVAZiwA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [员工 = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"员工", type text}}),
#"Merged Queries" =Table.NestedJoin(#"Changed Type", {"员工"}, Process, {"Employee"}, "过程", JoinKind.LeftOuter),
#"Expanded Process" = Table.ExpandTableColumn(#"Merged Queries", "过程", {"任务"}, {"任务"}),
#"Removed Duplicates" = Table.Distinct(#"Expanded Process"),
#"Grouped Rows" = Table.Group(#"Removed Duplicates", {"员工"}, {{"联合", each Text.Combine([任务],","), type text}})
in
#"Grouped Rows"
结果:
希望这篇文章能帮助大家解决类似的问题。
作者: Eyelyn Qin
审稿人: Kerry Wang & Ula Huang
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.