【问题标题】:MDX to get the value and use it on a hierarchyMDX 获取值并在层次结构中使用它
【发布时间】:2015-09-04 14:32:23
【问题描述】:

我有一个 MDX 脚本,我的目标是能够获取日期的值,它可以是一天、一周、一个月、一个季度或一年,然后在层次结构上使用它。

WITH 
  MEMBER measures.suma AS 
    Sum
    (
      [Date Local].[year-quarter-month-week-day].Children
     ,IIF
      (
            (
                  [Measures].[Agent Time Logged in hh:mm:ss]
                - 
                  [Measures].[Activity Time Break]
              - 
                [Measures].[Activity Time Meeting]
            - 
              [Measures].[Activity Time Training]
            )
          / 
            26400 / 86400
        > 1
       ,1
       ,
          (
                [Measures].[Agent Time Logged in hh:mm:ss]
              - 
                [Measures].[Activity Time Break]
            - 
              [Measures].[Activity Time Meeting]
          - 
            [Measures].[Activity Time Training]
          )
        / 
          26400 / 86400
      )
    ) 
SELECT 
  {
    measures.suma
   ,[Measures].[MyKeys]
   ,[Measures].[Agent Time Logged in hh:mm:ss]
   ,[Measures].[Activity Time Break]
   ,[Measures].[Activity Time Meeting]
   ,[Measures].[Activity Time Training]
   ,[Measures].[Activity time Lunch]
  } ON 0
 ,NON EMPTY 
    [Agent].[login fullname].[login fullname] ON 1
FROM [HP TRANSACTIONAL]
WHERE 
  [Date Local].[Month].&[2015-08 August];-- DOESNT WORK
--[Date Local].[year-quarter-month-week-day].[Week].&[2015 Week 35] --IT WORKS

正如您在我的MDX script 中看到的那样,我想汇总代理的所有活动,客户可以选择任何过滤器,每天、每周、每月、每季度或每年。
当然,他们可以使用我的层次结构“[Date Local].[Month].&[2015-08 August]”,但我的客户使用EXCEL 创建报告,他们可以使用日期维度的任何属性。

所以我的目标是找到一种方法向我的mdx 脚本表明,如果客户端选择任何属性,应该能够获取当前成员并使用层次结构进行计算。

【问题讨论】:

  • 我认为您需要更改Sum函数中的第一个参数:[Date Local].[year-quarter-month-week-day].Children
  • 我不能,因为我需要使用这个层次结构才能每天求和。这里的问题是客户端可以使用我的暗淡日期的任何属性作为过滤器,我需要找到一种方法将属性发送到层次结构,然后求和。
  • 我有一个简单的想法 - 但不确定它是否可行
  • 嗨@whytheq,它不起作用。我给你更多的例子: LoginName|DATE|FTE bastien|06/08/2015|0.9542 bastien|25/08/2015|1 FTE = iif.... 它应该是 1,9542... 如您所见只是我每个用户有两行。但如果我执行你的查询,我得到 6,954242..

标签: mdx


【解决方案1】:

也许只需尝试关键字Existing 尝试将上下文强制纳入您的度量suma

   WITH 
      MEMBER [measures].[suma] AS 
        Sum
        (
          EXISTING([Date Local].[year-quarter-month-week-day].MEMBERS)
         ,IIF
          (
                (
                      [Measures].[Agent Time Logged in hh:mm:ss]
                    - 
                      [Measures].[Activity Time Break]
                  - 
                    [Measures].[Activity Time Meeting]
                - 
                  [Measures].[Activity Time Training]
                )
              / 
                26400 / 86400
            > 1
           ,1
           ,
              (
                    [Measures].[Agent Time Logged in hh:mm:ss]
                  - 
                    [Measures].[Activity Time Break]
                - 
                  [Measures].[Activity Time Meeting]
              - 
                [Measures].[Activity Time Training]
              )
            / 
              26400 / 86400
          )
        ) 
    SELECT 
      {
        measures.suma
       ,[Measures].[MyKeys]
       ,[Measures].[Agent Time Logged in hh:mm:ss]
       ,[Measures].[Activity Time Break]
       ,[Measures].[Activity Time Meeting]
       ,[Measures].[Activity Time Training]
       ,[Measures].[Activity time Lunch]
      } ON 0
     ,NON EMPTY 
        [Agent].[login fullname].[login fullname] ON 1
    FROM [HP TRANSACTIONAL]
    WHERE 
      [Date Local].[Month].&[2015-08 August];-- DOESNT WORK
    --[Date Local].[year-quarter-month-week-day].[Week].&[2015 Week 35] --IT WORKS

【讨论】:

    【解决方案2】:

    我找到了解决办法!!

    WITH 
      MEMBER measures.suma AS 
        Sum
        (
          (EXISTING 
            [Date Local].[year-quarter-month-week-day].[Day name])
         ,IIF
          (
                (
                      [Measures].[Agent Time Logged in hh:mm:ss]
                    - 
                      [Measures].[Activity Time Break]
                  - 
                    [Measures].[Activity Time Meeting]
                - 
                  [Measures].[Activity Time Training]
                )
              / 
                26400 / 86400
            > 1
           ,1
           ,
              (
                    [Measures].[Agent Time Logged in hh:mm:ss]
                  - 
                    [Measures].[Activity Time Break]
                - 
                  [Measures].[Activity Time Meeting]
              - 
                [Measures].[Activity Time Training]
              )
            / 
              26400 / 86400
          )
        ) 
    SELECT 
      {
        measures.suma
       ,[Measures].[Agent Time Logged in hh:mm:ss]
       ,[Measures].[Activity Time Break]
       ,[Measures].[Activity Time Meeting]
       ,[Measures].[Activity Time Training]
       ,[Measures].[Activity time Lunch]
      } ON 0
     ,NON EMPTY 
        [Agent].[login fullname].[login fullname] ON 1
    FROM [HP TRANSACTIONAL]
    WHERE 
      [Date Local].[Date Standard].&[2015-08-24T00:00:00];
    --TEST
    --[Date Local].[Week].&[2015 Week 35]
    --[Date Local].[Month].&[2015-08 August] 
    --[Date Local].[year-quarter-month-week-day].[Week].&[2015 Week 35] 
    

    我希望这个解决方案可以对其他人有所帮助。 劳尔

    【讨论】:

    • 嗨 Raul - 如果没有我建议的关键字 EXISTING,您的解决方案是否有效??
    • 嗨@whytheq,我一直在用现有的脚本测试脚本,但没有尝试过。我应该把它取下来吗?
    • 我的意思是 if 脚本仅适用于包含 EXISTING 那么我回答了你的问题?
    • 嗨@whytheq 很抱歉回答得太晚了,但我测试了查询,没有 EXISTING 不起作用,EXISTING 100% 有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 2018-05-24
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多