如何从 MDX 查询中提取日期的月年

How to extract month-year from date from MDX Query

我需要使用不包含日期的日期从多维数据集过滤数据。 目前我正在使用以下 MDX 查询,即从一年的第一天开始并在最后一天结束的情况下获取度量数据。

但是,我只想在行的日期时间中使用月-年,而不是在所有日期中使用 DateTime。 (这里我的日期字段是:[Period].[TransportDate])

以下是 MDX 查询。

SELECT 
  NON EMPTY 
    { 
      [Measures].[ConsignmentCount]
    , [Measures].[CBM]
    , [Measures].[LDM]
    , [Measures].[Weight]
    , [Measures].[Amount] } ON COLUMNS,
  NON EMPTY 
    { [Period].[TransportDate].Children } ON ROWS
FROM 
  ( 
     SELECT 
      ( 
        { [Period].[YearAndMonth].[ConsignmentYear].&[2014]
        , [Period].[YearAndMonth].[ConsignmentYear].&[2015] } 
      ) ON COLUMNS
      FROM [RebellOlap]
   )

以上查询获取从 2015 年第一天到最后一天的所有记录。参见附图 ( allRecords )

但我想以某种方式按照以下方式进行(所需数据集) 我想要单列而不是月份和年份。所以 最终数据集应该是

(例如日期(07-2015)、数量、CBM、LDM、数量、货物)

我知道有一种方法可以从整个日期中只提取月份和年份。但这仅适用于单个日期。我想要的所有日期必须通过包含月份和年份进行过滤,数据也应该相应地对应于这些日期。请参阅上面预期的过滤数据集。

编辑

WITH MEMBER [YearMo] AS 
     [Period].[ConsignmentYear].Currentmember.Name 
     + "-" + 
     [Period].[ConsignmentMonth].Currentmember.Name
SELECT 
  NON EMPTY 
    { 
      [Measures].[ConsignmentCount]
    , [Measures].[CBM]
    , [Measures].[LDM]
    , [Measures].[Weight]
    , [Measures].[Amount] 
   } ON COLUMNS , 
NON EMPTY 
   (
     {  
       [Period].[YearAndMonth].[ConsignmentMonth] 
     } 
   ) ON ROWS 
FROM 
  ( 
     SELECT 
        ( 
          { 
            [Period].[YearAndMonth].[ConsignmentYear].&[2014]
          , [Period].[YearAndMonth].[ConsignmentYear].&[2015] 
          } 
        ) ON COLUMNS
     FROM [RebellOlap]
  )

以上生成结果但没有年份。

我想以某种方式在同一列上显示年份和月份。 所以 01 将成为 01-2014。 你能帮帮我吗

没有连接的结果

您必须在维度视图(多维数据集设计-sql 视图)中创建一个新字段 'YYYY-mm',或者您可以连接年份和月份维度属性(下面的示例)。

示例代码:

WITH MEMBER [YearMo] AS 
   [Period].[Monthly].Currentmember.Name 
    + "-" + [Period].[YearAndMonth].Currentmember.Name 
SELECT 
  NON EMPTY {[Measures].[ConsignmentCount], [Measures].[CBM], [Measures].[LDM], [Measures].[Weight], [Measures].[Amount]} ON COLUMNS 
, NON EMPTY ( { [Period].[Monthly].[Year] } , { [Period].[YearAndMonth].[ConsignmentMonth] } ) ON ROWS 
FROM 
  ( 
    SELECT ( { [Period].[YearAndMonth].[ConsignmentYear].&[2014], [Period].[YearAndMonth].[ConsignmentYear].&[2015] } ) ON COLUMNS 
    FROM [RebellOlap]
   ) 

也许尝试在不同的层次结构中托管计算成员。我猜到了 [Forwarder].[Forwarder].[All],您需要调整到多维数据集中存在的层次结构:

WITH MEMBER [Forwarder].[Forwarder].[All].[YearMo] AS 
     [Period].[Year].Currentmember.Name 
     + "-" + 
     [Period].[Month].Currentmember.Name
SELECT 
  NON EMPTY 
    { 
      [Measures].[ConsignmentCount]
    , [Measures].[CBM]
    , [Measures].[LDM]
    , [Measures].[Weight]
    , [Measures].[Amount] 
   } ON COLUMNS , 
NON EMPTY 
      [Period].[Year].[Year]
     *[Period].[Month].[Month]
     *[Forwarder].[Forwarder].[All].[YearMo] 
     ON ROWS 
FROM 
  ( 
     SELECT 
        ( 
          { 
            [Period].[YearAndMonth].[ConsignmentYear].&[2014]
          , [Period].[YearAndMonth].[ConsignmentYear].&[2015] 
          } 
        ) ON COLUMNS
     FROM [RebellOlap]
  )

或者,如果上述操作产生错误,那么您可能需要先创建一个度量:

WITH 
MEMBER [Measures].[YearMoString] AS 
     [Period].[Year].Currentmember.Name 
     + "-" + 
     [Period].[Month].Currentmember.Name
MEMBER [Forwarder].[Forwarder].[All].[YearMo] AS 
     (
       [Forwarder].[Forwarder].[All]
      ,[Measures].[YearMoString]
     )
SELECT 
  NON EMPTY 
    { 
      [Measures].[ConsignmentCount]
    , [Measures].[CBM]
    , [Measures].[LDM]
    , [Measures].[Weight]
    , [Measures].[Amount] 
   } ON COLUMNS , 
NON EMPTY 
      [Period].[Year].[Year]
     *[Period].[Month].[Month]
     *[Forwarder].[Forwarder].[All].[YearMo] 
     ON ROWS 
FROM 
  ( 
     SELECT 
        ( 
          { 
            [Period].[YearAndMonth].[ConsignmentYear].&[2014]
          , [Period].[YearAndMonth].[ConsignmentYear].&[2015] 
          } 
        ) ON COLUMNS
     FROM [RebellOlap]
  )