DAX 实战套路(一)——跨表多条件查找

这些案例都是本人在实践过程中碰到的一些典型案例,因个人水平有限,提供的解法仅是个人见解,欢迎各位老师提供其他解题思路。
filefile
上面两张表分别为 报案表 与 结案表,分别记录着报案编号、时间、类型,以及结案时间,和结案类型,现在要计算的
指标是 当期报结 = (当月的有效报案并且在当月一次结案的案件数量)/(当月的有效报案案件数量)。
可能很多童鞋会觉得很简单,因为报案表是一表,结案表是多表,直接建立关系,创建模型,但是怎么判断同一个案件
的报案时间和结案时间是在同一个月呢?很多同学可能会在报案表中增加计算列,引用结案表对应的一次结案时间,此时因为结案表是多表,无法用related函数,只能使用lookupvalue函数。但是我们知道,如果不是增加观察维度,我们最好不要使用计算列来改变原始数据,但是受这种思路启发,我们可以利用addcolumns创建虚拟列来引用结案表的结案时间。

整个度量的思路如下: 第一步:在报案表中筛选有效案件,代码如下

CALCULATETABLE('报案表','报案表'[案件性质]="有效")   

第二步,在上述区域中用lookupvalue结案表中对应的一次结案时间引用过来,然后与报案时间相比较,判断是否在同月,筛选掉不在同一个月份的案件,代码如下

filter( 
                addcolumns(temp,
                            "结案时间",
                            LOOKUPVALUE('结案表'[结案时间],
                                        '结案表'[案件编号],'报案表'[案件编号],
                                        '结案表'[结案性质],"一次")
                                    ),
                year('报案表'[报案时间])=year([结案时间])&&
                MONTH('报案表'[报案时间])=month([结案时间])         //报案与结案时间在同一个月的案件
                    )

Daxstudio代码测试如下
file
说明完全达到我们想要的结果,最后分别计数相除就是我们想要计算的度量值,此种方法不需要创建关系,即使报案表本身是多表一样适用。最终结果如下,
file

佐罗老师DAX实战课程链接:https://study.163.com/course/introduction/1006191059.htm?share=1&shareId=1144761414
限时送价值198 DAX基础课程(仅限本链接购买)和价值288会员模板,提供内部答疑群,购买后联系QQ:40733580