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:如何将具有多个成员的元组转换为具有单个成员的元组?的主要内容,如果未能解决你的问题,请参考以下文章