1

假设我有一个带有销售事实表和 3 个维度的多维数据集:时间(具有层次结构年-月-日)、地理(具有层次结构大陆-国家-地区)和产品,其中包含所售产品的一些特征,让我们以品牌为例例如。

我要做的是显示与所选度量相关的前 N ​​个品牌,在这种情况下,每个地区和每个月的平均销售额(已经在立方体中作为总销售额/售出的产品数量)。

为了清楚起见,我还需要显示国家和年份。

我到处寻找解决方案,我接近但不完全。我希望有人能帮我弄清楚。

所以我在下面的查询中使用了 generate 和 topcount,但问题是 topcount 计算的是整个数据集上的 N 个最畅销品牌,而不是针对每个地区和月份子组。然后将这个前 N 个应用到每个子组。

WITH SET [Top N Brands] AS
    Generate([Geography].[Region].Children,
    TopCount(Geography].[Region].CurrentMember * [Gpu Product].[Brand].[Brand].MEMBERS,
            5, ([Measures].[averageSales])))
SELECT {[Measures].[averageSales]} ON COLUMNS,
    NON EMPTY ( [Time].[Year].[Year],
                [Time].[Month].[Month],
                [Geography].[Country].[Country],
                [Top N Brands])  ON ROWS
FROM [Cube]

所以我得到了这个,全球前 5 大品牌分布在各个地区,如果在那里销售:

错误的结果

但我应该为每个地区获得不同的前 5 名:

结果我应该得到

我错过了什么?

4

1 回答 1

1

您需要使用排名。看看下面的例子。我正在使用示例 Adventure Works Db,在这里我列出了每个国家/地区的每个产品类别,根据互联网销售量排名前三个子类别。

WITH 
MEMBER [Measures].[Internet Sales Amount Rank] AS
RANK( ([Customer].[Country].currentmember,[Product].[Category].currentmember,[Product].[Subcategory].CurrentMember),
ORDER( ([Customer].[Country].currentmember,[Product].[Category].currentmember,[Product].[Subcategory].[Subcategory].Members) , [Measures].[Internet Sales Amount], BDESC)
) 

select 
non empty 
([Measures].[Internet Sales Amount])
on columns
,
non empty
([Customer].[Country].[Country],
[Product].[Category].[Category],
filter([Product].[Subcategory].[Subcategory],[Measures].[Internet Sales Amount Rank]<4))

on rows 
from [Adventure Works]

结果

在此处输入图像描述

于 2020-12-18T10:12:16.003 回答