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()行ヘッダーを 1 つの文字列にシリアル化するために使用できることはわかっています。したがって、その結果を行ヘッダーとして使用したいと思います。基本的に、各タプルを ROW 軸の元の複数メンバーのタプルから 1 つのメンバーだけを持つタプルに変換します。値は元のメンバー名の連結です。だから基本的にこれ:

SELECT
{[Measures].[Profit]} ON COLUMNS,
SetToStr(
    {CROSSJOIN([Product].[All Products].Children, [Time].[1997].Children)}
) ON ROWS
FROM [Sales]

SetToStr()...しかし、セットではなく文字列を返すため、もちろんこれは機能しません。したがって、この文字列をセットに「キャスト」する方法が必要ですが、メンバーは 1 つだけです。

これは標準の 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 に答える