数据cube的schema与sql的对应的关系
用schema workbench 设置cube的维度结构
saiku 使用的cube,会将不同维度的查询转化为sql语句。
schema中,
cube的事实表和dimension表进行自然连接,具体的dimension设置是,dimension设置界面上foreign key(事实表的某一列)与hierarchy设置界面上primaryKey(dimension表的主键)。关联是通过这两个列进行对比,所以一定要指定正确。
而,level设置界面上的Column是实现group by 的
写一个一个小例子:
mdx语句
SELECT
NON EMPTY {[Measures].[Downloads]} ON COLUMNS,
NON EMPTY TopCount({Hierarchize(CrossJoin([dimDate.default].[day].[2014-01-03], [compare_app.default].[appName].Members))},20,[downloads]) ON ROWS
FROM [aso]
注意[dimDate.default]中default为层级名。要设定好,才能正确的引用level。我为hierarchy起名为default,因为就一个。
转换为对应的sql语句为:
SELECT
`dimdate`.`year` AS `c0`,
`dimdate`.`yearname` AS `c1`,
`dimdate`.`month` AS `c2`,
`dimdate`.`monthname` AS `c3`,
`dimdate`.`datevalue` AS `c4`,
`dimappnamenew_1`.`app_name` AS `c5`
FROM
`dimdate` AS `dimdate`,
`factdownloadsnew` AS `factdownloadsnew`,
`dimappnamenew` AS `dimappnamenew_1`
WHERE
`factdownloadsnew`.`date_time` = `dimdate`.`datevalue`
AND `factdownloadsnew`.`app_link_hash` = `dimappnamenew_1`.`app_link_hash`
AND(
`dimdate`.`datevalue` = '2014-01-03'
AND `dimdate`.`month` = '1'
AND `dimdate`.`year` = '2014'
)
GROUP BY
`dimdate`.`year`,
`dimdate`.`yearname`,
`dimdate`.`month`,
`dimdate`.`monthname`,
`dimdate`.`datevalue`,
`dimappnamenew_1`.`app_name`
ORDER BY
ISNULL(`dimdate`.`year`)ASC,
`dimdate`.`year` ASC,
ISNULL(`dimdate`.`month`)ASC,
`dimdate`.`month` ASC,
ISNULL(`dimdate`.`datevalue`)ASC,
`dimdate`.`datevalue` ASC,
ISNULL(
`dimappnamenew_1`.`app_name`
)ASC,
`dimappnamenew_1`.`app_name` ASC
这里我遇到一个问题,这个维度查询关联是按applinkhash进行,
结果如下:
而同样实现前20排名返回语句,用app_id进行关联:
SELECT
NON EMPTY {[Measures].[Downloads]} ON COLUMNS,
NON EMPTY TopCount({Hierarchize(CrossJoin([dimDate.default].[day].[2014-01-03], [dimApp.appName].[appName].Members))},20,[downloads]) ON ROWS
FROM [aso]
结果如下(不同):
两个结果不同。如,360用app_id统计的少了很多。
问题分析:applinkhash是一一对应的,而app_id也是一一对应的。二者比对应该相同。
app_id统计少了,是什么原因?
在原表中进行查询,直接统计360手机卫士的downloads,证明app_id是正确的。app_link_hash对比,会多统计一些。
原因如下:360手机卫士有两个version,5.0和4.3,两条记录applink,applinkhash相同,只有version不同,所以比对上有两个关联上了,导致累加到了一起。
另外,saiku中呈现的名字也是在schema里设置,对应关系:
schema名-------------最开始,saiku里面选择的schema
下一级
cube名----------------------saiku在每个schema下的名
下一级
dimension名(维度名)-----------------saiku呈现cube下为文件夹名
下一级
level名-------------------saiku可以拖拉使用的对象的
数据cube的schema与sql的对应的关系的更多相关文章
- 查询oracle数据库,返回的数据是乱码。 PL/SQL正常。
查询oracle数据库,返回的数据是乱码. PL/SQL正常. 解决方案如下:
- SQLSERVER:大容量导入数据时保留标识值 (SQL Server)
从MSDN上看到实现大容量导入数据时保留标识值得方法包含三种: MSDN链接地址为:https://msdn.microsoft.com/zh-cn/library/ms178129.aspx 感觉M ...
- MySQL数据导出为Excel, json,sql等格式
MySQL数据经常要导出为Excel, json,sql等格式,通过步骤都很多,麻烦,现在通过Treesoft可以方便的导出你要的数据格式. 1.在线执行SQL,在数据列表中有相应按钮,方便的将数据导 ...
- 【mybatis】mybatis执行一个update方法,返回值为1,但是数据库中数据并未更新,粘贴sql语句直接在数据库执行,等待好久报错:Lock wait timeout exceeded; try restarting transaction
今天使用mybatis和jpa的过程中,发现这样一个问题: mybatis执行一个update方法,返回值为1,但是数据库中数据并未更新,粘贴sql语句直接在数据库执行,等待好久报错:Lock wai ...
- 2016/05/13 thinkphp 3.2.2 ① 数据删除及执行原生sql语句 ②表单验证
[数据删除及执行原生sql语句] delete() 返回受影响的记录条数 $goods -> delete(30); 删除主键值等于30的记录信息 $goods -> delete( ...
- Oracle取查询结果数据的第一条记录SQL
Oracle取查询结果数据的第一条记录SQL: ; ;
- 在SQL Server中实现关系模型的阶梯到级别3的t -SQL DML
在SQL Server中实现关系模型的阶梯到级别3的t -SQL DML 格雷戈里·拉森(Gregory Larsen),2017/08/02(第一次出版:2011 /11/09) 原文链接:http ...
- 在SQL Server中实现关系模型
使用SQL Server的Transact-SQL(T-SQL)方言,此楼梯将为您提供如何使用SQL Server表中的数据的基本了解. DML是数据操作语言,是处理数据的语言的一个方面.它包括SEL ...
- 到T-SQL DML 三级的阶梯:在SQL server中实现关系模型
作者: Gregory Larsen, 2017/08/02 (第一次出版: 2011/11/09) 翻译:谢雪妮,许雅莉,赖慧芳,刘琼滨 译文: 系列 该文章是阶梯系列的一部分:T-SQL DML的 ...
随机推荐
- 集合框架之Map接口
Map是将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. Map 接口提供三种collection视图,允许以键集.值集或键-值映射关系集的形式查看某个映射的内容.映射顺序定 ...
- qsort函数应用大全
七种qsort排序方法 <本文中排序都是采用的从小到大排序> 一.对int类型数组排序 int num[100]; Sample: int cmp ( const void *a , c ...
- memcached实战系列(七)理解Memcached的数据过期方式、新建过程、查找过程
1.1.1. 新建Item分配内存过程 1:快速定位slab classid,先计算Item长度 key键长+flag+suffix(16字节)+value值长+结构大小(32字节),如90byte ...
- 【移动开发】SparseArray替代HashMap
SparseArray是android里为<Interger,Object>这样的Hashmap而专门写的class,目的是提高效率,其核心是折半查找函数(binarySearch). p ...
- Android初级教程初谈自定义view自定义属性
有些时候,自己要在布局文件中重复书写大量的代码来定义一个布局.这是最基本的使用,当然要掌握:但是有些场景都去对应的布局里面写对应的属性,就显得很无力.会发现,系统自带的控件无法满足我们的要求,这个时候 ...
- UNIX网络编程——UDP回射服务器程序(初级版本)以及漏洞分析
该函数提供的是一个迭代服务器,而不是像TCP服务器那样可以提供一个并发服务器.其中没有对fork的调用,因此单个服务器进程就得处理所有客户.一般来说,大多数TCP服务器是并发的,而大多数UDP服务器是 ...
- Android开发学习之路--Activity之初体验
环境也搭建好了,android系统也基本了解了,那么接下来就可以开始学习android开发了,相信这么学下去肯定可以把android开发学习好的,再加上时而再温故下linux下的知识,看看androi ...
- 与信号相关的linux系统编程API
1. kill(pid_t pid, int sig); //给指定的进程发送sig信号 raise(int sig); //给当前进程发送sig信号2. 处理指定的信号 typedef v ...
- 【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)
作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csd ...
- 现代控制理论习题解答与Matlab程序示例
现代控制理论习题解答与Matlab程序示例 现代控制理论 第三版 课后习题参考解答: http://download.csdn.net/detail/zhangrelay/9544934 下面给出部分 ...