如何用DAX创建度量值统计2018年总销量超10的销售人员数量
用DAX实现2018年总销量超10的销售人员计数
需求回顾
你有如下销售数据:
| SalePersonId | Month | Qty |
|---|---|---|
| 1 | Jan-18 | 5 |
| 2 | Jan-18 | 7 |
| 1 | Feb-18 | 1 |
| 2 | Feb-18 | 8 |
| 3 | Feb-18 | 12 |
需要创建DAX度量值,统计2018年总销售数量超过10的销售人员数量,预期结果为2(销售人员1和3)。你已经用T-SQL实现了该功能:
SELECT COUNT(Distinct EmpId) FROM T1 GROUP BY UserId HAVING SUM(Qty) > 10
DAX解决方案
这里提供两种实用的DAX实现方式,都能精准满足你的需求:
方式一:直观分步式写法
Count_SalesPersons_Over10 = -- 第一步:计算每个销售人员的总销量 VAR SalesPersonTotal = SUMMARIZE ( 'YourSalesTable', -- 替换成你的实际表名 'YourSalesTable'[SalePersonId], "TotalQty", SUM('YourSalesTable'[Qty]) ) -- 第二步:筛选出2018年总销量超10的销售人员 VAR FilteredSalesPersons = FILTER ( SalesPersonTotal, [TotalQty] > 10 && YEAR('YourSalesTable'[Month]) = 2018 ) -- 第三步:统计符合条件的人员数量 RETURN COUNTROWS(FilteredSalesPersons)
方式二:紧凑嵌套式写法
Count_SalesPersons_Over10 = CALCULATE ( COUNTROWS ( VALUES('YourSalesTable'[SalePersonId]) ), FILTER ( ALL('YourSalesTable'[SalePersonId]), -- 计算当前销售人员2018年的总销量并判断是否超10 CALCULATE ( SUM('YourSalesTable'[Qty]), YEAR('YourSalesTable'[Month])=2018 ) > 10 ) )
逻辑说明
两种方式的核心思路和你的T-SQL逻辑一致:
- 按销售人员分组计算总销量
- 筛选出2018年总销量大于10的分组
- 统计这些分组的数量
- 方式一用变量拆分步骤,逻辑更易懂,适合新手调试;
- 方式二用嵌套
CALCULATE压缩代码,适合熟悉DAX上下文的用户。 - 记得把代码里的
YourSalesTable替换成你实际使用的表名哦。
内容的提问来源于stack exchange,提问作者NewPowerBIUser




