Forum Discussion
CALCULATE function not allowed use in a TRUE/FALSE expression.
Hi,
I would like to filter data with criteria : [Tỉ lệ PU đúng giờ]<"99%"
I try to write a sample function as below in Power Pivot.
Sample function:=CALCULATE(COUNTA(Data[Bưu cục gửi hàng]),Data[Tổng phải lấy]="Lấy",[Tỉ lệ PU đúng giờ]<"99%",Data[LATE]="Trễ",OR(OR(OR(Data[Mã khách hàng]="084LC00010",Data[Mã khách hàng]="084LC00016"),OR(Data[Mã khách hàng]="084LC00005",Data[Mã khách hàng]="084LC00053")),OR(Data[Mã khách hàng]="084LC00205",Data[Mã khách hàng]="084LC00076")),OR(OR(Data[Trạng thái đơn hàng]="abnormal parcel",Data[Trạng thái đơn hàng]="DISPATCH"),OR(Data[Trạng thái đơn hàng]="PICKUP FAILED", Data[Trạng thái đơn hàng]="PUSAT_DISPATCH")))
But it not working.
Some better ideas, please.
Hope for your help.
Thank you.
I combined initial measures into one, but you may return back
Intermediate count:=VAR filter1 = CALCULATETABLE ( Data, Data[Tổng phải lấy] = "Lấy", OR ( OR ( OR ( Data[Mã khách hàng] = "084LC00010", Data[Mã khách hàng] = "084LC00016" ), OR ( Data[Mã khách hàng] = "084LC00005", Data[Mã khách hàng] = "084LC00053" ) ), OR ( Data[Mã khách hàng] = "084LC00205", Data[Mã khách hàng] = "084LC00076" ) ) ) VAR filter2 = CALCULATETABLE ( Data, FILTER ( filter1, Data[PU đúng giờ] = "PU đúng giờ" ) ) VAR filter3 = CALCULATETABLE ( Data, FILTER ( filter1, Data[LATE] = "Trễ" ) ) VAR filter4 = CALCULATETABLE ( Data, FILTER ( filter3, OR ( OR ( Data[Trạng thái đơn hàng] = "abnormal parcel", Data[Trạng thái đơn hàng] = "DISPATCH" ), OR ( Data[Trạng thái đơn hàng] = "PICKUP FAILED", Data[Trạng thái đơn hàng] = "PUSAT_DISPATCH" ) ) ) ) VAR counting = IF ( COUNTROWS ( filter2 ) / COUNTROWS ( filter1 ) < 0.99, COUNTROWS ( filter4 ), BLANK () ) RETURN counting
Based on it final measure
Final count:=IF ( HASONEVALUE ( Data[Bưu cục gửi hàng] ), [Intermediate count], SUMX ( Machinhanh, [Intermediate count] ) )
Result is
12 Replies
- SergeiBaklanDiamond Contributor
Filter in CALCULATE() iterates table and we shall work with columns (fields) here, not with measures.
Workaround depends on desired calculation logic and what is behind this measure.
Sample:=CALCULATE ( COUNTA ( Data[Bưu cục gửi hàng] ), Data[Tổng phải lấy] = "Lấy", //[Tỉ lệ PU đúng giờ] < "99%", Data[LATE] = "Trễ", OR ( OR ( OR ( Data[Mã khách hàng] = "084LC00010", Data[Mã khách hàng] = "084LC00016" ), OR ( Data[Mã khách hàng] = "084LC00005", Data[Mã khách hàng] = "084LC00053" ) ), OR ( Data[Mã khách hàng] = "084LC00205", Data[Mã khách hàng] = "084LC00076" ) ), OR ( OR ( Data[Trạng thái đơn hàng] = "abnormal parcel", Data[Trạng thái đơn hàng] = "DISPATCH" ), OR ( Data[Trạng thái đơn hàng] = "PICKUP FAILED", Data[Trạng thái đơn hàng] = "PUSAT_DISPATCH" ) ) )
- littlevillageIron Contributor
Thank you for response
In my original data, i used your code in Power Pivot to create a pivot table:
the result shows 85 units, but the expected result is 82 units.
Hope for your help.
- SergeiBaklanDiamond Contributor
Sorry, but I don't know what shall correct logic. However, we may check existing logic directly. Within measure we have 4 conditions to calculate
Sample:=CALCULATE ( COUNTA ( Data[Bưu cục gửi hàng] ), // CONDITION 1 Data[Tổng phải lấy] = "Lấy", //[Tỉ lệ PU đúng giờ] < "99%", // CONDITION 2 Data[LATE] = "Trễ", // CONDITION 3 OR ( OR ( OR ( Data[Mã khách hàng] = "084LC00010", Data[Mã khách hàng] = "084LC00016" ), OR ( Data[Mã khách hàng] = "084LC00005", Data[Mã khách hàng] = "084LC00053" ) ), OR ( Data[Mã khách hàng] = "084LC00205", Data[Mã khách hàng] = "084LC00076" ) ), // CONDITION 4 OR ( OR ( Data[Trạng thái đơn hàng] = "abnormal parcel", Data[Trạng thái đơn hàng] = "DISPATCH" ), OR ( Data[Trạng thái đơn hàng] = "PICKUP FAILED", Data[Trạng thái đơn hàng] = "PUSAT_DISPATCH" ) ) )
which are combined with AND. We may create calculated columns for each of conditions and another column which ANDs them, after that filter it on TRUE
Filter returns 85 records:
Same result. The only, measure works much faster.