如何调整MDX查询筛选2021年前6个月的Top10高利润客户
调整MDX查询实现2021年上半年利润前10客户筛选
你的问题出在直接使用[OrderDate].[Month].[1]:[OrderDate].[Month].[6]——这个集合包含了所有年份的1-6月,而非仅2021年的,导致计算的是跨年度的累计利润,结果自然不对。要筛选2021年上半年,必须将月份范围限定在2021年的父成员下,以下是两种可靠的调整方案:
方案一:明确指定2021年下的1-6月成员
如果你的OrderDate维度中,月份是年份的子成员(层次结构为Year -> Month),可以直接列出2021年下的1到6月成员:
SELECT [measures].[Profit] ON 0, TopCount( [Customer.FullName].members, 10, [measures].[Profit] ) ON 1 FROM [bike_sales] WHERE ( {[OrderDate].[Year].[2021].[1], [OrderDate].[Year].[2021].[2], [OrderDate].[Year].[2021].[3], [OrderDate].[Year].[2021].[4], [OrderDate].[Year].[2021].[5], [OrderDate].[Year].[2021].[6]} )
方案二:使用Range函数动态选取2021年上半年月份
如果月份在2021年下是按顺序排列的子成员,可以用Range函数直接选取前6个月份,避免手动列成员:
SELECT [measures].[Profit] ON 0, TopCount( [Customer.FullName].members, 10, [measures].[Profit] ) ON 1 FROM [bike_sales] WHERE ( Range( [OrderDate].[Year].[2021].Children.Item(0), [OrderDate].[Year].[2021].Children.Item(5) ) )
补充说明
如果你的维度中月份成员带有年份标识(比如[OrderDate].[Month].[January 2021]),也可以直接用跨层次的范围引用,更直观:
SELECT [measures].[Profit] ON 0, TopCount( [Customer.FullName].members, 10, [measures].[Profit] ) ON 1 FROM [bike_sales] WHERE ( [OrderDate].[Month].[January 2021]:[OrderDate].[Month].[June 2021] )
以上三种方式都能确保仅计算2021年1-6月的利润,从而得到正确的前10客户排序。
内容的提问来源于stack exchange,提问作者M.M
相关产品推荐
相关产品推荐

