DAX度量编写求助:按日期统计A类条目并返回0值
正确DAX度量:按日期统计A类条目数量(无数据返回0)
需求说明
需编写DAX度量,实现按指定日期统计A类条目的数量,若该日期无A类条目则返回0。涉及两张表:
- 日期表(DATA Table):包含全年所有日期
- 业务表(ALL OOS AD Table):存储业务条目数据
数据示例
业务表数据
Date Category 15.2.23 A 15.2.23 A 15.2.23 A 16.2.23 B 16.2.23 C 17.2.23 A 17.2.23 B 20.2.23 C
日期表示例数据
DATA Table 15.2.23 16.2.23 17.2.23 18.2.23 19.2.23 20.2.23
预期结果
3 for 15.2.23 0 for 16.2.23 1 for 17.2.23 0 for 20.2.23
尝试过的DAX公式(均未得到正确结果)
Total OOS A (NS)* = CALCULATE (COUNT('All_OOS_AD'[Date]),('All_OOS_AD'[Item Category]= "A")) Total OOS A (NS)* = CALCULATE ( IF ( COUNTROWS ( FILTER ( All_OOS_AD, All_OOS_AD[Item Category] = "A" && NOT(ISBLANK(All_OOS_AD[Date])) && WEEKDAY(All_OOS_AD[Date]) <> 1 && WEEKDAY(All_OOS_AD[Date]) <> 7 ) ) > 0, COUNTROWS ( FILTER ( All_OOS_AD, All_OOS_AD[Item Category] = "A" && NOT(ISBLANK(All_OOS_AD[Date])) && WEEKDAY(All_OOS_AD[Date]) <> 1 && WEEKDAY(All_OOS_AD[Date]) <> 7 ) ), 0 ) ) Total OOS A (NS)* = CALCULATE ( IF ( COUNTROWS ( FILTER ( All_OOS_AD, All_OOS_AD[Item Category] = "A" && NOT(ISBLANK(All_OOS_AD[Date]))) ) > 0, COUNTROWS ( FILTER ( All_OOS_AD, All_OOS_AD[Item Category] = "A" && NOT(ISBLANK(All_OOS_AD[Date]))) ), 0 ) ) Total OOS A (NS)* = CALCULATE ( IF ( COUNTROWS ( FILTER ( All_OOS_AD, All_OOS_AD[Item Category] = "A" && NOT(ISBLANK(All_OOS_AD[Date]))) ) > 0, COUNTROWS ( FILTER ( All_OOS_AD, All_OOS_AD[Item Category] = "A" && NOT(ISBLANK(All_OOS_AD[Date]))) ), 0 ) ) Total OOS A (NS)* = CALCULATE ( COUNTAX( VALUES('YourTable'[Date]), IF ( COUNTROWS(FILTER('YourTable', 'YourTable'[Item Category] = "A" && 'YourTable'[Date] = VALUES('YourTable'[Date]))) > 0, 1, 0 ) ) ) Total OOS A (NS)* = CALCULATE ( COUNTAX( VALUES(All_OOS_AD[Date]), IF ( COUNTROWS(FILTER(All_OOS_AD, All_OOS_AD[Item Category] = "A" && All_OOS_AD[Date] = VALUES(All_OOS_AD[Date]))) > 0, 1, 0 ) ) ) Total OOS A (NS)* CALCULATE ( IF ( COUNTROWS ( FILTER ( ALL('YourTable'[Date]), CALCULATE ( COUNTROWS ( FILTER ( 'YourTable', 'YourTable'[Item Category] = "A" && 'YourTable'[Date] = 'YourTable'[Date] ) ) > 0 ) ) ) > 0, CALCULATE ( COUNTROWS ( FILTER ( 'YourTable', 'YourTable'[Item Category] = "A" ) ) ), 0 ) )
正确DAX解决方案
前提条件
确保日期表(DATA Table)的Date列与业务表(ALL OOS AD Table)的Date列建立了单向筛选关系(日期表筛选业务表)。
度量写法1(简洁版)
Total OOS A = CALCULATE( COUNT('All_OOS_AD'[Category]), 'All_OOS_AD'[Category] = "A" ) + 0
- 原理:
CALCULATE在无匹配数据时返回空白,通过+0将空白转换为0,同时利用日期表的上下文自动筛选对应日期的业务数据。
度量写法2(显式日期上下文)
Total OOS A = SUMX( VALUES('DATA Table'[Date]), VAR DateAcount = CALCULATE(COUNT('All_OOS_AD'[Category]), 'All_OOS_AD'[Category] = "A") RETURN IF(ISBLANK(DateAcount), 0, DateAcount) )
- 原理:遍历日期表的所有日期,针对每个日期计算A类条目数量,若结果为空白则返回0,最后求和得到最终结果。
内容的提问来源于stack exchange,提问作者Cristina
相关产品推荐
相关产品推荐

