Power BI 中 EXCEPT() 函数的使用指南
Power BI 中 EXCEPT() 函数的使用指南
EXCEPT() 是 Power BI DAX 语言中的一个表函数,用于比较两个表并返回第一个表中存在但第二个表中不存在的行。
基本语法
EXCEPT(表1, 表2)
功能说明
EXCEPT() 函数会:
1,比较两个表的结构(列数和列名必须完全相同),
2,返回表1中所有在表2中不存在的行(差集),
3,执行基于所有列的精确匹配比较。
使用场景
- 比较两个时间段的数据差异
// 找出本月有但上月没有的客户
新客户 = EXCEPT(VALUES(Sales[客户ID]),CALCULATETABLE(VALUES(Sales[客户ID]),DATEADD('Date'[Date], -1, MONTH))
)
- 识别丢失的项目
// 找出在库存表中但不在销售表中的产品
未销售产品 = EXCEPT(VALUES(Inventory[ProductID]),VALUES(Sales[ProductID])
)
- 比较计划与实际差异
// 找出计划中有但实际未执行的项目
未执行项目 = EXCEPT(VALUES(Plan[项目编号]),VALUES(Actual[项目编号])
)
注意事项
1,表结构必须一致:两个表必须具有相同的列数和完全相同的列名,
2,保留重复项:如果表1有重复行且这些行不在表2中,所有重复行都会被保留
3,性能考虑:对大型表使用EXCEPT()可能会影响性能
4,与SQL的区别:DAX中的EXCEPT()会自动去重,不像SQL的EXCEPT可以有ALL选项保留重复项
高级用法示例
结合其他表函数使用
// 找出本季度新增客户(相比去年同期)
新增客户 = EXCEPT(CALCULATETABLE(VALUES(Customers[ID]),DATESQTD('Date'[Date])),CALCULATETABLE(VALUES(Customers[ID]),DATEADD(DATESQTD('Date'[Date]), -1, YEAR))
)
与INTERSECT和UNION一起使用
// 获取客户变化情况分析
客户变化分析 =
VAR 老客户 = INTERSECT(上年客户表, 本年客户表)
VAR 流失客户 = EXCEPT(上年客户表, 本年客户表)
VAR 新增客户 = EXCEPT(本年客户表, 上年客户表)
RETURNUNION(ADDCOLUMNS(老客户, "状态", "留存"),ADDCOLUMNS(流失客户, "状态", "流失"),ADDCOLUMNS(新增客户, "状态", "新增"))
与类似函数的区别
EXCEPT():返回第一个表有而第二个表没有的行(差集)
INTERSECT():返回两个表共有的行(交集)
UNION():合并两个表的所有行(并集)
EXCEPT()函数是数据对比和分析的强大工具,特别适合用于识别数据变化、差异分析和数据质量检查等场景。