如果当前列值存在于另一个 table 中,则获取 1/0

Get 1/0 if current column value exist in another table

首先,我编写了以下 Dax 表达式来获得一个 table,其中包含获得不止一笔贷款的客户列表。

VAR table_filter =
FILTER (
    SUMMARIZE (
        SUMMARIZE (
            FACT_ACCOUNT;
            FACT_ACCOUNT[ID_LOAN_INFORMATION];
            FACT_ACCOUNT[ID_COSTUMER]
        );
        FACT_ACCOUNT[ID_COSTUMER];
        "abc"; COUNTROWS (
            SUMMARIZE (
                FACT_ACCOUNT;
                FACT_ACCOUNT[ID_LOAN_INFORMATION];
                FACT_ACCOUNT[ID_COSTUMER]
            )
        )
    );
    [abc] > 1
)

下图表示前面Dax表达式的结果table_filter.

The result of table_filter variable

接下来,我写了这个表达式来从前面的 table

中获取包含 ID_COSTUMER 列表的列
VAR column_filter =
SELECTCOLUMNS ( table_filter; "ClientYes"; FACT_ACCOUNT[ID_COSTUMER] )

最后,我用这个表达式在FACT_ACCOUNTtable中创建了一个计算列,如果我在column_filter中找到当前ID_COSTUMER的值我放 1 其他 0.

RETURN
IF (
    CALCULATE (
        COUNTROWS ( FACT_ACCOUNT );
        FILTER (
            FACT_ACCOUNT;
            FACT_ACCOUNT[ID_COSTUMER] = EARLIER ( column_filter )
        )
    ) > 0;
    1;
    0
)

问题是column_filter的结果不是一列 我需要从第一个过滤 table

的结果中找到 return FACT_ACCOUNT[ID_COSTUMER] 列的解决方案

我收到以下错误 "the first argument of earlier/earliest is not a valid column reference in the earlier row context"。

据我了解,您创建额外的 table 的唯一目的是确定客户是否有超过 1 个条目。如果是这种情况,更简单的解决方案是直接在您的 FACT-Account table 上添加一列:

IsDouble = 
var custID = FACT_ACCOUNT[ID_COSTUMER]
var rowCount = CALCULATE(COUNTROWS(FACT_ACCOUNT); 
    FILTER(FACT_ACCOUNT; FACT_ACCOUNT[ID_COSTUMER] = custID))
return IF (rowCount > 1; 1; 0)

如果您仍然需要基于两个 table 执行此操作,则需要确保 table 之间存在关系并且相同的解决方案成立。

如果您在 table 之间没有关系,您可以使用函数:LOOKUPVALUE

IsRenewal :=
VAR Filter_Table =
    SUMMARIZE (
        FILTER (
            SUMMARIZE (
                SUMMARIZE (
                    FACT_ACCOUNT;
                    FACT_ACCOUNT[ID_LOAN_INFORMATION];
                    FACT_ACCOUNT[ID_COSTUMER]
                );
                FACT_ACCOUNT[ID_COSTUMER];
                "abc"; COUNTROWS (
                    SUMMARIZE (
                        FACT_ACCOUNT;
                        FACT_ACCOUNT[ID_LOAN_INFORMATION];
                        FACT_ACCOUNT[ID_COSTUMER]
                    )
                )
            );
            [abc] > 1
        );
        FACT_ACCOUNT[ID_COSTUMER]
    )
VAR Latest =
    FILTER (
        Filter_Table;
        FACT_ACCOUNT[ID_COSTUMER] = EARLIER ( FACT_ACCOUNT[ID_COSTUMER] )
    )
RETURN
    IF ( ISBLANK ( Latest ); 0; 1 )