You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 02:08:14