Ssas 等效于mdx中的最大分组比

Ssas 等效于mdx中的最大分组比,ssas,mdx,Ssas,Mdx,如何获得每个产品组和品牌交叉连接的最后一个产品的销售额?我查看了Tail函数,但无法使其正常工作 这是迄今为止我拥有的MDX: SELECT {[Measures].[Sales Amount]} ON COLUMNS, { [Dim Brands].[Brand Name].[Brand Name].ALLMEMBERS * [Dim Product Groups].[Product Group Name].[Product Group Name].ALLMEMBERS *

如何获得每个产品组和品牌交叉连接的最后一个产品的销售额?我查看了Tail函数,但无法使其正常工作

这是迄今为止我拥有的MDX:

SELECT {[Measures].[Sales Amount]} ON COLUMNS,
{
    [Dim Brands].[Brand Name].[Brand Name].ALLMEMBERS *
    [Dim Product Groups].[Product Group Name].[Product Group Name].ALLMEMBERS *
    Tail ([Dim Products].[Product Name].[Product Name].ALLMEMBERS)
}

它只返回整个多维数据集的最后一个产品,而不是每个品牌和产品组的最后一个产品。

您可以使用
GENERATE
函数为每个组合或品牌和产品组生成产品。现有的负责范围

WITH SET LastProductForEachBrandAndProductGroup AS

    GENERATE

    (
       EXISTING
        NonEmpty
        (
            [Dim Brands].[Brand Name].[Brand Name].ALLMEMBERS, [Dim Product Groups].[Product Group Name].[Product Group Name].ALLMEMBERS
        )

    ,

    Tail (
            [Dim Products].[Product Name].[Product Name].ALLMEMBERS
         )

    )


SELECT {[Measures].[Sales Amount]} ON COLUMNS,
NonEmpty({
    [Dim Brands].[Brand Name].[Brand Name].ALLMEMBERS *
    [Dim Product Groups].[Product Group Name].[Product Group Name].ALLMEMBERS *
    LastProductForEachBrandAndProductGroup
}) ON ROWS
FROM YourCube

如果“按最后一个”表示任何已排序(按某种度量)列表中的最后一个成员,则上述内容将需要更多的工作。让我知道它是如何为您工作的。

您可以使用
生成
功能为每个组合、品牌和产品组生成产品。现有的负责范围

WITH SET LastProductForEachBrandAndProductGroup AS

    GENERATE

    (
       EXISTING
        NonEmpty
        (
            [Dim Brands].[Brand Name].[Brand Name].ALLMEMBERS, [Dim Product Groups].[Product Group Name].[Product Group Name].ALLMEMBERS
        )

    ,

    Tail (
            [Dim Products].[Product Name].[Product Name].ALLMEMBERS
         )

    )


SELECT {[Measures].[Sales Amount]} ON COLUMNS,
NonEmpty({
    [Dim Brands].[Brand Name].[Brand Name].ALLMEMBERS *
    [Dim Product Groups].[Product Group Name].[Product Group Name].ALLMEMBERS *
    LastProductForEachBrandAndProductGroup
}) ON ROWS
FROM YourCube

如果“按最后一个”表示任何已排序(按某种度量)列表中的最后一个成员,则上述内容将需要更多的工作。让我知道它是如何为您工作的。

分离集合应该会加快此脚本的速度。例如:

WITH 
  SET [allBrands] AS 
    [Dim Brands].[Brand Name].[Brand Name].ALLMEMBERS 
  SET [allGroups] AS 
    [Dim Product Groups].[Product Group Name].[Product Group Name].ALLMEMBERS 
  SET [A] AS 
    Generate
    (
      {[allBrands] * [allGroups]} AS s
     ,
        s.Current
      * 
        Tail
        (
          NonEmpty
          (
            [Dim Products].[Product Name].[Product Name].ALLMEMBERS
           ,[Measures].[Sales Amount]
          )
         ,1
        )
    ) 
SELECT 
  NON EMPTY 
    {[Measures].[Sales Amount]} ON 0
 ,NON EMPTY 
    [A] ON 1
FROM [YourCube];
与微软的AdvWrks相比,上面类似的,也许更有用的变体是使用
TopCount
,而不是稍微艺术化的
Tail

WITH 
  SET [allYears] AS 
    [Date].[Calendar].[Calendar Year].MEMBERS 
  SET [allCountries] AS 
    [Customer].[Customer Geography].[Country].MEMBERS 
  SET [A] AS 
    Generate
    (
    {[allYears] * [allCountries]} AS s
     ,
        s.Current
      * 
        TopCount
        (
          [Product].[Product Categories].[Product].ALLMEMBERS
         ,2
         ,[Measures].[Internet Sales Amount]
        )
    ) 
SELECT 
  {[Measures].[Internet Sales Amount]} ON 0
 ,[A] ON 1
FROM [Adventure Works];
其结果如下:

WITH 
  SET [allBrands] AS 
    [Dim Brands].[Brand Name].[Brand Name].ALLMEMBERS 
  SET [allGroups] AS 
    [Dim Product Groups].[Product Group Name].[Product Group Name].ALLMEMBERS 
  SET [A] AS 
    Generate
    (
      {[allBrands] * [allGroups]} AS s
     ,
        s.Current
      * 
        Tail
        (
          NonEmpty
          (
            [Dim Products].[Product Name].[Product Name].ALLMEMBERS
           ,[Measures].[Sales Amount]
          )
         ,1
        )
    ) 
SELECT 
  NON EMPTY 
    {[Measures].[Sales Amount]} ON 0
 ,NON EMPTY 
    [A] ON 1
FROM [YourCube];

将集合分开应该可以加快脚本的速度。例如:

WITH 
  SET [allBrands] AS 
    [Dim Brands].[Brand Name].[Brand Name].ALLMEMBERS 
  SET [allGroups] AS 
    [Dim Product Groups].[Product Group Name].[Product Group Name].ALLMEMBERS 
  SET [A] AS 
    Generate
    (
      {[allBrands] * [allGroups]} AS s
     ,
        s.Current
      * 
        Tail
        (
          NonEmpty
          (
            [Dim Products].[Product Name].[Product Name].ALLMEMBERS
           ,[Measures].[Sales Amount]
          )
         ,1
        )
    ) 
SELECT 
  NON EMPTY 
    {[Measures].[Sales Amount]} ON 0
 ,NON EMPTY 
    [A] ON 1
FROM [YourCube];
与微软的AdvWrks相比,上面类似的,也许更有用的变体是使用
TopCount
,而不是稍微艺术化的
Tail

WITH 
  SET [allYears] AS 
    [Date].[Calendar].[Calendar Year].MEMBERS 
  SET [allCountries] AS 
    [Customer].[Customer Geography].[Country].MEMBERS 
  SET [A] AS 
    Generate
    (
    {[allYears] * [allCountries]} AS s
     ,
        s.Current
      * 
        TopCount
        (
          [Product].[Product Categories].[Product].ALLMEMBERS
         ,2
         ,[Measures].[Internet Sales Amount]
        )
    ) 
SELECT 
  {[Measures].[Internet Sales Amount]} ON 0
 ,[A] ON 1
FROM [Adventure Works];
其结果如下:

WITH 
  SET [allBrands] AS 
    [Dim Brands].[Brand Name].[Brand Name].ALLMEMBERS 
  SET [allGroups] AS 
    [Dim Product Groups].[Product Group Name].[Product Group Name].ALLMEMBERS 
  SET [A] AS 
    Generate
    (
      {[allBrands] * [allGroups]} AS s
     ,
        s.Current
      * 
        Tail
        (
          NonEmpty
          (
            [Dim Products].[Product Name].[Product Name].ALLMEMBERS
           ,[Measures].[Sales Amount]
          )
         ,1
        )
    ) 
SELECT 
  NON EMPTY 
    {[Measures].[Sales Amount]} ON 0
 ,NON EMPTY 
    [A] ON 1
FROM [YourCube];

您想要每个
[产品组名称]
的最后一个
[产品名称]
?或者,您只需要针对每个
[产品组名称]
[产品名称]
的最后一个成员吗?对于每个
[产品组名称]
的最后一个[产品名称],您想要每个
[产品组名称]
的最后一个
[产品名称]?或者您只想在每个
[Product Group Name]
中找到
[Product Name]
的最后一个成员吗?每个[Product Group Name]的最后一个[Product Name]是有意义的,我很快会尝试一下,让您知道结果如何谢谢查询需要很长时间才能完成,我将研究如何改进它的性能,如果它有效,我将把它标记为答案感谢通过添加
非空
编辑我的答案。请检查它现在是否更快。请同时尝试在行上非空。第二个选项,实际上我可能还需要更多维度,这些维度没有定义任何层次结构,因此我肯定会先这样做,因为这会加快其他所有维度的速度。感谢您的帮助这很有意义我会很快试一试并让您知道它是如何运行的谢谢查询需要很长时间才能完成,我会看看如何改进它的性能,如果它有效,我会将此标记为答案谢谢通过添加
非空
编辑我的答案。请检查它现在是否更快。请同时尝试在行上非空。第二个选项,实际上我可能还需要更多维度,这些维度没有定义任何层次结构,因此我肯定会先这样做,因为这会加快其他所有维度的速度。谢谢你的帮助