2

我有这个 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 解决方案来解决这个问题。

4

1 回答 1

4
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]
于 2010-01-11T16:09:47.643 回答