我有一个事实表,其中2列对应于尺寸Dim1,Dim2。 在同一个表中,我有4个其他列Value_Type(int),INT_VALUE(int),FLOAT_VALUE(float),TEXT_VALUE(string)。 有许多度量由Value_Type标识,并且根据其性质可以写入3列中的一列(INT_VALUE(int),FLOAT_VALUE(float),TEXT_VALUE(string)) 假设Measure1与Measure_Type = 1是Measure1,2是帐户余额,3是名称,为清楚起见。 可能有其他度量类型将这3个相同的列用于数据。 所以示例事实表看起来像这样
Dim1 Dim2 Measure_Type INT_VALUE FLOAT_VALUE TEXT_VALUE
10 10 1 25
10 10 2 2000,34
10 10 3 John
10 20 1 28
10 20 2 3490,23
10 20 3 Frank
我的任务是为每个Dim1,Dim2组合编写MDX查询,该组合返回同一行中的所有3个度量。 我们的想法是为每个从右侧字段返回值的Measure构建一个计算成员。 例如,对于Measure1,我们采用带有measure_type = 1的INT_VALUE。 问题是我不知道如何为这些计算成员构造MDX查询。 你能帮我吗?
所以我的最终目标是编写一个MDX查询,为每组Dim1,Dim2返回一行中的所有度量
SELECT [Measure1], [Measure2], [Measure3] ON COLUMNS,
NON EMPTY [Dim1].[Dim1].[Dim1].Members*[Dim2].[Dim2].[Dim2].Members ON ROWS
FROM [Cube]
Dim1 Dim2 Measure1 Measure2 Measure3
10 10 25 2000,34 John
10 20 28 3490,23 Frank
答案 0 :(得分:1)
由于浮点数和整数可以相加,我认为Measure1
和Measure2
不需要特殊内容。假设您的示例表中的空字段是null
s,您甚至不需要measure_type
列来处理任何内容,因为对空值进行求和很好,i。即通过将不同度量类型的三个记录合并为一个,并省略null
值,可以将事实表折叠为其大小的三分之一。
因此,我们留下了字符串值的聚合。由于字符串不能用作物理度量,因此我们必须将此列放在属性中,并将聚合实现为计算度量。为此,您可以按以下步骤操作:
'<n/a>'
等特殊文本的记录。在Analysis Services中避免使用null属性值和null外键通常是个好主意。text
,我假设该属性名为text value
。在多维数据集编辑器中设置度量值组和维度之间的引用。Measure3
定义计算度量:
Generate( (EXISTING [text].[text value].[text value].members )
- { [text].[text value].[<n/a>] }
as a,
a.Current.Name,
', '
)
当然,您无需在物理表中物理创建维度表和外键。您也可以在数据源视图中将它们生成为视图或命名查询。
你可以使用与我使用的逗号和空格不同的分隔符,这是Generate
MDX function的第三个参数。