MDX,每个产品和年度销售额最高的员工

时间:2018-01-26 12:31:14

标签: sql-server visual-studio mdx olap-cube mdx-query

我正在使用Visual Studi和Management Sql Server Studio学习MDX和OLAP。实际上我做了一个立方体“销售”

it is the measure and dimensions of the cube Sales

我试着得到“每个产品和年份销售额最高的员工”,我写了

With MEMBER measures.[Maximun Sales] AS 
 MAX(([Product].[ProductName].[ProductName],[Employee].[Geography].  [Employee]), [Measures].[Sales Amount])

 MEMBER measures.[EmpLoyee] AS TOPCOUNT(([Product].[ProductName].  [ProductName], [Employee].[Geography].[Employee]), 1, [Measures].[Sales    Amount]).ITEM(0).NAME

 SELECT { measures.[Maximun Sales], MEASUREs.[EmpLoyee]} ON COLUMNS,
 ([Product].[ProductName].[ProductName], [Order Date].[Calendar].[Year]) ON    ROWS
 FROM SALES

但是查询不起作用。拜托,有人可以帮助我吗?谢谢

1 个答案:

答案 0 :(得分:0)

这对初学者来说并不是最容易理解的。我在Adventure Works多维数据集中提供了一个示例。此查询按产品和年份的每个组合显示销售额的最高客户,这与您询问的内容类似,您可以希望对其进行调整。

SELECT
[Measures].[Internet Sales Amount] ON COLUMNS
,   NON EMPTY
    GENERATE
    (
        {
        [Product].[Product].[Product].MEMBERS
    *   [Date].[Calendar Year].[Calendar Year].MEMBERS
        }
    ,   (
        [Product].[Product].CURRENTMEMBER
    ,   [Date].[Calendar Year].CURRENTMEMBER
        )
    *   TOPCOUNT
        (
        [Customer].[Customer].[Customer].MEMBERS
    ,   1
    ,   [Measures].[Internet Sales Amount]
        )       
    )
ON ROWS
FROM
[Adventure Works]

如何运作

您认为TopCount功能会对您有所帮助。我们希望按产品/年度的销售额获得前1名客户。

因此,我们的Top Count功能通过销售获得了我们的前1名客户。我们如何将其应用于每个产品/年份?这是Generate功能有用的地方。这将在所有产品/年度组合中应用我们的前1客户功能。

您可以将Generate函数的工作方式视为:

1)获取Product / Year的每个组合

2)一次获得一个组合

3)对于每个组合,按销售额获得前1名客户

4)转到下一个组合

有关此问题的详细解释,请参阅here。我还建议阅读关于生成函数here