计算列中的DAX

时间:2018-02-08 11:38:21

标签: dax ssas-tabular

我有两张表格如下。

Table1
CaseId
66787

Table2
PrimaryKey  CaseId  SeqNo   Status   Primary    Code    CodeCareNo
85248       66787   6       Active     N         876    8775568
70728       66787   1       Inactive   N         876    3661794
79008       66787   5       Active     Y         876    3766066
86868       66787   7       Active     Y         876    3287735

表1与Table2和CaseId中的相关列有一对多的关系。 我需要在我的模型项目中的Table1中创建一个计算列。计算列应为表1中的每个CaseId显示类似(代码)CodeCareNo(例如:(876)3766066)的文本,其中Table2的Code和CodeCareNo列的值具有Primary =“Y”,Status =“Active”with Seq否为CaseId的主要活动代码编号中的最小值。此外,如果Code或CodeCareNo为null,则计算列应显示空白值。我可以通过以下查询获得所需的结果,但我感觉有点凌乱。有人可以帮我简化一下吗?

=IF("(" & LOOKUPVALUE(Table2[Code], Table2[CaseId], Table1[CaseId], 
Table2[Primary], "Y", Table2[Status], "Active", Table2[SeqNo],     
MINX(FILTER(Table2, ( Table2[Primary] =  "Y" && Table2[Status] = "Active" && 
Table2[CaseId] = Table1[CaseId])), Table2[SeqNo])) & ") " & 
LOOKUPVALUE(Table2[CodeCareNo], Table2[CaseId], Table1[CaseId], 
Table2[Primary], "Y", Table2[Status], "Active", Table2[SeqNo], 
MINX(FILTER(Table2, ( Table2[Primary] =  "Y" && Table2[Status] = "Active" && 
Table2[CaseId] = Table1[CaseId])), Table2[SeqNo])) = "() ", BLANK(), "(" & 
LOOKUPVALUE(Table2[Code], Table2[CaseId], Table1[CaseId], Table2[Primary], 
"Y", Table2[Status], "Active", Table2[SeqNo], MINX(FILTER(Table2, ( 
Table2[Primary] =  "Y" && Table2[Status] = "Active" && Table2[CaseId] = 
Table1[CaseId])), Table2[SeqNo])) & ") " & LOOKUPVALUE(Table2[CodeCareNo], 
Table2[CaseId], Table1[CaseId], Table2[Primary], "Y", Table2[Status], 
"Active", Table2[SeqNo], MINX(FILTER(Table2, ( Table2[Primary] =  "Y" && 
Table2[Status] = "Active" && Table2[CaseId] = Table1[CaseId])), 
Table2[SeqNo])) )

1 个答案:

答案 0 :(得分:2)

那太乱了。试试这个配方:

CodeCase = 
    VAR SeqNo = CALCULATE(MIN(Table2[SeqNo]), Table2[Primary] = "Y", Table2[Status] = "Active")
    VAR Code = LOOKUPVALUE(Table2[Code], Table2[SeqNo], SeqNo)
    VAR CodeCareNo = LOOKUPVALUE(Table2[CodeCareNo], Table2[SeqNo], SeqNo)
    RETURN IF(ISBLANK(Code) || ISBLANK(CodeCareNo), BLANK(), "(" & Code & ") " & CodeCareNo)

(我喜欢使用变量来提高计算效率和可读性。)