我想知道为什么这个公式会获取我想要的结果。
我有一张桌子:
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条件失败了。
答案 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代码的位置。?是度量还是计算列??度量将适用于过滤器上下文,其中计算了行上下文列。