DAX公式 - 根据特定条件从表中提取列值

时间:2015-07-20 18:43:31

标签: 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吗?

谢谢, Satya T

1 个答案:

答案 0 :(得分:2)

我喜欢在开发时慢慢建立措施。如果需要,您可以将这些度量基本上组合到一个度量中,但出于指导目的,我更倾向于显示实现所需DAX目标的中间步骤。

创建一个度量以返回单个key_member。我认为这是文字所以我用

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

如果是数字,您只需使用MAX(tb2[key_member])即可。使用哪种汇总并不重要,因为我们每key_member只会返回一个project_id

创建一个过滤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]之前的所有PM。

如果没有日期表,要实现相同的过滤器,您可以执行以下操作:

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

根据您的来源中的行数,第二行可能无法很好地执行,但我猜测您更多的是数百个项目的订单,而不是数百万。