用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的对应的关系的更多相关文章

  1. 查询oracle数据库,返回的数据是乱码。 PL/SQL正常。

    查询oracle数据库,返回的数据是乱码. PL/SQL正常. 解决方案如下:

  2. SQLSERVER:大容量导入数据时保留标识值 (SQL Server)

    从MSDN上看到实现大容量导入数据时保留标识值得方法包含三种: MSDN链接地址为:https://msdn.microsoft.com/zh-cn/library/ms178129.aspx 感觉M ...

  3. MySQL数据导出为Excel, json,sql等格式

    MySQL数据经常要导出为Excel, json,sql等格式,通过步骤都很多,麻烦,现在通过Treesoft可以方便的导出你要的数据格式. 1.在线执行SQL,在数据列表中有相应按钮,方便的将数据导 ...

  4. 【mybatis】mybatis执行一个update方法,返回值为1,但是数据库中数据并未更新,粘贴sql语句直接在数据库执行,等待好久报错:Lock wait timeout exceeded; try restarting transaction

    今天使用mybatis和jpa的过程中,发现这样一个问题: mybatis执行一个update方法,返回值为1,但是数据库中数据并未更新,粘贴sql语句直接在数据库执行,等待好久报错:Lock wai ...

  5. 2016/05/13 thinkphp 3.2.2 ① 数据删除及执行原生sql语句 ②表单验证

    [数据删除及执行原生sql语句] delete()  返回受影响的记录条数 $goods -> delete(30);   删除主键值等于30的记录信息 $goods -> delete( ...

  6. Oracle取查询结果数据的第一条记录SQL

    Oracle取查询结果数据的第一条记录SQL: ; ;

  7. 在SQL Server中实现关系模型的阶梯到级别3的t -SQL DML

    在SQL Server中实现关系模型的阶梯到级别3的t -SQL DML 格雷戈里·拉森(Gregory Larsen),2017/08/02(第一次出版:2011 /11/09) 原文链接:http ...

  8. 在SQL Server中实现关系模型

    使用SQL Server的Transact-SQL(T-SQL)方言,此楼梯将为您提供如何使用SQL Server表中的数据的基本了解. DML是数据操作语言,是处理数据的语言的一个方面.它包括SEL ...

  9. 到T-SQL DML 三级的阶梯:在SQL server中实现关系模型

    作者: Gregory Larsen, 2017/08/02 (第一次出版: 2011/11/09) 翻译:谢雪妮,许雅莉,赖慧芳,刘琼滨 译文: 系列 该文章是阶梯系列的一部分:T-SQL DML的 ...

随机推荐

  1. Android 6.0出现的init: cannot execve(‘XXX’):Permission denied问题:禁止SELINUX的权限设置

    最近在开发MTK的相关项目,需要将一些可执行文件添加到init.rc文件里去,但是开机后发现,这个bin文件没有权限不能执行,于是我就在init.rc中对相应的bin文件增加了权限.后来发现,改了也没 ...

  2. 剑指Offer——知识点储备-故障检测、性能调优与Java类加载机制

    剑指Offer--知识点储备-故障检测.性能调优与Java类加载机制 故障检测.性能调优 用什么工具可以查出内存泄露 (1)MerroyAnalyzer:一个功能丰富的java堆转储文件分析工具,可以 ...

  3. ROS探索总结(十八)——重读tf

    在之前的博客中,有讲解tf的相关内容,本篇博客重新整理了tf的介绍和学习内容,对tf的认识会更加系统. 1 tf简介 1.1 什么是tf tf是一个让用户随时间跟踪多个参考系的功能包,它使用一种树型数 ...

  4. [nginx]统计文件下载是否完整思路(flask)

    有一个需求是统计文件是否被用户完整下载,因为是web应用,用js没有找到实现方案,于是搜索下nginx的实现方案,把简单的探索过程记录下. 实验一 最原始的思路,查看日志,下载了一个文件之后我们看日志 ...

  5. Web Service进阶(三)HTTP-GET, HTTP-POST and SOAP的比较

    XML Web Service支持三种协议来与用户交流数据.这三种协议分别是: 1.SOAP:Simple Object Access Protocol 2.HTTP-GET 3.HTTP-POST ...

  6. TraceView性能分析工具介绍

    一.TraceView简介 TraceView是AndroidSDK里面自带的工具,用于对Android的应用程序以及Framework层的代码进行性能分析. TraceView是图形化的工具,最终它 ...

  7. 如何优雅地退出python程序

    如何优雅地退出python程序 一个单模的python程序,启动之后要能够优雅地关闭.即当用户按Ctrl+C或者kill pid的时候,程序都能从容关闭.实现起来非常简单. is_running = ...

  8. [struts2学习笔记] 第二节 使用Maven搞定管理和构造Struts 2 Web应用程序的七个步骤

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/40303897 官方文档:http://struts.apache.org/releas ...

  9. Collections类解析

    最常用的排序: 需要实现Comparable接口 1.什么是Comparable接口 此接口强行对实现它的每个类的对象进行整体排序.此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它 ...

  10. Activity绑定自定义视图

    在安卓工程中,我们通过创建可以自动生成on_Create方法,这里面有个: setContentView(R.layout.activity_main);是系统自带的一个布局文件,但是在开发的过程中, ...