2015-07-20 68 views
2

我試圖提取基於特定條件從表中的列中提取從表中的列值:DAX公式 - 基於某些條件

下面是這種情況:

我有一個表tb1(project_id, month_end_date, monthly_proj_cost)和表tb2與`(project_id,key_member_type,key_member,start_dt_active,end_dt_active)。

我想提取key_member where key_member_type="PM"並且從tb1 (month_end_date)開始激活。

這可能使用DAX嗎?

感謝, 薩蒂亞牛逼

+0

是關鍵成員的文本字段?你只是想要最大值? –

回答

2

我喜歡慢慢地建立措施,在制定的時候。如果您願意,您可以將這些措施基本結合爲一項措施,但出於指導性目的,我更願意展示實現DAX目標的中間步驟。

創建一個返回單個key_member的度量。我想這是文本,所以我用

AnyMember := 
LASTNONBLANK (tb2[key_member], 1) 

如果它的數字,你可以使用MAX(tb2[key_member])代替。使用什麼樣的聚合無關緊要,因爲我們只會按project_id返回一個key_member

創建一個度量來過濾LastMember,所以我們只返回「PM」key_member_types。

AnyPM := 
CALCULATE ([AnyMember], tb2[key_member_type] = "PM") 

如果您有連續日期表,請在日期表和tb2 [end_dt_active]之間建立關係。然後創建這個措施:

LastActivePM := 
CALCULATE (
    [AnyPM], 
    DATESBETWEEN (
     BasicCalendarEnglish[DateKey], 
     MIN (tb1[month_end_date]), 
     DATE (4000, 1, 1) 
    ) 
) 

這只是過濾掉其end_dt_active而來的tb1[month_end_date]之前的任何預防性維護。

沒有日期表,來達到同樣的過濾器,你可以這樣做:

LastActivePM := 
CALCULATE (
    [AnyPM], 
    FILTER (
     VALUES (tb2[end_dt_active]), 
     tb2[end_dt_active] >= MAX (tb1[month_end_date]) 
    ) 
) 

取決於多少行源,第二個有可能無法表現非常好,但我猜你更多的是數百個項目的訂單,而不是數百萬美元。