标签:
才想起来总结这两天发现的一个有趣的现象:
在SSAS Tabular 模型中建立了关系之后,在excel中分析发现:
产品库龄作为量值:Aging Stock:=sum([DISTRIBUTOR_STOCK])以 区域维度Distributors.[Distributor code] +销售渠道维度Products.[PN]/Products.[Channel Mode]+时间维度Times.[YEAR]/Times.[YEAR MONTH]
YEAR 点击筛选,值选择2016年~
以以上维度进行透视表分析时,channelMode出现空值,即vw_FS_DIST_AGING_STOCK产品有库存,却没有销售渠道信息,
说明:因为Channel Mode并不是内联关系,是Products的一个维度【列】而已,由使用者自行拉取,在模型关系没有错误的情况下,应该是数据出现的问题!
说明事实表与Products关联的时候,Products.[Channel Mode]出现了null值!
以下是模型关系:
事实表
库龄表:vw_FS_DIST_AGING_STOCK 度量值DAX函数后:Aging Stock:=sum([DISTRIBUTOR_STOCK])
维度表:
产品表:Products / 日期表:Times / 区域表:Distributors
关系:
编写sql代码查询:
SELECT DISTINCT SUM(DISTRIBUTOR_STOCK),ITEM_CHANNEL_MODE FROM vw_FS_DIST_AGING_STOCK A INNER JOIN CB_PRODUCT B ---INNER JOIN-- ON A.ITEM_CODE=B.Part_Number where B.ITEM_CHANNEL_MODE is null group by ITEM_CHANNEL_MODE
请注意这里是:inner join ,以下是查询结果-->并没有任何记录!
感觉很奇怪是吧,如果试一试LEFT JOIN呢?<数据不一致是因为一个是测试库,一个是正式库,请忽略!>
这样就很容易说通了,以下是sql查询:
SELECT DISTINCT SUM(DISTRIBUTOR_STOCK),ITEM_CHANNEL_MODE,DISTRIBUTOR_CODE FROM vw_FS_DIST_AGING_STOCK A LEFT JOIN CB_PRODUCT B --LEFT JOIN--- ON A.ITEM_CODE=B.Part_Number INNER JOIN CB_DATE C ON A.YYYYMMDD=CONVERT(nvarchar(8),C.[DATE],112) WHERE DISTRIBUTOR_CODE=‘DC‘ -- AND B.ITEM_CHANNEL_MODE =‘‘--AND B.ITEM_CHANNEL_MODE IN (‘CON‘,‘KAB‘,‘SMB‘,NULL) AND LEFT(C.CURRENT_YEAR, 4) + ‘/‘ + LEFT(C.MONTH, 3)=‘2016/Jan‘ GROUP BY ITEM_CHANNEL_MODE,DISTRIBUTOR_CODE
查询结果:
换为inner join之后的效果:
SELECT distinct a.ITEM_CODE,b.Part_Number,b.ITEM_CHANNEL_MODE,DISTRIBUTOR_STOCK,DISTRIBUTOR_CODE FROM vw_FS_DIST_AGING_STOCK A left JOIN CB_PRODUCT B ON A.ITEM_CODE=B.Part_Number INNER JOIN CB_DATE C ON A.YYYYMMDD=CONVERT(nvarchar(8),C.[DATE],112) WHERE DISTRIBUTOR_CODE=‘DC‘ --AND B.ITEM_CHANNEL_MODE =‘‘--AND B.ITEM_CHANNEL_MODE IN (‘CON‘,‘KAB‘,‘SMB‘,NULL) AND LEFT(C.CURRENT_YEAR, 4) + ‘/‘ + LEFT(C.MONTH, 3)=‘2016/Jan‘
查询结果会发现有很多这样的数据;
通过以上验证分析,
目前还没有找到资料验证:
SSAS Tabular模型中,关系建立之后对应的是sql查询中的LEFT JOIN,至于微软是如何设计的,设计用意,进一步学习跟进中。。。
标签:
原文地址:http://www.cnblogs.com/ammy714926/p/5242904.html