【问题标题】:MDX: How to turn tuples with multiple members into tuples with a single member?MDX:如何将具有多个成员的元组转换为具有单个成员的元组?
【发布时间】: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 解决方案来解决这个问题。

【问题讨论】:

    标签: olap mdx analysis


    【解决方案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]
    

    【讨论】:

      猜你喜欢
      • 2013-12-30
      • 1970-01-01
      • 1970-01-01
      • 2019-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多