表姐(做報(bào)表的小姐姐)做項(xiàng)目的時(shí)候經(jīng)常遇到這種情況男韧,同一個(gè)銷售訂單數(shù)據(jù),不同部門要求以不同的口徑統(tǒng)計(jì)媚狰,比如銷售部門期望用下單日期淫僻、倉管部用發(fā)貨日期诱篷,合管部用合同激活日期作為統(tǒng)計(jì)日期。但是無論是SSAS中的表格模型還是Power BI里的模型雳灵,兩個(gè)表之間只能允許唯一一個(gè)活動關(guān)系棕所。微軟官方描述如下圖:
微軟官方的建議是導(dǎo)入多個(gè)查找列的表副本,但是問題來了悯辙,這樣不僅會造成數(shù)據(jù)的冗余和內(nèi)存的浪費(fèi)琳省,而且增加工作量好不好
我們來看看如何使用DAX解決這個(gè)問題。
有什么數(shù)據(jù)
如下圖躲撰,示例中有一個(gè)日期維度表(DimDate)和一個(gè)銷售訂單表(FactInternetSales)针贬,其中銷售訂單表中有三個(gè)日期列,分別代表訂單日期拢蛋、截止日期桦他、發(fā)貨日期。
需求是什么
期望只導(dǎo)入一個(gè)日期維度表谆棱,但是能夠從三個(gè)不同業(yè)務(wù)日期字段統(tǒng)計(jì)銷售金額或數(shù)量
動動小手
1快压、創(chuàng)建關(guān)系
分別將銷售訂單表中的三個(gè)日期字段拖拽入日期維度表中與DateKey關(guān)聯(lián),如下圖:
2垃瞧、創(chuàng)建度量值
我們可以看到其中有兩條關(guān)系線是虛線蔫劣,不用擔(dān)心是非活動關(guān)系,我們會使用USERELATIONSHIP函數(shù)來落實(shí)他們的關(guān)系皆警、在空表下面創(chuàng)建以下三個(gè)度量值:
(1) SalesAmountByOrderDates=SUM('FactInternetSales'[SalesAmount])
(2) SalesAmountByDueDates = CALCULATE('Measure'[SalesAmount],
? ? ?USERELATIONSHIP(DimDate[DateKey],'FactInternetSales'[DueDateKey]))
(3) SalesAmountByShipDates = CALCULATE('Measure'[SalesAmount],
USERELATIONSHIP(DimDate[DateKey],'FactInternetSales'[ShipDateKey]))
3拦宣、可視化
拖入日期列和三個(gè)新建的度量值截粗,我們就得到了不同業(yè)務(wù)日期口徑下的銷售金額信姓,如下圖:
總結(jié)
USERELATIONSHIP函數(shù)可以幫助我們實(shí)現(xiàn)兩表的多關(guān)系對應(yīng),但是一定要注意關(guān)系列必須要在模型中建立聯(lián)系绸罗,即使是非活動的關(guān)系意推。否則創(chuàng)建的度量值時(shí)會出現(xiàn)以下警告: