如何在 MDX 中对同一维度进行分组和过滤

Posted

技术标签:

【中文标题】如何在 MDX 中对同一维度进行分组和过滤【英文标题】:How to groupby and filter on the same dimension in MDX 【发布时间】:2012-10-01 21:07:02 【问题描述】:

我想创建一个条形图,其中包含每个月的条形图和一些度量值。

但我也想过滤可能不完全重叠的日期范围。

当这种情况发生时,我希望该月的总计数仅在我的日期范围内的天数上进行汇总,而不是整个月的汇总。

这对 MDX 是否可行?如果是这样,请求应该是什么样子?

【问题讨论】:

目前 mondrian jira.pentaho.com/browse/MONDRIAN-980 不支持 MDX 子查询/子选择 【参考方案1】:

使用原始维度的虚拟维度创建第二个时间维度。在 WHERE 中使用一个维度,在 SELECT 中使用另一个维度。

如果有些人想要季度和期间的“营业时间”,而其他人更喜欢几个月,这通常会发生。或者,如果您的财政年度为 4 月至 4 月。

【讨论】:

谢谢,这看起来不太干净,但它在 ROLAP 引擎上运行良好【参考方案2】:

您可以使用子选择。你可以找到更多关于这个page和这个page的信息:

当在轴子句中指定一个成员时,该成员与 它的祖先和后代包含在子立方体空间中 子选择;所有未提及的兄弟成员,在轴或 slicer 子句及其后代从子空间中过滤出来。 这样,外部选择的空间就被限制在 轴子句或切片器子句中的现有成员,以及它们的 如前所述。

这是一个例子:

SELECT  [Customer].[Customer Geography].[Country].&[Australia]
       , [Customer].[Customer Geography].[Country].&[United States]
        ON 1
     ,  [Measures].[Internet Sales Amount], [Measures].[Reseller Sales Amount] ON 0
  FROM ( SELECT [Customer].[Customer Geography].[Country].&[Australia]
                 , [Customer].[State-Province].&[WA]&[US] ON 0
           FROM [Adventure Works]
        )

结果将包含Autralia 的一行和United States 的另一行。通过子选择,我将United Stated 的值限制为Washington 状态。

【讨论】:

不幸的是我正在使用蒙德里安,它不支持子查询:(【参考方案3】:

我发现使用 Mondrian 的一种方法如下

WITH MEMBER [Measures].[Units Shipped2] AS
SUM
(
 
  exists([Store].[Store Country].currentmember.children,[Store].[USA].[WA],[Store].[USA].[OR])
 ,[Measures].[Units Shipped]
)
MEMBER [Measures].[Warehouse Sales2] AS
SUM
(
 
  exists([Store].[Store Country].currentmember.children,[Store].[USA].[WA],[Store].[USA].[OR])
 ,[Measures].[Warehouse Sales]
)
SELECT 
[Measures].[Units Shipped2],[Measures].[Warehouse Sales2] ON 0,
NON EMPTY [Store].[Store Country].Members on 1
FROM [Warehouse]

我不确定过滤是否会像下面这样在 SQL 中完成并提供良好的性能或在本地运行

select Country, sum(unit_shipped)
where state in ('WA','OR' )
group by Country 

【讨论】:

以上是关于如何在 MDX 中对同一维度进行分组和过滤的主要内容,如果未能解决你的问题,请参考以下文章

MDX 查询以对具有特定日期范围的日期维度进行分组

mondrian mdx 过滤日期维度中年份级别的集合

如何编写按日期范围和维度成员值进行切片的 mdx 查询

如何在 React 中对给定的数据进行排序和过滤?

如何在 Odoo 8 的 fom 视图中对树/列表视图进行分组?

如何构建仅考虑 2 月最后 10 天发生的事实的 MDX 查询?