我有这个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()
将行标题序列化为一个字符串。所以现在我想将该结果用作rowheader:基本上将每个元组从ROW轴上的原始多成员元组转换为只有一个成员的元组,其值是原始成员名称的串联。基本上就是这样:
SELECT
{[Measures].[Profit]} ON COLUMNS,
SetToStr(
{CROSSJOIN([Product].[All Products].Children, [Time].[1997].Children)}
) ON ROWS
FROM [Sales]
...但当然这不起作用,因为SetToStr()
返回一个字符串,而不是一个集合。所以我需要一些方法将这个字符串“强制转换”回一个集合,但只有一个成员。
这在标准MDX中是否可行?怎么样?我可以在收到结果集后重新编写结果集,但我真的可以使用纯MDX解决方案来解决这个问题。
答案 0 :(得分: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]