之前我们在进行建模时,每张维度表与数据表之间,都是只建立了一条关系,这样虽然已经能应对绝大部分分析场景了,但有时还是会出现在同一张数据表上有多个字段需要与同一维度字段关联的情况。
以下表为例:
在销售订单中有商品发货日期和到货日期两列,根据统计需求的不同,可能要使用到不同的日期,这种情况下当然不能做两个日期维度表了。那么将日期字段直接与这两个日期创建关系的话,会发生什么呢?
如图所示,创建了两个连接后,我们会发现,有一条连线是虚线,这代表该关系未生效,当前生效的关系是日期-与到货日期。如果按日期表的月份对订单号计数(见左图)可得1月到货订单6个、2月4个。若我们在sale表中新建一个辅助列“发货月份”,以该字段透视可得(见右图),一月发货订单为8个,2月2个,如何在现有模型的基础上实现右图中的统计呢?
新建度量值
订单量by发货 = CALCULATE(COUNTROWS('sale'),USERELATIONSHIP('日期'[日期],sale[发货日期]))
该度量值利用USERELATIONSHIP函数,将原本处于未生效的关系 日期-发货日期激活,实现了利用维度表按发货日期的筛选。
USERELATIONSHIP(列1,列2) 函数的使用方法很简单,只需指定关系两端的字段即可,但需要注意的是,该关系不论当前状态如何,但必须存在,若没有建立关系,则函数无法使用。
在没有创建关系时如果临时想使用某个字段进对另外的表进行筛选,也可以使用TREATAS函数。例如我们复制一个sale表名为sale2,不建立任何关系。并创建度量值:
TreatAs发货日期 = CALCULATE(COUNTROWS('sale2'),TREATAS(VALUES('日期'[日期]),'sale2'[发货日期]))
可以看到,与useralationship取得了同样的结果。