MDX:如何将具有多个成员的元组转换为具有单个成员的元组?

Posted

技术标签:

【中文标题】MDX:如何将具有多个成员的元组转换为具有单个成员的元组?【英文标题】:MDX: How to turn tuples with multiple members into tuples with a single member? 【发布时间】:2010-01-11 00:38:27 【问题描述】:

我有这个 MDX 查询(基于 Foodmart 示例数据库):

SELECT
[Measures].[Profit] ON COLUMNS,
CROSSJOIN([Product].[All Products].Children, [Time].[1997].Children) ON ROWS
FROM [Sales]

这会产生如下结果:

[Product].[Product Family] [Time].[Year] [Time].[Quarter] [Measures].[Profit]
--------------------------+-------------+----------------+-------------------
Drink                     |1997         |Q3              |7203.3445
Drink                     |1997         |Q4              |8005.2245
Food                      |1997         |Q1              |60814.47140000001
Food                      |1997         |Q2              |57323.3736

我想要的是这样的:

[Product Family],[Year],[Quarter] [Measures].[Profit]
---------------------------------+-------------------
Drink, 1997, Q3                  |7203.3445
Drink, 1997, Q4                  |8005.2245
Food, 1997, Q1                   |60814.47140000001
Food, 1997, Q2                   |57323.3736

我知道我可以使用SetToStr() 将行标题序列化为一个字符串。所以现在我想将该结果用作行标题:基本上将每个元组从 ROW 轴上的原始多成员元组转换为只有一个成员的元组,其值是原始成员名称的串联。所以基本上是这样的:

SELECT
[Measures].[Profit] ON COLUMNS,
SetToStr(
    CROSSJOIN([Product].[All Products].Children, [Time].[1997].Children)
) ON ROWS
FROM [Sales]

...但这当然行不通,因为SetToStr() 返回的是字符串,而不是集合。所以我需要一些方法将这个字符串“转换”回一个集合,但只有一个成员。

这在标准 MDX 中是否可行?如何?我可以在收到结果集后对其进行返工,但我确实可以使用纯 MDX 解决方案来解决这个问题。

【问题讨论】:

【参考方案1】:
WITH MEMBER [Measures].[name] 
AS [Product].currentMember.Name || ',' || [Time].CurrentMember.Name
SELECT  [Measures].[name] , [Measures].[Sales] ON COLUMNS
,      ([Product].Children * [Time].Children)    ON ROWS
FROM   [SteelWheelsSales]

【讨论】:

以上是关于MDX:如何将具有多个成员的元组转换为具有单个成员的元组?的主要内容,如果未能解决你的问题,请参考以下文章

MDX 计算成员不允许多个层次结构元组

如何从Combiner/Reducer/Aggregator 函数返回具有多个字段的元组?

MDX 查询 - 如何使用成员属性?

将列表转换为Elm中的元组

元祖-tuple

如何将具有重复属性的元组组合成一个元组?