【发布时间】:2016-08-25 19:45:23
【问题描述】:
我有这个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]:
- 父/子维度DimRegion
- 维度DimDate
- 使用 SUM 聚合的度量 [Sales SUM]
我进行了计算 [Measures].[AVG Into Higher regions] 将度量 [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 查询中是否有错误,因为它太慢了。
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]
在我的 tes 数据仓库中,我在事实表中有大约 200 行,并且在 Date 维度中预先生成了 20 年,它是 7300 行,所以它可能是由 Date 维度引起的。但是最终的事实表将有大约 100 万行,所以在这么少的行上它这么慢是很糟糕的。
感谢您的帮助
【问题讨论】:
-
CoalesceEmpty的意义何在?如果您将其排除在衡量标准之外,该衡量标准仍然有效吗? -
我在那里有 CoalesceEmpty,因为父/子层次结构中的最低值有 (null) 没有它,所以这使得 (null) 值被替换为 Sales SUM 度量中的值
标签: performance ssas mdx