我正在开发一个使用表格数据库来显示一些业务数据的应用程序。
我需要对度量值(等于、大于、小于等)提供一些基本过滤,我目前正在分析生成 MDX 的正确方法。
查看一些文档(以及该站点上的其他线程),我发现最有效的方法是使用FILTER或HAVING函数来过滤掉不需要的值。
不幸的是,所有示例通常都包括一个轴上的度量和另一个轴上的维度成员,但我可能在两个轴上都有维度成员,并且找不到使用此类函数按度量值过滤的适当解决方案。
到目前为止我做了什么?
为了更容易解释,假设我们要按产品类别过滤数量 > 130 万获取年销售量
尝试使用 HAVING 或 FILTER 函数,我想出的结果 MDX 是
SELECT
NON EMPTY {[YearList].[Year].[Year].MEMBERS * [Measures].[Qty]}
HAVING [Measures].[Qty] > 1.3e6 ON COLUMNS,
NON EMPTY {[Classes].[cClass].[cClass].MEMBERS}
HAVING [Measures].[Qty] > 1.3e6 ON ROWS
FROM [Model]
或者
SELECT
NON EMPTY FILTER({[YearList].[Year].[Year].MEMBERS * [Measures].[Qty]},
[Measures].[Qty] > 1.3e6) ON COLUMNS,
NON EMPTY FILTER({[Classes].[cClass].[cClass].MEMBERS} ,
[Measures].[Qty] > 1.3e6) ON ROWS
FROM [Model]
但这当然会给最终用户带来意想不到的结果,因为过滤器仅发生在该轴上维度的数量聚合上,该维度大于 1.3M
到目前为止,我发现实现所需的唯一方法是使用IIF语句定义自定义成员
WITH
MEMBER [Measures].[FilteredQty] AS
IIF ( [Measures].[Qty] > 1.3e6, [Measures].[Qty], NULL)
SELECT
NON EMPTY {[YearList].[Year].[Year].MEMBERS * [Measures].[FilteredQty]} ON COLUMNS,
NON EMPTY {[Classes].[cClass].[cClass].MEMBERS} ON ROWS
FROM [Model]
结果是预期的:
这是最好的方法还是我应该继续使用 FILTER 和 HAVING 功能?我仍然缺少更好的方法吗?谢谢