【问题标题】:Get 1/0 if current column value exist in another table如果当前列值存在于另一个表中,则获取 1/0
【发布时间】:2020-06-04 14:43:57
【问题描述】:

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

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

接下来,我编写了这个表达式来从上一个表中获取包含 ID_COSTUMER 列表的列

VAR column_filter =
SELECTCOLUMNS ( table_filter; "ClientYes"; FACT_ACCOUNT[ID_COSTUMER] )

最后,我使用这个表达式在 FACT_ACCOUNT 表中创建了一个计算列,如果我在 column_filter 中找到了当前 ID_COSTUMER 的值,我将 1 设为 else 0。

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

问题是column_filter的结果不是列 我需要一个解决方案来从第一个过滤表的结果中返回 FACT_ACCOUNT[ID_COSTUMER] 列

我收到以下错误“较早/最早的第一个参数不是较早行上下文中的有效列引用”。

【问题讨论】:

  • 我认为问题在于 SELECTCOLUMNS -函数返回一个表,而不是一列。如果您将 EARLIER 部分更改为:EARLIER (column_filter[ClientYes]) 是否有效?
  • 嗨@Gigga,谢谢你的回复,我试过了,但我得到了以下错误“找不到表'column_filter'”

标签: powerbi ssas dax msbi


【解决方案1】:

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

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)

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

如果表之间没有realtion,可以使用函数:LOOKUPVALUE

【讨论】:

  • 我需要使用我在第一个 Dax 表达式中创建的过滤器,因为我的事实表包含每天客户贷款的进度。所以每天我用相同的 Costumer_id 和 Loan_id 加载事实表,这就是为什么我在事实表上创建过滤器以首先获得不同的贷款和客户组,然后,我通过获得超过的客户过滤它们一笔贷款。否则,我正在搜索的是如何从过滤表中返回 ID_COSTUMER 列,以便我可以在 LOOKUPVALUE 中使用它。
  • 您能否在问题中包含您拥有的表格、相关列和一些数据。如果仅从文字和代码难以理解。
  • 嗨@Aldert,其实我终于找到了解决这个问题的方法,在新的计算列中得到了我想要的结果。但是,现在的问题是当我尝试部署模型时出现以下错误,“无法部署元数据。原因:'Filter_Table' 的语法不正确”。我在 stackoverflow 中发布了一个新问题,并将其包含在我创建的表达式的结果中,您可以在以下 URL link 中找到更多信息。
  • 如果您能帮我解决这个问题,我将不胜感激。
【解决方案2】:
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 )

【讨论】:

    猜你喜欢
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    • 2022-12-19
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    相关资源
    最近更新 更多