如何从 MDX 查询中提取日期中的月份年份
Posted
技术标签:
【中文标题】如何从 MDX 查询中提取日期中的月份年份【英文标题】:How to extract month-year from date from MDX Query 【发布时间】:2016-02-26 10:23:27 【问题描述】:我需要使用不包含日期的日期过滤来自 Cube 的数据。 目前我正在使用以下 MDX 查询,即从一年中的第一天开始到最后一天结束获取度量数据。
但是,我只想在行的日期时间中使用 Month-Year,而不是在所有日期中使用 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,Num,.寄售)
我知道有一种方法可以从整个日期中仅提取月份和年份。但这仅适用于单个日期。我想要的所有日期都必须经过过滤,包括月份和年份,并且数据也应该相应地对应于这些日期。见上面预期的过滤数据集。
编辑
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。 你能帮我吗
没有串联的结果
【问题讨论】:
我的回答有帮助吗,还是可以删除? 【参考方案1】:您必须在维度视图(cube design-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]
)
【讨论】:
嗨 Usman,修改了上面的代码。请检查并告诉我。 嗨,Hari:我没有任何等级 [Period].[Monthly]。我的层次结构是:[Period].[YearAndHalf]、[Period].[YearAndMonth]、[Period].[YearAndQuarter] 和 [Period].[YearAndWeek] 我认为,不知何故我们没有正确使用连接。在行上,我们需要像 ('YYYY-MM') => 2014-04 这样的连接,所以我不这么认为, [Period].[Monthly].[Year] , [Period].[YearAndMonth].[ ConsignmentMonth] 将不起作用。因为它不是串联。而且,我根本没有任何 [Period].[Monthly] 层次结构。 亲爱的 Hari,现在我得到了几乎正确的结果,看来我离目标很近了。我在这里需要的只是串联以获得单个字段而不是不同的集合。所以我需要它而不是 2014|1 (2014-01)。因此,我们需要在行级别进行连接,请参阅编辑以在使用 [Period].[YearAndQuarter] 的建议后获得最终结果。 然后试试下面的代码,用 MEMBER [YearMo] AS [Period].[YearAndQuarter].Currentmember.Name + "-" + [Period].[YearAndMonth].Currentmember.Name SELECT NON EMPTY [Measures].[ConsignmentCount], [Measures].[CBM], [Measures].[LDM], [Measures].[Weight], [Measures].[Amount] ON COLUMNS , NON EMPTY ( [Period) ].[YearAndQuarter].[ConsignmentYear] , [Period].[YearAndMonth].[ConsignmentMonth] ) ON ROWS FROM ( SELECT ( [Period].[YearAndMonth].[ConsignmentYear].&[2014], [ Period].[YearAndMonth].[ConsignmentYear].&[2015] ) 在 [RebellOlap] 的列上)【参考方案2】:也许尝试将计算成员托管在不同的层次结构中。我猜到了这个[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 查询中提取日期中的月份年份的主要内容,如果未能解决你的问题,请参考以下文章