0

所以,我还是 MDX 的新手(我来自 mssql),但是这个项目需要我与 MDX 数据库对话。因此,我继承了一个查询,如下所示:

SELECT NON EMPTY
{
    [Measures].[Time Spent]
} ON COLUMNS, 
NON EMPTY
{
    [Consultant].[Account Name].[Account Full Name].ALLMEMBERS * 
    [Consultant].[Activity Full Name].[Activity Full Name].ALLMEMBERS * 
    [Consultant].[Description].[Description].ALLMEMBERS * 
    [Consultant].[Engineer Full Name].[Engineer Full Name].ALLMEMBERS
} DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS FROM  
( 
    SELECT 
    ( [Date].[Date].&[2013-09-03T00:00:00] : [Date].[Date].&[2013-10-19T00:00:00] ) ON COLUMNS,
    (
        [Consultant].[Engineer Full Name].&[PERSON], 
        [Consultant].[Account Full Name].&[ACCOUNT],
    ) ON ROWS
FROM [Data]
) CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS;

显然,日期、PERSON 和 ACCOUNT 实际上是从系统更高层传入的参数,但希望你明白这一点。

此查询正在运行(感谢回答了之前的 SO 问题 - 谢谢!) - 我得到了数据,这就是我想要的数据。但是,我刚刚收到一个能够从多个帐户返回结果的请求。我真的很希望能够修改该查询以说明帐户全名是 [ACCOUNT] 或 [OTHER ACCOUNT] 或 [DIFFERENT OTHER ACCOUNT],但只是附加查询似乎被视为 AND?有什么方法可以对这些值执行 OR 或 IN 吗?(即工程师过滤的子查询为一值,账号名为一数。)

我意识到就我的时间而言,更简单的方法是只运行上述查询 n 次并将结果集连接在一起,但我认为这也是一种丑陋的方式。

谢谢!

4

1 回答 1

1

我不知道 CrossJoin 功能是否适用于您的情况(不是您需要实现的目标),但您可以尝试一下CROSSJOIN

您的子选择可能会像这样编辑:

...
SELECT 
    ( [Date].[Date].&[2013-09-03T00:00:00] : [Date].[Date].&[2013-10-19T00:00:00] ) ON COLUMNS,
    {[Consultant].[Engineer Full Name].&[PERSON]} *
    {[Consultant].[Account Full Name].&[ACCOUNT], 
     [Consultant].[Account Full Name].&[OTHER ACCOUNT] , 
     [Consultant].[Account Full Name].&[DIFFERENT OTHER ACCOUNT]} ON ROWS
...
于 2013-10-10T08:33:26.867 回答