0

为了让您了解问题的背景,某些“用户”执行某些“任务”,这些“任务”分为各种类型;一种这样的类型是“DSR”。我面临的要求是找出用户 ID 033343 在 2013 年每个月处理了多少 DSR 类型的请求。
我需要的是获取set用户所有不同请求中的成员数(用户 ID = 033343)在 2013 年工作,请求类型 = DSR。以下是我最初尝试的:

WITH SET requests AS
EXISTING [Request].[RequestID].MEMBERS

MEMBER Measures.[Count033343] AS
DISTINCTCOUNT(requests)

SELECT Measures.[Count033343] ON 1,
[Calendar].[CalendarMonthName].CHILDREN ON 0 /*Values like January, February, etc. Not tied to Calendar Years*/
FROM [Model]
WHERE(
                 [User].[UserID].&[033343],
                 [Request Type].[Request Type Name].&[DSR],
                 [Calendar].[CalendarYear].&[2013]

      )

但这没有用。我得到了以下结果。

where 子句中的元组

我想,我正在构建的场景存在问题。

然后我将 MDX 移动到 Set 定义。WHERE我认为与在子句中有一组额外的元组相比,它可能会使代码工作得更快。

WITH SET requests AS
EXISTS([Request].[RequestID].MEMBERS, (
                     [User].[UserID].&[033343],
                     [Request Type].[Request Type Name].&[DSR],
                     [Calendar].[CalendarYear].&[2013]
      ))

MEMBER Measures.[Count033343] AS
DISTINCTCOUNT(requests)

SELECT Measures.[Count033343] ON 1,
[Calendar].[CalendarMonthName].MEMBERS ON 0
FROM [Model]

但我仍然得到与上述相同的结果 -所有月份的计数均为 0!

然后,我想检查我正在构建的集合本身(在第二个示例中)

WITH SET requests AS
EXISTS([Request].[RequestId].MEMBERS, (
                     [User].[UserID].&[033343],
                     [Request Type].[Request Type Name].&[DSR],
                     [Calendar].[CalendarYear].&[2013]
      ))

SELECT [Measures].[Average of Late Tasks] ON 1,
requests ON 0
FROM [Model]

在此处输入图像描述

这证明了两件事。

1) 该集合返回 NULL 值和非空值。

2)确实有从集合返回的Request Id。因此,对于指定的元组,Requests 的计数肯定大于 0。

我可以使用该NON EMPTY子句来删除 NON NULL 值,但是我不想使用它,因为我读到它会增加开销。

正如我在上面验证的那样,在 2013 年的所有月份中确实存在对各种用户的请求,为什么我的计数为 0?我哪里错了?为什么and功能没有按预期工作?集合不应该只返回条件存在的那些请求 ID吗?我的理解错了吗?EXISTSEXISTING

编辑

对于@whytheq - 在您的最终查询中,我得到了非零值

WITH MEMBER Measures.[x] AS
   Count(
     NONEMPTY(
       [Request].[RequestId].MEMBERS
       , {([Measures].[Average of Late Tasks])}
     )      
   )
SELECT 
   Measures.[x] ON 0,
   [Calendar].[CalendarYear].&[2013] ON 1 
FROM [Model]

输出

       x
2013   2
4

1 回答 1

0

(未测试)这仍然返回零吗?

WITH SET [requests] AS
  {([User].[UserID].&[033343],
  [Request Type].[Request Type Name].&[DSR])}
  * {[Measures].[Average of Late Tasks]}  //<<<<try running with and without this line
  * [Request].[RequestID].MEMBERS
MEMBER Measures.[Count033343] AS
  DISTINCTCOUNT(requests)
SELECT 
  [Calendar].[CalendarMonthName].CHILDREN ON 0,
  Measures.[Count033343] ON 1 
FROM [Model]
WHERE(
      [Calendar].[CalendarYear].&[2013]
      ) 

下面的呢?

WITH 
  MEMBER Measures.[Count033343] AS
    DISTINCTCOUNT({[Request].[RequestID].[RequestID]})
SELECT 
  [Calendar].[CalendarMonthName].CHILDREN ON 0,
  Measures.[Count033343] ON 1 
FROM [Model]
WHERE(
      [Calendar].[CalendarYear].&[2013],
      [User].[UserID].&[033343],
      [Request Type].[Request Type Name].&[DSR]
      ) 

也许首先尝试这个更简单的查询,并且(如果它有效!)我们可以从这个开始尝试定位问题......

WITH MEMBER Measures.[x] AS
   Count(
     NONEMPTY(
       [Request].[RequestId].MEMBERS
       , {([Measures].[Average of Late Tasks])}
     )      
   )
SELECT 
   Measures.[x] ON 0,
   [Calendar].[CalendarYear].&[2013] ON 1 
FROM [Model]
于 2014-10-23T13:05:02.877 回答