我有一个MDX查询与以下计算成员:
with member [Measures].[BBOX] as
Count(
Filter(
CrossJoin([Dim Response].[Response ID].Children, [Dim Question].[Question Text].Children),
[Measures].[Question Bottom Box] > 0
)
)
Run Code Online (Sandbox Code Playgroud)
我的想法是,我想要计算维度的两个成员的组合.(请原谅我,如果我的MDX词汇量有点偏差).它也基于一些标准.
查询的其余部分如下所示:
select
{({[Measures].[TBOX], [Measures].[BBOX]},
[Dim Product].[Category Name].&[Office])} on columns,
{[Dim Question].[Question Text].Members} on rows
from H1_FY10_Revised
where ({[Dim Question].[Category Name].&[Partner]},
{[Dim Subsidiary].[Subsidiary Alias Name].&[Germany]})
Run Code Online (Sandbox Code Playgroud)
我的问题是:主查询中发生的数据切片(where子句)是否转换为计算成员?从计算成员返回的数据与主查询中的轴之间是否存在任何类型的隐式连接?
或另一种表达它的方式:计算成员中的交叉连接是否在主查询的上下文中执行?
现实描述:我们有一个项目列表.在每个项目中都有很多账户.您可以对每个帐户执行大量操作.我确实有以下维度和事实表定义(简化):
Dimensions and attributes:
Project
project_key
project_name
industry
number_of_accounts
Distance
distance_key
distance_in_months
distance_in_quarters
Account
account_key
project_key
account_id
Fact Table and attributes:
Action_Fact_Table
project_key
distance_key
account_key
action_id
Run Code Online (Sandbox Code Playgroud)
现在,我想使用径流三角形方法来分析数据(它可能不是真正的径流三角形,但方法是相同的).最简单的三角形看起来像:
Distance in Months
Project name| 1 2 3 4 5 6 7 8 9 10
-------------------------------------------------------------------------
Project1 | 5 10 15 20 25 30 35 40 45 50
Project2 | 7 14 21 28 35 42 49 56 63
Project3 | 2 5 8 11 14 20 25 30
Project4 | 0 2 …
Run Code Online (Sandbox Code Playgroud) 在以下MDX查询中
SELECT
{
[EffectiveDate].[Period].[All].CHILDREN,
[EffectiveDate].[Period].[All]
} ON COLUMNS,
NON EMPTY {
[Account].[Hierarchy].[Account Type].&[Assets].CHILDREN,
[Account].[Hierarchy].[Account Type].&[Assets],
[Account].[Hierarchy].[Account Type].&[Liabilities].CHILDREN,
[Account].[Hierarchy].[Account Type].&[Liabilities],
[Account].[Hierarchy].[Account Type].&[Equity].CHILDREN,
[Account].[Hierarchy].[Account Type].&[Equity],
[Account].[Hierarchy].[Account Type].&[Revenue].CHILDREN,
[Account].[Hierarchy].[Account Type].&[Revenue],
[Account].[Hierarchy].[Account Type].&[Expenses].CHILDREN,
[Account].[Hierarchy].[Account Type].&[Expenses]
} ON ROWS
FROM [JEMDA]
WHERE CrossJoin(
{
[Measures].[Amount]
},
{
[Source].[Source].[[Blank]]]
},
{
[EffectiveDate].[Period].&[5-Dec],
[EffectiveDate].[Period].&[5-Nov],
[EffectiveDate].[Period].&[5-Oct],
[EffectiveDate].[Period].&[6-Jan]
})
Run Code Online (Sandbox Code Playgroud)
它报告错误:
Period层次结构已出现在Axis0轴中.
你能告诉我如何解决这个问题吗?谢谢!
在SSAS多维数据集中,如何为非时间维度创建聚合为LastChild的度量?
源数据在任何给定日期都有相同业务记录的许多版本.时间维度的粒度为DATE,而不是秒和毫秒.
事实记录具有时间戳和增量(标识)主键.实际上,我想要的是将度量计算为给定日期所有编辑的最后一个值.
到目前为止,我看到的选项分为两类:
要么
是否有解决这个问题的最佳位置或替代技术?
数据的自然层次结构是:
我想知道是否有一个可以处理MDX 的内存 OLAP服务器.
我找到了维基百科的文章.但它没有说明内存功能......
我所知道的唯一一个是Mondrian,它也是上面wiki文章中提到的两个开源解决方案之一.
到目前为止,我刚刚和蒙德里安合作了......我不认为Mondrian是一个真正的内存OLAP服务器.
原因如下:
它有一个内存缓存,其中包含查询结果.但是他们的第一次执行需要很长时间,必须从RDBMS加载.(http://mondrian.pentaho.com/documentation/faq.php#Scalability)
我认为最好的方法是:
在Cache中加载所有的事实和维度表,然后对这个内存中的数据执行每个查询.
AFAIK,甲骨文将在今年发布12c企业版,有可能在内存中拥有一些(或所有)表.这将加速OLAP服务器,它只使用SQL查询RDBMS-fact-tables.
...但企业版非常昂贵......
我想听听其他一些意见.
最好的问候,
丹尼斯.
实际上我正在使用R + Python和RPY2来操作数据和ggplot来创建漂亮的图形..我在PostgreSQL数据库中有一些数据,而我正在使用psycopg2来查询数据.
我正在开始论文,将来我需要一个OLAP多维数据集来存储我的(非常大的)模拟数据:多维,聚合查询等.
是否有任何最佳或标准的实践来连接Python(我想要Python + R,没有jpivot或Java中的其他仪表板)和像Mondrian这样的OLAP引擎?我在Google上搜索了任何解决方案,但我找不到任何东西.
我简要地评价SQLAlchemy的和Django的ORM,但他们没有MDX或XML/A接口来查询OLAP服务器(蒙德里安或其他)...
是否可以编写一个查询的MDX,并与psycopg + ODBC,查询我的OLAP服务器,OLAP服务器给我从我的模拟数据的应答(Python对象上没有映射,但它的确定对我来说)?
更新1:
为什么我需要搜索OLAP + Mondrian技术?
由于拉瓦尔大学(GeoSoa个省+蒂埃里Badard)写了一个空间延伸到OLAP:SOLAP,并在蒙德里安实施本作GeoMondrian.我感兴趣的是因为我正在研究基于空间多代理的模拟(〜=地理模拟).
所述GeoSoa DEPARTEMENT创建一个基于Ajax组件通信和可视化与GeoMondrian空间数据:SOLAPLAYERS,其可通过其Xlma的servlet查询蒙德里安服务器.
问题:可能是在大数据处理速度慢,需要互联网或Apache 2,简单地说,这只是可视化的数据或地图...就我而言,我需要的原始数据,以使自己的数据处理+与R图形:空间分析,回归分析分析,排序等等.在这里,SOLAP帮助我为后来的复杂R分析准备数据.
为何选择Python?
1 - 对空间数据的Web访问 -
我试图用一个"酷"的Python框架,像GeoDjango内置或MapFish:在GIS大社区,开源,使用GeoAlchemy操纵空间查询/数据,包括与JavaScript扩展和可视化的OpenLayers等.
2 - GIS中对空间数据的本地访问 -
我想在QGIS(开源GIS)中创建一个插件来访问和可视化数据,以及QGIS插件和API = Python.
3 - 自动分析数据 -
用户或科学家使用网格计算运行模拟,并选择他们想要对此数据运行的自动分析(R + ggplot2 + MDX查询).我的目标是创建模拟的综合报告(图形,表格数据等).
因此,在模拟之后,数据转到OLAP/SOLAP多维数据集,许多Python脚本(由用户创建)通过MDX获取数据,使用R + RPY2处理数据,并为doku-wiki或其他人的科学家编写并生成很酷的输出.社区平台.
问题?
1 - Olap4j是Mondrian与外部组件通信的API核心,是Java制造的:/
2 - SOLAPLAYERS使用Ajax访问数据,对我来说太慢了.
3 - SQLAlchemy和GeoAlchemy没有与多维数据库(OLAP)的驱动程序连接.
*解决方案?*
1 - Py4j用Python访问olap4j中的Java对象或Java集合?编写我自己的函数来访问Java映射集合?=>危险而且不是很容易?... …
每当与数据透视表进行交互时,我都非常难以使用Excel.添加/删除字段,更改过滤器或切片器,都需要在响应之前冻结几分钟的Excel.
看来生成的MDX效率极低.我可以理解他们必须动态生成MDX并且必须支持数据透视表的许多功能,但速度慢100倍是荒谬的.
当他们为行或列上的字段生成MDX时,他们使用DrilldownLevel(... [Property Dimension].[County])
我不确定Excel更复杂方法的目的是什么,但我希望有一些选项可以取消选中,以便Excel不需要使用DrilldownLevel函数.
相反,我通常省略Drilldownlevel函数,只做[Property Dimension].[County] .[County]来访问该属性.
使用Excel的MDX对同一结果集的查询需要5分钟,使用我的MDX需要不到5秒.
我已经验证了Excel渲染/格式化结果的速度不是很慢,因为我使用了Excel使用的MDX并直接在SSMS中运行它来验证时间.我可以在服务器上查看任务管理器,并在处理结果时观察CPU的流失情况.
注意,我不是责备服务器,因为我可以创建运行速度极快且提供相同结果的MDX查询.
如何让Excel生成更高效的MDX?我正在使用Excel 2010.
我听说powerpivot生成更高效的MDX,但是Powerpivot在SSAS之上不可用,因为它没有利用SSAS多维数据集.因此,对于为什么Powerpivot在SSAS之上不起作用的短暂咆哮.如果您将数据从SSAS导入powerpivot,那么您实际上正在执行的是执行巨型交叉连接以将数据从SSAS迁移到Powerpivot表中.如果你试过这个,你会发现它会生成字段名称/标签,例如"Property DimensionCountyCounty Name"......哇真的吗?然后,您只需使用本地Powerpivot的OLAP引擎处理数据,因此依赖于具有64位操作系统的客户端计算机,以便使用合理大小的数据集.这是因为如果你是刚刚切割出SSAS,扔了你所有的努力构建一个复杂的OLAP数据库和所有的元数据,计算,汇总等一半使用SSAS的原因是,它可以汇总详细数据在它返回客户端之前,客户端不需要64位操作系统,并且客户端上不需要大量资源.我非常努力地使用反对SSAS的powerpivot可用,但在尝试了几种方法并且与用户来回之后,它真的没有接近可用的地方.不敲PowerPivot的,因为我看到它的用处在许多其他方案,但如果你的SSAS多维数据集是系统的重要组成部分(即计算,聚集了大量的服务器端,记录等),则PowerPivot的似乎是错误的选项.
这是我的查询示例:
SELECT
NON EMPTY CrossJoin(
{[Department Dimension].[Name].[Name]},
{[Finance Month].[Report Year].[Report Year]}
)
ON COLUMNS ,
CrossJoin(
{[Department Finance Line Type Dimension].[Display Order].[Display Order] },
{[Department Finance Line Type Dimension].[Line Number].[Line Number]},
{[Department Finance Line Type Dimension].[Display Name].[Display Name]}
)
ON ROWS
FROM
(
SELECT ({[Department Dimension].[County].&[Seminole],[Department Dimension].[County].&[Sarasota]}) ON COLUMNS FROM [HYP Data View]
)
WHERE ([Department Finance Line Type Dimension].[Section Name].&[Part 1 …
Run Code Online (Sandbox Code Playgroud) 我有一个SSAS-2014立方体.如果在excel中的任一轴或透视表的过滤器窗格中使用特定维度,我想将特定度量设置为NULL.现在,最直观的解决方案是将此度量的范围与该维度的成员无关.说,我不希望该度量与会计期间成员一起使用,然后我在多维数据集中使用以下MDX:
CREATE MEMBER CURRENTCUBE.[Measures].[Test Measure] AS 1;
SCOPE([Measures].[Test Measure]);
SCOPE(DESCENDANTS([DIM Accounting Period].[Accounting Period Hierarchy].[All],,AFTER));
THIS = NULL;
END SCOPE;
END SCOPE;
Run Code Online (Sandbox Code Playgroud)
这似乎很好,因为excel将以下MDX发送回SSAS引擎
SELECT NON EMPTY Hierarchize (
{
DrilldownLevel (
{ [DIM Production Period].[Production Month].[All Dates] }
,
,
, INCLUDE_CALC_MEMBERS
)
}
) ON COLUMNS
FROM [CUBE - Opex Analysis]
WHERE ( [DIM Accounting Period].[Accounting Period Hierarchy].[Accounting Year].[2015],
[Measures].[Test Measure] ) CELL PROPERTIES VALUE
, FORMAT_STRING
, LANGUAGE
, BACK_COLOR
, FORE_COLOR
, FONT_FLAGS
Run Code Online (Sandbox Code Playgroud)
如果我在筛选器窗格中选择了两个成员,则会出现问题,如此图所示
其原因似乎与excel发送回引擎的MDX有关.它将项目封装在子多维数据集中,使引擎认为没有选择会计年度.这是excel使用的MDX:
SELECT NON …
Run Code Online (Sandbox Code Playgroud) 这适用于为报表动态设置数据和呈现报表的应用程序.
我有一个依赖于参数的报告的MDX查询.查询是:
SELECT NULL ON COLUMNS, strtomember(@DateYear) ON ROWS FROM [MYDATACUBE]
Run Code Online (Sandbox Code Playgroud)
在报表查询设计器中运行它时,它会正确返回一个值.但是,在Visual Basic代码中运行它时,它什么都不返回.这是我的代码的重要部分:
Dim cn = New AdomdConnection(adomdparamconnectionstrings(countparamsadomd))
Dim da As AdomdDataAdapter = New AdomdDataAdapter()
Dim cmd = New AdomdCommand(paramcommands(countparamsadomd), cn)
Dim tbl = New DataTable
If (adomdparams) Then 'If there are parameters, adds them to the query
For l As Integer = 0 To (countparamsadomd - 1)
If (adomdparamconnectionstrings(l) = "NODATASET") Then
Dim p As New AdomdParameter(paramvaradomd(l), paramadomd(l))
cmd.Parameters.Add(p)
Else
Dim p As New AdomdParameter(paramvaradomd(l), adomdqueryvalues(l))
cmd.Parameters.Add(p)
End If …
Run Code Online (Sandbox Code Playgroud) 我想了解什么可能是查询语言如何分解的最高级别分组,以及为什么一个分组可能与另一个有根本的不同。例如,我现在提出的分组(用于通用用途)是:
描述各种查询语言的最佳高级分组是什么?