MDX-将行转置为列

时间:2019-02-13 12:24:10

标签: ssas mdx cross-join

我正在尝试使用MDX将详细信息从两行显示为一行。如果我在下面执行MDX,它将返回2行,其中一行包含998 Key,另一行包含999 Key

SELECT NON EMPTY { 
  [Measures].[FactTableCount] } ON COLUMNS, 
NON EMPTY { ([DimXXXX].[XXXXKey].[XXXXKey].ALLMEMBERS 
  * ([DimAAAA].[AAAAKey].[AAAAKey],{[DimBBBB].[Key].&[998],[DimBBBB].[Key].&[999]},[DimCCCC].[CCCCKey].[CCCCKey])
  ) } ON ROWS 
FROM ( SELECT ( { [DimXXXX].[XXXXKey].&[MyValue] } ) ON COLUMNS 
FROM [FactTable])

它返回类似这样的内容

    (columns [DimXXXX].[XXXXKey], [DimAAAA].[AAAAKey], [DimBBBB].[Key], [DimCCCC].[CCCCKey], [Measures].[FactTableCount])

MyValue, MyAAAAKey1, 998, MyCCCCKey1, 1

MyValue, MyAAAAKey2, 999, MyCCCCKey2, 1

但是我想像这样返回一行

`(columns [DimXXXX].[Key], [DimAAAA].[AAAAKey], [DimAAAA].[AAAAKey], [DimBBBB].[Key], [DimBBBB].[Key], [DimCCCC].[CCCCKey], [DimCCCC].[CCCCKey], [Measures].[FactTableCount])

MyValue, MyAAAAKey1, MyAAAAKey2, 998, 999, MyCCCCKey1, MyCCCCKey2, 1

我尝试过的其他事情(例如使用SET,将998/999逻辑放在行/列之后等)

SELECT NON EMPTY { 
  [Measures].[FactTableCount] } ON COLUMNS, 
NON EMPTY { ([DimXXXX].[XXXXKey].[XXXXKey].ALLMEMBERS 
  * ([DimAAAA].[AAAAKey].[Key],[DimBBBB].[Key].&[998],[DimCCCC].[CCCCKey].[CCCCKey])
  * ([DimAAAA].[AAAAKey].[Key],[DimBBBB].[Key].&[999],[DimCCCC].[CCCCKey].[CCCCKey])
  ) } ON ROWS 
FROM ( SELECT ( { [DimXXXX].[XXXXKey].&[MyValue] } ) ON COLUMNS 
FROM [FactTable])

...但是由于重复了AAAAKey层次结构,我收到错误消息“在Crossjoin函数中多次使用了AAAAKey层次结构”

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

根据您在下面的评论,我有一个示例。让我知道它是否有效。

  

我想我能明白您的意思,但是这些措施是一项   东西,但是维度值是另一​​个-比如说Record1:MyValue,   MyAAAAKey1、998,MyCCCCKey1、2和Record2:MyValue,MyAAAAKey2、999,   MyCCCCKey2,5-我想输出MyValue,MyAAAAKey1,   MyAAAAKey2、998、999,MyCCCCKey1,MyCCCCKey2、2、5

因此在下面的查询中,我试图模拟您的问题。

select
{[Measures].[Internet Sales Amount]}
on columns,
non empty
([Customer].[City].[City],{[Product].[Category].&[1],[Product].[Category].&[3]},[Product].[Subcategory].[Subcategory])
on rows 
from [Adventure Works]

结果 enter image description here

现在的方法是将更改后的值带到我的“ {[Product]。[Category]。&1,[Product]。[Category]。&2}”列中案例和您案例中的“ {[DimBBBB]。[Key]。&[998],[DimBBBB]。[Key]。&[999]}””

select
{
({[Product].[Category].&[1],[Product].[Category].&[3]},[Measures].[Internet Sales Amount]),
([Product].[Category].defaultmember,[Measures].[Internet Order Quantity])
}
on columns,
non empty
([Customer].[City].[City],[Product].[Subcategory].[Subcategory])
on rows 
from [Adventure Works]

结果: enter image description here

请注意如何仅对relevent列重复这些值。确实会增加一列,但您的行数现在已是原始计数的一半。

编辑:根据评论处理要求

  

网格的第一行是巴拉德,自行车,山地自行车,公路   自行车。第二名:巴拉德,服装,帽子,手套。第三名:巴斯托   自行车,公路自行车,为null。我想合并/列出实际尺寸   值

因此,要实现上述目标,我们有两个选择。但无论哪种情况,都需要对UI进行一些操作。 1)第一个选择

with member 
measures.t 
as (nonempty(existing([Customer].[City].currentmember,[Product].[Category].currentmember,[Product].[Subcategory].[Subcategory].members),[Measures].[Internet Sales Amount])).item(0).item(2).name

member measures.t1
as (nonempty(existing([Customer].[City].currentmember,[Product].[Category].currentmember,[Product].[Subcategory].[Subcategory].members),[Measures].[Internet Sales Amount])).item(1).item(2).name
select
{measures.t,measures.t1}
on columns,
nonempty(([Customer].[City].[City],{[Product].[Category].&[1],[Product].[Category].&[3]}),[Measures].[Internet Sales Amount])
on rows 
from [Adventure Works]

enter image description here

2)第二个选项

with member 
measures.t1
as 
[Customer].[City].currentmember.name

member measures.t2
as 
[Product].[Category].currentmember.name

member measures.t3 
as (nonempty(existing([Customer].[City].currentmember,[Product].[Category].currentmember,[Product].[Subcategory].[Subcategory].members),[Measures].[Internet Sales Amount])).item(0).item(2).name

member measures.t4
as (nonempty(existing([Customer].[City].currentmember,[Product].[Category].currentmember,[Product].[Subcategory].[Subcategory].members),[Measures].[Internet Sales Amount])).item(1).item(2).name

select
{measures.t1,measures.t2,measures.t3,measures.t4}
on columns,
nonempty(([Customer].[City].[City],{[Product].[Category].&[1],[Product].[Category].&[3]}),[Measures].[Internet Sales Amount])
on rows 
from [Adventure Works]

enter image description here