powerBI / DAX — 根据另一表中的 IF 条件计算一个表中的 SUM 值

问题描述 投票:0回答:1

我有两个来自不同来源的表,具有不同的刷新频率。

• 表_1用于将各种订单进行分组(每月更新,有K行数据)。

• 表_2是员工汇报的工作情况(每日更新,M行数据)。

表之间的简单连接将使这项任务变得容易。

但是,在 Table_1 中,订单分为两列:Quote# 和 Order#。 并且,在 Table_2 中,所有内容都分组为一列。

我正在尝试创建一个基于 IF 条件的 SUMIF,其功能与此类似:

Contact_Hours = 
/* if the Quote didn't turn into an Order */
if 'Table_1'[Order#] = ""
then sumx(filter(Table_2; [WorkOrder] = 'Table_1'[Quote#]; [ContactHours]))
/* if Quote became an Order */
else if sumx(filter(Table_2; [WorkOrder] = 'Table_1'[Order#]; [ContactHours]))
/* if there's "crazy data" */
else "Nothing found"

这在 PowerBI / DAX 中可能吗?

我尝试将 if-then / else if-then / else 放入 CALCULATE 中,但没有成功。

还尝试使用简单的 IF:

IF(
    ISBLANK(Table_1[Order#]);
    CALCULATE(SUM(Table_2[ContactHours]); Table_2[Project] = Table_1[Quote#]);
    CALCULATE(SUM(Table_2[ContactHours]); Table_2[Project] = Table_1[Order#])
)

但是它抛出了一个错误:

“表达式包含来自多个表的列,但仅包含列 来自单个表的数据可以用在 True/False 表达式中,即 用作表过滤表达式。”

=== 一个粗略但可行的解决方案===

解决此问题的一种方法是在 Table_1 中使用 2 个辅助列:

• 一个辅助列,用于计算与 Table_2[Project] 对应的 Quote# 列中任何内容的 ContactHours:

ContactHours_Quote = 
    CALCULATE(
            SUM('Table_2'[ContactHours] );
            FILTER( 'Table_2';  'Table_2'[Project] = 'Table_1'[Quote#])
    )

• 然后在第二个帮助列中对订单# 执行相同操作:

ContactHours_Order = 
    CALCULATE(
            SUM('Table_2'[ContactHours] );
            FILTER( 'Table_2';  'Table_2'[Project] = 'Table_1'[Order#])
    )

• 最后,将辅助列的结果相加:

[ContHrs_Qte]+[ContHrs_Ord]

  • 额外的努力是在 PowerQuery 中添加一个步骤,将 Quote# 和 Order# 列中的任何“奇怪”或空条目替换为“--”之类的内容。
powerbi dax
1个回答
0
投票

你的两个表的结构是什么?由于您声明 “但是,在 Table_1 中,订单分为两列:Quote# 和 Order#。并且,在 Table_2 中,所有内容都分组到单个列中。”,因此可以创建一个新列(在 Power 中)查询或更上游)也将 Quote# 和 Order# 合并到一列中。这样,您就可以创建一个关系,并且您的计算会容易得多。

一些简单的数据样本屏幕截图会很有用。

© www.soinside.com 2019 - 2024. All rights reserved.