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