从olap MDX查询中选择数据

时间:2015-05-19 12:30:11

标签: ssas mdx olap olap-cube

请帮助了解MDX查询的工作原理。 我使用excel连接到多维数据集并构造一个mdx查询。总之,最后我需要得到这样的表:

                        12.01.2015
        +-------+-------+-------+-----+-------+------               
        | 00:00 | 01:00 | 02:00 | ... | 23:00 | TOTAL   
--------+-------+-------+-------+-----+-------+------
Ivan    | null  |   3   |  null | ... |   12  |  38
Pert    |   3   |   8   |  null | ... |  null | 125
Sidor   |

我们看到DateTime(小时),FIO(Ivan,Petr等)和值。 多维数据集具有维度:Dim DateDim HourDim Users 我试图从excel获取MDX查询,但我无法理解如何修改它以获得我需要的结果。这是请求(格式化):

SELECT NON EMPTY 
CrossJoin(
    Hierarchize(
        DrilldownMember(
        {
            {
                DrilldownMember(
                    {
                        {
                            DrilldownLevel
                                (
                                    {[Dim Date].[Даты YMD].[All]}
                                )
                        }
                    }, 
                    {[Dim Date].[Даты YMD].[Year Name].&[2015]}
                )
            }
        }, 
        {[Dim Date].[Даты YMD].[Year Name].&[2015].&[5]}
    )
), 
Hierarchize(
    {
        DrilldownLevel(
            {[Dim Hour].[Hour Key].[All]}
        )
    }
)) 
DIMENSION PROPERTIES PARENT_UNIQUE_NAME,
    [Dim Date].[Даты YMD].[Date Key].[Month Name],[Dim Date].[Даты YMD].[Date Key].[Year Name] ON COLUMNS , 
    NON EMPTY 
    Hierarchize(
        {
            DrilldownLevel(
                {[Dim Users].[FIO].[All]}
            )
        }
    ) 
DIMENSION PROPERTIES PARENT_UNIQUE_NAME ON ROWS  FROM 
(
    SELECT ({[Dim Date].[Даты YMD].[Year Name].&[2015].&[5]}
) 
    ON COLUMNS 
    FROM [Dwh Sorting]) 
    WHERE ([Measures].[Fact Table Count]) CELL PROPERTIES VALUE, 
    FORMAT_STRING, 
    LANGUAGE, 
    BACK_COLOR, 
    FORE_COLOR, 
    FONT_FLAGS

它获取了2015年5月的数据。我的目标是获得一个很长的表(有很多列),就像我展示的那样。有一个月或更长时间。

1 个答案:

答案 0 :(得分:1)

自动生成的Excel代码会增加许多额外的“位”。

摆脱我正在猜测的额外位,如下所示。这个脚本应该给你很多列 - 假设2015年每小时的数据,你应该在2015年每天最多24列!

我说“猜测”的原因是因为我们不知道你的立方体的层次结构:

SELECT 
  NON EMPTY 
      Descendants
      (
        [Dim Date].[Даты YMD].[Year Name].&[2015]
       ,[Dim Date].[Даты YMD].[Date] //<<this assumes there is a level in Dim date called Date
      )
    * 
      {[Dim Hour].[Hour Key].MEMBERS} ON COLUMNS
 ,NON EMPTY 
    [Dim Users].[FIO].MEMBERS ON ROWS
FROM [Dwh Sorting]
WHERE 
  [Measures].[Fact Table Count];

如果您只需要一系列日期的小时数,请尝试使用:运算符。在这种情况下,您无需应用Descendants函数:

SELECT 
  NON EMPTY 
      (
        [Dim Date].[Даты YMD].[Date Key].[2014-01-02]
      : 
        [Dim Date].[Даты YMD].[Date Key].[2015-02-10]
      )
    * 
      {[Dim Hour].[Hour Key].MEMBERS} ON COLUMNS
 ,NON EMPTY 
    [Dim Users].[FIO].MEMBERS ON ROWS
FROM [Dwh Sorting]
WHERE 
  [Measures].[Fact Table Count];