任何人都可以指导我使用MDX查询以下用SQL-92编写的查询
SELECT TOP 10
L_ORDERKEY,
SUM(L_EXTENDEDPRICE*(1-L_DISCOUNT)) AS REVENUE,
O_ORDERDATE, O_SHIPPRIORITY
FROM
CUSTOMER, ORDERS, LINEITEM
WHERE
C_MKTSEGMENT = 'BUILDING'
AND C_CUSTKEY = O_CUSTKEY
AND L_ORDERKEY = O_ORDERKEY
AND O_ORDERDATE < '1995-03-15'
AND L_SHIPDATE > '1995-03-15'
GROUP BY
L_ORDERKEY, O_ORDERDATE, O_SHIPPRIORITY
ORDER BY
REVENUE DESC, O_ORDERDATE
我在MDX中编写了以下查询,但这并没有根据Order_Date带来结果,我将与您分享我的MDX结果
SELECT {(
TopCount([TPCHQUERY3VIEW].[L ORDERKEY].members,
11, [Measures].[REVENUE]),
TopCount({null:[TPCHQUERY3VIEW 1].[O ORDERDATE].&[1995-03-15T00:00:00]},
11, [Measures].[REVENUE]),
[TPCHQUERY3VIEW 2].[O SHIPPRIORITY].&[0])}
ON ROWS, ORDER([Measures].[REVENUE], [Measures].[REVENUE], DESC) ON COLUMNS
FROM
[TPC-H 1]
WHERE(
[TPCHQUERY3VIEW 3].[C MKTSEGMENT].&[BUILDING],
{null:[TPCHQUERY3VIEW 1].[O ORDERDATE].&[1995-03-15T00:00:00]},
{[TPCHQUERY3VIEW 4].[L SHIPDATE].&[1995-03-15T00:00:00]:null}
)
答案 0 :(得分:0)
如果您可以使用稍微更改的结果列顺序,则应执行以下操作:
SELECT
{ [Measures].[REVENUE] }
ON COLUMNS,
TopCount((null : [TPCHQUERY3VIEW].[O ORDERDATE].&[1995-03-15T00:00:00].PrevMember)
*
[TPCHQUERY3VIEW].[L ORDERKEY].[L ORDERKEY].Members
*
[TPCHQUERY3VIEW].[O SHIPPRIORITY].[O SHIPPRIORITY].Members
,
10,
[Measures].[REVENUE]),
ON ROWS
FROM
[TPC-H]
WHERE
{ [TPCHQUERY3VIEW].[C MKTSEGMENT].&[BUILDING] }
*
([TPCHQUERY3VIEW].[L SHIPDATE].&[1995-03-15T00:00:00].NextMember : null)
由于我没有你的立方体,我不完全确定没有缺少括号等。我不确定为什么你似乎使用TPCHQUERY3VIEW
维度的不同实例。我认为没有必要这样做。但另一方面,您似乎不会为客户和订单使用不同的维度。无论如何,如果没有看到你构建的AS立方体结构,这很难讨论。
PrevMember
和NextMember
来匹配SQL逻辑的<
和>
逻辑,因为MDX使用(在我看来对最终用户来说更自然) <=
和>=
的包容性逻辑。此外,使用订单日期作为TopCount
中的第一个层次结构,这应该隐式地用作第二个排序列,因为在收入平局的情况下,将保留集合中元组的自然顺序( MDX sorting is stable)。