如何从 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]
)
我需要使用不包含日期的日期从多维数据集过滤数据。 目前我正在使用以下 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]
)