如何用DAX统计覆盖美国WA、OR、CA三州的唯一产品数量
DAX计算同时覆盖全部指定区域的唯一产品数量实现方案
原代码问题说明
你编写的代码存在两处问题:
- 语法错误:
DISTINCTCOUNT函数仅接受1个参数,你将FILTER逻辑写在了DISTINCTCOUNT的参数括号内,属于语法不合法 - 逻辑错误:原逻辑仅筛选出在售州属于{WA,CA,OR}集合的产品,只要产品在任意一个目标州有售就会被计数,没有要求覆盖全部三个目标州,因此输出结果不符合预期
正确实现代码
同时覆盖三州的唯一产品数 = // 定义目标州集合,后续修改目标区域仅需调整此处即可 VAR TargetStates = {"WA", "CA", "OR"} // 自动计算目标州总数,避免硬编码数值 VAR TargetStateTotal = COUNTROWS(TargetStates) RETURN CALCULATE( DISTINCTCOUNT('table1'[product]), FILTER( // 遍历所有唯一产品 VALUES('table1'[product]), // 筛选出在目标州范围内的在售州数量等于目标州总数的产品(即覆盖全部目标州) CALCULATE(DISTINCTCOUNT('table1'[state]), 'table1'[state] IN TargetStates) = TargetStateTotal ) )
逻辑说明
- 先通过变量定义目标州集合和总数,后续调整统计区域仅需修改
TargetStates变量即可,扩展性更强 - 内层
FILTER逐行遍历所有唯一产品,对每个产品单独统计它在目标州范围内的在售州数量 - 仅保留在售州数量和目标州总数相等的产品,也就是同时在所有目标州都有售的产品,最后对这些产品做去重计数
动态适配优化(可选)
如果需要支持通过切片器动态选择统计的州,自动计算覆盖所有选中州的产品数量,可以将前两个变量修改为如下逻辑,无需硬编码目标州:
VAR TargetStates = VALUES('table1'[state]) VAR TargetStateTotal = COUNTROWS(TargetStates)
内容的提问来源于stack exchange,提问作者QT49
相关产品推荐
相关产品推荐

