DAX 使用多个 IF 条件进行测量

问题描述 投票:0回答:1

我希望有人能够帮助我,因为我不确定如何让这个 DAX 指标发挥作用。我有以下数据:

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

我希望 DAX 度量计算特定日期的所有 A 项目,如果表中没有某个日期的 A 项目,则返回 0 :

示例:

3 for 15.2.23
0 for 16.2.23
1 for 17.2.23
0 for 20.2.23

我已经尝试了所有不同的组合,但仍然可以让它工作 - 我相信这与我的模型日期表有关,因为这包括一年中的所有日期,而不仅仅是我表中的日期。

DATA Table 
15.2.23   
16.2.23    
17.2.23  
18.2.23
19.2.23 
20.2.23  

ALL OOS AD Table 
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

我使用的 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
    )
)

powerbi dax
1个回答
0
投票

您尝试直接在 All_OOS_AD 表中进行过滤和计数,而没有充分确保考虑了 DATA 表中的每个日期。这意味着,如果日期没有任何“A”项,则它可能不会包含在结果集中,或者不会按预期显式返回 0 计数。

Total OOS A (NS) = 
CALCULATE (
    COUNTROWS(FILTER(All_OOS_AD, All_OOS_AD[Item Category] = "A")),
    ALL('DATA Table'), // Ensure calculation is done over all dates
    VALUES('DATA Table'[Date]) // This forces evaluation for each date in your date table
)
© www.soinside.com 2019 - 2024. All rights reserved.