我正在学习如何使用MDX(SQL Server 2012)查询来查询多维数据集。我遇到了挑战。我们有销售人员的层次结构,存储过程返回一个表,其中所有销售人员都在经理下工作。我有一个经典的销售多维数据集,其中FactSales PK是发票编号和发票行以及所有销售人员的维度。
如何过滤销售人员在表格中的发票?
这样的东西,但翻译成MDX:
从SalesPerson所在的销售中选择*(从#salespeople中选择SalesPerson)
我认为这种方法可行的唯一方法是动态编写查询并在过滤器中添加每个销售人员,但在我看来,这不是最优的,我们可以让200或400个人想要从中返回销售额。 / p>
谢谢!
答案 0 :(得分:1)
如果包含销售人员的维度包含层次结构(谁为谁工作),则可以在不使用存储过程的情况下解决质询。假设您的经理名为“John Doe”,您的销售人员层级名称为[Sales Person].[Sales Person]
。然后使用
[Sales Person].[Sales Person].[John Doe].Children
在您的查询中,如果您想查看直接为John工作的人员的销售情况,那么您就完成了。如果您想直接或间接地看到John本人和所有为他工作的人,您可以使用Descendants
函数,如下所示:
Descendants([Sales Person].[Sales Person].[John Doe], 0, SELF_AND_AFTER)
此功能有许多变体,记录为here。
在Microsoft示例Adventure Works多维数据集中,类似的层次结构称为[Employee].[Employees]
,您可以运行以下查询:
SELECT {
[Measures].[Reseller Sales Amount]
}
*
[Date].[Calendar].[Calendar Year].Members
ON COLUMNS,
Descendants([Employee].[Employees].[Jean E. Trenary], 0, SELF_AND_AFTER)
ON ROWS
FROM [Adventure Works]
了解直接或间接为“Jean E. Trenary”工作的员工的销售情况。