我有DWH的这种结构
DimRegion
ID IDParent Level Region
1 | NULL | 0 | World
2 | 1 | 1 |America
3 | 1 | 1 |Europe
4 | 2 | 2 |USA
5 | 2 | 2 |Canada
6 | 2 | 2 |Mexico
7 | 3 | 2 |Italy
8 | 3 | 2 |France
FactSales
ID IDDimRegion IDDimDate Sales
1 | 7 | 20150101 | 20
2 | 7 | 20150201 | 30
3 | 7 | 20150301 | 40
4 | 4 | 20150101 | 50
5 | 4 | 20150201 | 30
6 | 4 | 20150301 | 40
7 | 5 | 20150101 | 60
8 | 5 | 20150201 | 30
9 | 5 | 20150301 | 60
10| 8 | 20150101 | 10
11| 8 | 20150201 | 10
12 8 | 20150301 | 10
等...
Fact表中的所有值仅连接到DimRegion表中第2级的值。
我在SSAS中使用:
创建了多维数据集 [Sales Cube]我进行了计算 [测量]。[AVG进入更高区域] ,其中包含度量 [Sales SUM] 并将聚合 AVG 进行更高水平的地区。
CREATE
MEMBER CURRENTCUBE.[Measures].[AVG Into higher regions] AS
CoalesceEmpty
(
Avg
(
Descendants
(
[DimRegion].[IDParent].Children,
,LEAVES
)
,[Measures].[Sales SUM]
)
,[Measures].[Sales SUM]
)
,VISIBLE = 1 ;
但是当我在MDX查询中使用维度日期和IDDimDate成员的计算时,它非常慢,所以我不知道计算或此MDX查询中是否存在错误,因为它太慢了。 / p>
SELECT
NON EMPTY { [Measures].[AVG Into higher regions] } ON COLUMNS,
NON EMPTY
{ (
DESCENDANTS([DimRegion].[IDParent].[Level 02].ALLMEMBERS) *
[DimDate].[IDDimDate].[IDDimDate].ALLMEMBERS ) } ON ROWS
FROM [Sales Cube]
在我的测试数据仓库中,我在事实表中有大约200行,并且在日期维度中预先生成了20年,它有7300行,所以它可能是由日期维度以某种方式引起的。但最终的事实表将有大约100万行,所以在如此少的行上这么慢是很糟糕的。
感谢您的帮助
答案 0 :(得分:0)
NULL
是olap
计算的朋友,在创建稀疏计算方面然后在块模式下运行 - 而不是逐个单元计算。
包含CoalesceEmpty
看起来像我一样永远不会遇到NULL - 所以这会很慢。
如果没有这个功能,你会得到错误的答案吗?
CREATE
MEMBER CURRENTCUBE.[Measures].[AVG Into higher regions] AS
Avg
(
Descendants
(
[DimRegion].[IDParent].Children,
,LEAVES
)
,[Measures].[Sales SUM]
)
,VISIBLE = 1 ;
答案 1 :(得分:0)
我认为您可以重新设计案例以利用OLAP和多维数据集。
Region -> Country
和自定义层次结构Country - Region
(请参阅AdventureWorks Customer Dim作为示例)。