如果当前列值存在于另一个 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 )
首先,我编写了以下 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 )