事实表与维度表存多重关系如何建模?USERELATIONSHIP不生效怎么办?
问题背景
现有两张业务表:
- 员工表:存储员工全量详情信息,主键为员工ID
- 员工证件表:记录员工各类证件的到期状态,包含签证ID、执照ID、保险ID三个关联字段,三类字段的取值均对应员工表的员工ID,需要关联查询对应ID的员工详情。
问题描述
尝试使用DAX的USERELATIONSHIP函数实现多关系关联查询,未得到预期结果,无法确定是否为数据建模逻辑存在问题。
参考表结构

解决方案
你当前的需求属于典型的「事实表单维度多外键关联同一张维度表」场景,USERELATIONSHIP函数是适配该场景的正确方案,未生效大概率是模型配置或DAX写法不符合要求,可按以下步骤排查调整:
先完成模型关系配置
进入数据模型视图,建立3组关联关系:- 员工表[员工ID] → 员工证件表[签证ID]:设置为非活动关系
- 员工表[员工ID] → 员工证件表[执照ID]:设置为非活动关系
- 员工表[员工ID] → 员工证件表[保险ID]:设置为非活动关系
注:你可以根据日常使用频率,把最常用的一组关系设置为默认活动关系,其余设为非活动。
修正DAX写法
USERELATIONSHIP不能单独调用,必须嵌套在CALCULATE/CALCULATETABLE这类支持上下文转换的函数内部使用,以下为查询签证对应员工姓名的正确示例:签证对应员工姓名 = CALCULATE( VALUES('员工表'[员工姓名]), USERELATIONSHIP('员工表'[员工ID], '员工证件表'[签证ID]) )需要查询执照、保险对应员工信息时,仅需替换
USERELATIONSHIP的第二个参数为对应字段即可。新手友好优化方案
如果你对DAX函数不熟悉,也可以通过Power Query对员工证件表做逆透视转换,将「签证ID、执照ID、保险ID」三列转为行结构,新增「证件类型、关联员工ID」两个字段,转换后仅需建立1组员工表[员工ID]→员工证件表[关联员工ID]的活动关系,即可直接查询所有证件对应的员工信息,无需额外编写DAX。
内容的提问来源于stack exchange,提问作者Akhil Raj C K
相关产品推荐
相关产品推荐

