我想实现一个为MDX查询提供支持的应用程序.为此,我想使用pentaho mondrian(一个带有MDX接口的开源OLTP服务器)中的一个库,它将MDX查询转换为下划线数据库的SQL(基于xml描述),遗憾的是我无法找到任何信息.库我需要包含 - 以及如何使用它们 - 在我的项目中使MDX到SQL映射工作.
有没有人在她/他的应用程序中重复使用mondrian组件的经验?
是否可以通过 Microsoft Excel 浏览蒙德里安立方体?像 Microsoft SSAS 一样吗?如果没有,是否有可能使用 Sharepoint 作为前端来浏览蒙德里安立方体?
我正在尝试学习如何构建BI堆栈,但我一直在理解该流程的哪个部分失败:
结果:Saiku中没有立方体.我不知道这可能来自哪个元素.第2步是正确的,因为我可以运行这部分.
这是我的星型模式:
CREATE TABLE IF NOT EXISTS `dim_date` (
`date_id` int(11) NOT NULL AUTO_INCREMENT,
`date` datetime DEFAULT NULL,
`month` varchar(3) DEFAULT NULL,
`year` varchar(4) DEFAULT NULL,
PRIMARY KEY (`date_id`),
KEY `idx_dim_date_lookup` (`date`,`month`,`year`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `dim_sector` (
`sector_id` int(11) NOT NULL AUTO_INCREMENT,
`sector` varchar(255) DEFAULT NULL,
PRIMARY KEY (`sector_id`),
KEY `idx_dim_sector_lookup` (`sector`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `dim_size` ( …Run Code Online (Sandbox Code Playgroud) 我有这个MDX查询:
with member [Measures].[count] as '[Measures].[NUMBER]'
** member [Measures].[total] as 'sum({[RECORD_TYPE.VALUES].[All VALUEs].children})' **
member [Measures].[% records] as '([Measures].[count] / [Measures].[total])', format_string = "0.0%"
select {[Measures].[count], [Measures].[% records], [Measures].[total]} ON COLUMNS,
[RECORD_TYPE.VALUE].[1] ON ROWS
from [RECORDS]
where Crossjoin({[CITY].[LONDON]}, {([DATE.DATE].[20171101] : [DATE.DATE].[20171130])})
Run Code Online (Sandbox Code Playgroud)
我发现这个[总]会员只按日期计算过滤记录(记录20171101和20171130之间的数据).如果我将此总数切换为:
member [Measures].[total] as 'sum({[DATE.DATE].[All DATEs].children})'
Run Code Online (Sandbox Code Playgroud)
无论城市如何,我都会在立方体中获得所有记录.
我希望这个总数是[CITY].[LONDON]在立方体中的记录总数,无论记录类型如何.你能告诉我我该怎么办?
我正在计划一个使用Mondrian OLAP引擎和Olap4j的应用程序,并应向用户显示/显示数据.我理解所有的后端内容,但我不确定如何在视图层中显示数据.
例如,olap4j有一个格式化程序,可以很好地将SELECT打印到控制台中.
我从olap4j获得的数据如何显示在视图层中?我刚刚浏览了olap4j API,并且似乎没有任何东西可以以某种方式获得结果,可以以某种方式进一步处理和显示.这个过程是Pentaho解决方案的一部分吗?那么否则仅仅从Mondrian OLAP引擎和olap4j呈现数据真的不容易?
编辑:我习惯于传统上从数据库中获取一些数据到我的DTO中并在视图层中显示它.但是如何为这样复杂的结果集创建DTO呢?
我正在通过schema-workbench或ivy schema editor创建多维数据集(xml架构).当我发布它时,我想知道模式(mondrian.xml文件)实际保存在哪里,这些文件的位置是什么?
谢谢,
例如,我需要获取年份大于 2013 年的所有日期。此代码返回所有日期。
SELECT
{[Measures].[In]} ON COLUMNS
,Filter
(
[Date].MEMBERS
,
[Date].[Year].CurrentMember > [Date].[2013]
) ON ROWS
FROM [Shop];
Run Code Online (Sandbox Code Playgroud)
我需要获取所有日期大于 2013.05.20 的日期
我没有找到但可能有人可以解释 - OLAP多维数据集是所有可能聚合的组合,因此与Mondrian相关 - 叶级别是事实表中的数据还是最小聚合(单元格)?谢谢.
我刚刚开始研究蒙德里安.我很难理解层次结构和层次.多维数据集中维度的级别和层次结构之间的区别是什么?为什么在构建Mondrian模式时我们需要在层次结构中包含级别?
谢谢阅读
我正在尝试从MDX选择查询中的维度中过滤掉一些点。我已经使用了http://mondrian.pentaho.com/documentation/mdx.php中记录的Filter(,)函数。正在运行的MDX如下
SELECT {[Measures].[AMOUNT]} on 0,
{Filter ([DIM1].MEMBERS, [DIM1].CurrentMember NOT IN {[DIM1].[A], [DIM1].[B], [DIM1].[C]})} on 1,
{[DIM2].[S]} on 2,
{[DIM3].[EFO]} on 3,
{[CURRENCY].[EUR]} on 4
from [CUBE]
Run Code Online (Sandbox Code Playgroud)
但是Measures.AMOUNT仍在考虑Dim1.A,Dim1.B和Dim1.C。能否请您指出我的语法有什么问题?我也尝试了Except(,)。
最好,罗汉
更新:
感谢Marc,为我指出了正确的方向。我进行了更多测试,发现Member函数还返回一个点“ All”,其中包括我维度上的所有点。因此,即使Filter()或Except()函数正确地过滤了点,“全部”点仍包含所有点的值,因此将它们包括在Measure.AMOUNT计算中。相反,我使用了Children函数,该函数未返回“ All”点,因此我看到了所需的结果。更新了下面的MDX
使用Filter和NOT IN来工作MDX(警告:NOT IN是Mondrian特定的操作)
SELECT {[Measures].[AMOUNT]} on 0,
{Filter ([DIM1].Children, [DIM1].CurrentMember NOT IN {[DIM1].[A], [DIM1].[B], [DIM1].[C]})} on 1,
{[DIM2].[S]} on 2,
{[DIM3].[EFO]} on 3,
{[CURRENCY].[EUR]} on 4
from [CUBE]
Run Code Online (Sandbox Code Playgroud)
使用MDX除外
SELECT {[Measures].[AMOUNT]} on 0,
{except ( {[DIM1].Children}, {[DIM1].[A], [DIM1].[B], [DIM1].[C]} )} on 1,
{[DIM2].[S]} on 2,
{[DIM3].[EFO]} …Run Code Online (Sandbox Code Playgroud)