首页 > 解决方案 > 如何在DAX中的SUMX函数中按两个相关表进行过滤

问题描述

我有两个表 A 和 B,如下所示。A 中的 AccountID 与 B 中的 AccountID 有关系。

A

AccountID   CmpName AccFlag SysStartTime  sysEndTime
 A1          Test1   1       1/1/2020      12/31/9999
 A2          Test2   0       1/2/2020      12/31/9999
 A3          Test3   1       1/2/2020      12/31/9999


B

ContactId   AccountID   ConFlag SysStartTime   SysEndTime
C1          A1          1       1/1/2020        12/31/9999
C2          A1          1       1/1/2020        12/31/9999
C3          A1          0       1/1/2020        12/31/9999
C4          A2          1       1/2/2020        12/31/9999

我想获取 A 中在 B 中有 3 个或更多相关记录的记录计数。我还想从两个表中获取由 Accflag、conflag、sysStartTime 和 sysEndTime 过滤的计数。我有以下 DAX,它为我提供了 A 中的记录计数,这些记录在 B 中具有 3 个或更多相关记录,由 A 的 Accflag、sysStartTime 和 sysEndTime 过滤。我想添加带有 ConFlag、sysStartTime 和 sysEndTime 的过滤,但是我不确定如何将其添加到以下 DAX。请帮忙。

 SUMX ( A, 
 IF ( COUNTROWS ( RELATEDTABLE ( B ) ) >= 3 && 
 A[Accflag]=1 && 
 A[SysStartTime]>=TODAY() &&  
 A[SysEndTime]>= VALUE("12/31/9999"),1 )
 )

标签: powerbidax

解决方案


我认为最简单的方法是创建一个计算列,指示每一行是否通过检查。像下面这样的东西可能会起作用:

Ind = 
    VAR AccountID=A[AccountID]
    VAR Count1 = CALCULATE(COUNTROWS(B),FILTER(B,B[AccountID]=AccountID))
RETURN IF(Count1>=3 && A[Accflag]=1 && A[SysStartTime]>=TODAY() && A[SysEndTime]>= VALUE("12/31/9999"),1,0)

Ind 将为每一行给出 0 或 1,然后您可以简单地总结该字段以获得满足每个条件的总行数。如果您需要在计算中添加更多条件,这将很有用。希望这可以帮助。


推荐阅读