按照省份或国家分别统计信息

0
会员是有国籍和省份的,我要统计不同国家的会员列表,在其他地方也要统计某个国家的不同省份的会员列表。我表结构设计为国家表与省份表有关系(省份表有countrykey),会员表与国家表和省份表有关系(会员表有country和statekey),这样,会员可能具有countrykey和statekey,也可能没有,但如果有statekey就必然有countrykey,但如果有countrykey未必有statekey,这在业务上是允许的。

我尝试只在会员维度加入国家的信息,并期望显示不同国家的会员列表,但不知为什么,处理维度产生的sql总是有关于省份关联查询的信息,这导致一些会员即使有countrykey,但由于没有statekey而无法被查出来。我猜是否将省份与国家的表关联去掉就好了?但如果这样,统计某个国家下的所有省份的会员列表就无法做了吧?

GV{)A@M7(K`MY{)3(6V9TMX.jpg

已邀请:
2

Charry 2014-03-12 回答

需求设计到3张维度表,省份表和国家表的设计是没有疑问的,如下
省份表(StateKey(PK),CountryKey(FK),...)
国家表(CountryKey(PK))
由此可以得出结论:已知省份的情况可以获取该省份的国家

有疑问的是会员表,会员表要与省份和国家建立联系,由前面的结论可以得出会员只要建立与省份的关系便可以间接和国家建立联系,直接建立和国家的联系就显得有些冗余
所以会员表的设计暂定为
会员表(ProfileKey(PK),StateKey(FK)...)

三个表关系为
会员表------>省份表------>国家表

如何满足需求呢:会员是有国籍和省份的,要统计不同国家的会员列表,在其他地方也要统计某个国家的不同省份的会员列表。
通过表关系可以获取所有需要的信息,再通过创建Hierarchy来满足不同的需求
1.国家-会员
  1. 国家-省份-会员

个人愚见,希望对你有所帮助
0

anikor 2014-03-12 回答

方法 很好,值得学习
0

zwmyxzs 2014-03-13 回答

注意我说的一个业务情况:省份是可以为空的。就是说会员可以只填写国家而不填写省份,实际上如果一个外国人注册会员,你顶多会问他的国家,而不会问他具体的省份或州之类的对吧?你的方案对于此种情况的数据是不是就丢掉了?
0

zwmyxzs 2014-03-13 回答

我目前通过删除省份与国家的键关联关系,再查会员维度就正常了。如附件截图,US下有很多州,每个州下面有会员列表,但对于只有国家而没有州的会员呢,则显示在Unknown列表下。

但我希望能有更好的办法,能够保留国家与省份的关系。



QQ图片20140313134544.jpg
0

Charry 2014-03-14 回答

有国家没有省份的情况是我欠考虑了,会员表的设计就必须同时有省份表和国家表的外键
想要在数据库端保存省份表和国家表的联系的话,可以创建一个会员视图,然后基于视图来创建数据仓库的会员维度,再建Hierarchy,不知道你觉得是否可行
0

cs_sharp - 一句话介绍 2014-03-21 回答

你可以把 国家表 与 省份表 合成一张表。

要回复问题请先登录注册