我正在尝试制作一个 MDX 查询来回答以下形式的问题:
显示 2008 年的所有记录,除了 11 月的记录,除非它们发生在 11 月 17 日。
查询必须概括为使用三个以上的子句,并且不应该是特定日期的。(我要求使用日期作为示例,因为它很容易理解 - 我有兴趣将我的 MDX 推广到不同的层次结构。
这是迄今为止我得到的最接近的:
SELECT
NON EMPTY { [Measures].[Session Count] } ON COLUMNS,
NON EMPTY { ([SessionIDs].[Session ID].Children) } ON ROWS
FROM (
SELECT
Union(
Descendants([Start Date].[Date].Year.[2008], , LEAVES),
Descendants([Start Date].[Date].[Date].&[20081117], , LEAVES)
)
-
Descendants([Start Date].[Date].[Month].&[2008]&[11], , LEAVES)
ON COLUMNS
FROM [ADM]
) ;
问题是次要包含(2008 年 11 月 17 日)被排除消除了。我尝试在第一个联合中维护重复项,但是排除(减号运算符)会消除所有匹配的成员副本。
编辑:
这是另一个示例,可帮助您理解我要求“可概括”解决方案时的意思。
考虑一个地图应用程序,用户可以在其中选择查看他们选择的地理区域中的数据。他们通过放大和缩小地图以及选择/取消选择四键来选择这些区域。Quadkeys 巧妙地映射到一个层次结构,该层次结构通常在 18 到 23 层之间。
一个有效的用例将是:
- 选择QK0
- 取消选择 QK002
- 选择QK0021230
- 取消选择 QK002123033201 和 QK002123033202
用文字(并完全虚构映射到这些四键的地名),这将类似于:显示北美的所有数据,但不显示美国的数据,除非该数据是针对纽约州的,而不是在奥尔巴尼或格伦斯瀑布。
因此,上面适用于日期的相同查询结构必须适用于映射或任何其他分层集。还值得注意的是,我正在动态构建此 MDX 以响应用户操作。