DAX - 过滤功能与早期和 "Non-Earlier" 条件一起

DAX - Filter function with Earlier and "Non-Earlier" condition together

我想知道为什么这个公式确实获取了我想要的结果。

我有一个 table 有:

customer_id | date_booking | booking_status | salon_id |

我想检查某个客户的某个预订是否是第一个,在哪里 如果 booking_status = 8 或 14

则视为预订成功

我的计算列是:

If(Calculate(Min(date_booking);filter(table; booking_status = 8 ||
booking_status = 14);filter(table;customer_id = earlier(customer_id);
filter(table;salon_id = earlier(salon_id)))=date_booking;1;0)

不幸的是booking_status条件在这里失败了。

我认为您需要像这样创建一个计算列:

IF (
    [date_booking]
        = CALCULATE (
            MIN ( [date_booking] );
            FILTER (
                ALL ( 'Table' );
                [customer_id] = EARLIER ( 'Table'[customer_id] )
                && [salon_id] = EARLIER ( 'Table'[salon_id] )
                    && ( [booking_status] = 8
                    || [booking_status] = 14 )
            )
        );
    1;
    0
)

如果预订是第一个且状态成功,它将显示 1,否则显示 0

可能是您添加的第二个过滤器擦除前一个过滤器,因为 CALCULATE 可以更改过滤器上下文。由于您在一个 table 上工作并且仅更改一个 table 的过滤器,因此请尝试仅使用一个过滤器。在下面查看您修改后的代码..!

IF(
    CALCULATE(MIN(date_booking);
        FILTER(table; 
            booking_status = 8 || booking_status = 14 AND 
            customer_id = EARLIER(customer_id) AND
            salon_id = earlier(salon_id)))=date_booking;
    1;0)

我不知道代码是否有效,因为我没有测试代码。每次编写 dax 代码时,请始终注意公式在什么上下文中工作,在哪里编写 dax 代码..?它是度量还是计算列..? Measure 将在过滤上下文中起作用,其中计算列在行上下文中。