zoukankan      html  css  js  c++  java
  • 数据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可以拖拉使用的对象的

  • 相关阅读:
    String painter HDU
    GCD Counting-树形DP
    XOR UVALive
    BZOJ-9-3295: [Cqoi2011]动态逆序对
    E
    Stars HDU
    二维单调队列(理想的正方形+修筑绿化带)
    P3622 [APIO2007]动物园
    COJ1160[一本通 5.3 例 1」Amount of Degrees
    [ZJOI2008]骑士
  • 原文地址:https://www.cnblogs.com/cl1024cl/p/6205495.html
Copyright © 2011-2022 走看看