PowerBI中使用USERELATIONSHIP计算日期区间数据出错求助
DAX计算日期区间数据错误的排查与修复
问题描述
- 工单表
tt_infopointtickets包含3种日期字段,已关联至主日期表tt_date(x-axis),使用USERELATIONSHIP计算指定日期区间内的工单数量时出现异常:- 七月实际有23条工单,但计算结果仅显示17条
- 五月存在2张工单,但计算结果为空
- 当前使用的DAX代码:
TabelleFilter_AltTest = var test = MAX(MonthTable[Last-Month-Year]) var exc = CALCULATE( COUNT(tt_infopointtickets[tt_closingdate]), USERELATIONSHIP('tt_infopointtickets'[tt_closingdate], 'tt_date(x-axis)'[tt_date]), FILTER(tt_infopointtickets, tt_infopointtickets[tt_closingdate] >= MIN(MonthTable[First-Month-Year]) && tt_infopointtickets[tt_closingdate] <= MAX(MonthTable[Last-Month-Year]) ) ) return exc
- 曾尝试创建3个独立日期表关联,但因需在图表中对比所有日期数据,该方案不可行。
问题原因
- 上下文冲突:
CALCULATE中同时使用USERELATIONSHIP激活关系和直接筛选工单表的FILTER,导致日期表的上下文筛选与手动筛选逻辑冲突,部分数据被错误排除。 - 五月数据为空:可能是
MonthTable在五月上下文的日期区间取值错误,或主日期表tt_date(x-axis)缺少五月的日期,导致关系匹配失败。 - 七月数据少算:
FILTER直接遍历工单表时,可能因MonthTable区间设置错误、日期格式不匹配,或与图表的日期轴上下文冲突,导致部分符合条件的工单未被统计。
修复方案
方案一:通过日期表筛选替代直接筛选工单表
去掉对工单表的直接FILTER,改为筛选主日期表,结合激活的关系间接统计工单,避免上下文冲突:
TabelleFilter_Fixed = CALCULATE( COUNT(tt_infopointtickets[tt_closingdate]), USERELATIONSHIP('tt_infopointtickets'[tt_closingdate], 'tt_date(x-axis)'[tt_date]), 'tt_date(x-axis)'[tt_date] >= MIN(MonthTable[First-Month-Year]), 'tt_date(x-axis)'[tt_date] <= MAX(MonthTable[Last-Month-Year]) )
方案二:检查数据模型与数据完整性
- 确认
tt_infopointtickets[tt_closingdate]与tt_date(x-axis)[tt_date]为非活动关系(USERELATIONSHIP仅对非活动关系生效),若为活动关系会导致逻辑混乱。 - 验证主日期表
tt_date(x-axis)是否包含五月的所有日期,缺失日期会导致关系匹配失败,统计为空。 - 检查
MonthTable的First-Month-Year和Last-Month-Year是否为日期类型,且在五月上下文能正确返回五月的起止日期,文本类型的日期会导致比较错误。
方案三:清除冗余上下文干扰
若图表存在其他筛选上下文影响结果,可添加ALL(tt_date(x-axis))清除日期表的默认筛选:
TabelleFilter_Fixed_All = CALCULATE( COUNT(tt_infopointtickets[tt_closingdate]), USERELATIONSHIP('tt_infopointtickets'[tt_closingdate], 'tt_date(x-axis)'[tt_date]), ALL(tt_date(x-axis)), 'tt_date(x-axis)'[tt_date] >= MIN(MonthTable[First-Month-Year]), 'tt_date(x-axis)'[tt_date] <= MAX(MonthTable[Last-Month-Year]) )
内容的提问来源于stack exchange,提问作者Yan Malinovskiy
相关产品推荐
相关产品推荐

