DAX - 早期过滤功能和非早期过滤功能"条件在一起

时间:2017-03-10 17:52:23

标签: function filter powerbi powerpivot dax

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

我有一张桌子:

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条件失败了。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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代码的位置。?是度量还是计算列??度量将适用于过滤器上下文,其中计算了行上下文列。