DAX语法根据另一张表的条件计算总和

时间:2019-03-24 17:39:21

标签: powerbi dax

我有两个表TMain和TZone,它们之间的关系是ST1 vs GeoKey,以及ST2 vs Geokey

enter image description here

我想编写DAX语法来获取结果,如下面的SQL查询所示

SELECT    
SUM(    case when rou_1st.GeoCode = 'N'
         then ISNull(tm.Data1, 0) 
         else 0     end     +   case when rou_2nd.GeoCode = 'N'
         then ISNull(tm.Data2, 0) 
         else 0     end ) As N,

SUM(    case when rou_1st.GeoCode = 'I'
         then ISNull(tm.Data1, 0) 
         else 0     end     +   case when rou_2nd.GeoCode = 'I'
         then ISNull(tm.Data2, 0) 
         else 0     end ) As I    
FROM TMain tm left join TZone rou_1st  ON tm.ST1 = rou_1st.GeoKey left join TZone rou_2nd ON tm.ST2 = rou_2nd.GeoKey

我对DAX语法非常陌生,因此刚开始学习曲线,这就是为什么我需要该小组的一些帮助的原因。

此致

Veasna

1 个答案:

答案 0 :(得分:0)

好吧,由于查询已离开联接,因此在Power Bi中,您可以创建将作为联接在Power Bi中工作的关系 将两个表都添加到Power Bi中 表1-域名 表2-TZone 创建一个新表(为此进行建模,请单击新表并写入dax)Tzone 2nd = TZone:-这将创建TZone的副本

现在在关系部分中,在ST1列和Geokey的Tmain和Tzone之间创建关系,并在ST2和Geokey列的tmain和tzone 2nd之间创建另一个关系

现在使用dax在Tmain中创建两列

地理编码=相关(Tzone [GoeCode]) Geocode secound = RELATED(Tzone1 [GoeCode])

这会将GoeCode的相关值带到Tmain,然后使用以下dax查询创建新列

第一手-

N = if(Tmain [Geocode] =“ N”,if(ISBLANK(Tmain [Data1]),0,Tmain [Data1]))+ if(Tmain [Geocode secound] =“ N”,if(ISBLANK (Tmain [Data2]),0,Tmain [Data2]))

对于秒数- I = if(Tmain [Geocode] =“ I”,if(ISBLANK(Tmain [Data1]),0,Tmain [Data1]))+ if(Tmain [Geocode secound] =“ I”,if(ISBLANK(Tmain [ Data2]),0,Tmain [Data2]))

在新的度量中添加由这些列生成的值