MDX - 带月平均值的日线图
MDX - Daily chart with monthly average
我需要一个很大的帮助。
我正在使用 MDX 在 Pentaho - CDE / CTools 中生成图形。我需要做一系列由用户设置的过滤器。该图表是每天的进度,我想添加一个月的平均线。但是效果不是很好。
我做错了什么?我对 MDX 了解不多。它应该出现值并重复整个月的平均值,但它重复相同的值。
WITH
MEMBER [Measures].[AVG] AS
AVG ([MONTH].[MONTH].CurrentMember, [Measures].[QTD])
SELECT NON EMPTY {[Measures].[QTD], [Measures].[AVG]} ON COLUMNS,
{[DATE].[DATE].Members} ON ROWS
FROM [DW20_DAY]
WHERE Crossjoin(Crossjoin(Crossjoin({[MONTH].[All MONTHs]}, {[CAUSE].[All CAUSEs]}), {[TYPE].[All TYPEs]}), {[MODEL].[All MODELs]})
有过滤器:
WITH
MEMBER [Measures].[AVG] AS
AVG ([MONTH].[MONTH].CurrentMember, [Measures].[QTD])
SELECT NON EMPTY {[Measures].[QTD], [Measures].[AVG]} ON COLUMNS,
{[DATE].[DATE].Members} ON ROWS
FROM [DW20_DAY]
WHERE Crossjoin(Crossjoin(Crossjoin({[MONTH].[2017-03-01]}, {[CAUSE].[All CAUSEs]}), {[TYPE].[All TYPEs]}), {[MODEL].[All MODELs]})
数据样本 - 在这种情况下,平均值应为:7.567.743
DATE QTD AVERAGE It has to be
01/11/2016 7.731.442 7.731.442 7.567.743
02/11/2016 7.973.846 7.973.846 7.567.743
03/11/2016 7.430.333 7.430.333 7.567.743
04/11/2016 7.517.061 7.517.061 7.567.743
05/11/2016 6.738.677 6.738.677 7.567.743
06/11/2016 6.796.424 6.796.424 7.567.743
07/11/2016 7.631.584 7.631.584 7.567.743
08/11/2016 7.907.649 7.907.649 7.567.743
09/11/2016 8.995.933 8.995.933 7.567.743
10/11/2016 7.444.471 7.444.471 7.567.743
11/11/2016 8.039.431 8.039.431 7.567.743
12/11/2016 7.240.583 7.240.583 7.567.743
13/11/2016 6.779.103 6.779.103 7.567.743
14/11/2016 7.648.149 7.648.149 7.567.743
15/11/2016 7.641.452 7.641.452 7.567.743
---- 编辑:
我请求创建时间维度。
现在它处于同一层次结构中。
但是我还是解决不了。
在这种情况下,它看起来如何?
WITH MEMBER [Measures].[AVG] AS
Avg( Descendants([TIME].[MONTH].CURRENTMEMBER, [TIME].[DATE])
, [Measures].[QTDE]
)
SELECT {[Measures].[QTD], [Measures].[AVG]} ON COLUMNS,
NON EMPTY{[TIME].[DATE].MEMBERS} ON ROWS
FROM [DW20_DAY]
谢谢。
如果您在日期维度中具有多级用户层次结构,但您使用的是以下两个属性层次结构,则此类查询很容易完成:
[MONTH].[MONTH]
[DATE].[DATE]
尝试对 Date 使用当前成员,然后使用 NonEmpty 来获取相应的月份:
NonEmpty([MONTH].[MONTH].MEMBERS,[DATE].CURRENTMEMBER)
然后您需要找到与该月相关的日期以计算平均值:
NonEmpty([DATE].[DATE].MEMBERS,
NonEmpty([MONTH].[MONTH].MEMBERS,[DATE].CURRENTMEMBER).ITEM(0)
)
然后尝试应用平均值:
WITH
MEMBER [Measures].[AVG] AS
AVG (
NonEmpty(
[DATE].[DATE].MEMBERS,
NonEmpty(
[MONTH].[MONTH].MEMBERS,[DATE].CURRENTMEMBER).ITEM(0)
)
, [Measures].[QTD]
)
...
...
我需要针对 AdvWrks 测试以上内容!
以下代码也必须有效:
Member [Measures].[AVG] as
AVG([DATE].[DATE].[DATE].Members, [Measures].[QTD])
如果你有层次结构 Day -> Month 并且想按父级获取 AVG,请尝试:
AVG([DATE].[DATE].CurrentMember.Siblings, [Measures].[QTD])
我需要一个很大的帮助。
我正在使用 MDX 在 Pentaho - CDE / CTools 中生成图形。我需要做一系列由用户设置的过滤器。该图表是每天的进度,我想添加一个月的平均线。但是效果不是很好。
我做错了什么?我对 MDX 了解不多。它应该出现值并重复整个月的平均值,但它重复相同的值。
WITH
MEMBER [Measures].[AVG] AS
AVG ([MONTH].[MONTH].CurrentMember, [Measures].[QTD])
SELECT NON EMPTY {[Measures].[QTD], [Measures].[AVG]} ON COLUMNS,
{[DATE].[DATE].Members} ON ROWS
FROM [DW20_DAY]
WHERE Crossjoin(Crossjoin(Crossjoin({[MONTH].[All MONTHs]}, {[CAUSE].[All CAUSEs]}), {[TYPE].[All TYPEs]}), {[MODEL].[All MODELs]})
有过滤器:
WITH
MEMBER [Measures].[AVG] AS
AVG ([MONTH].[MONTH].CurrentMember, [Measures].[QTD])
SELECT NON EMPTY {[Measures].[QTD], [Measures].[AVG]} ON COLUMNS,
{[DATE].[DATE].Members} ON ROWS
FROM [DW20_DAY]
WHERE Crossjoin(Crossjoin(Crossjoin({[MONTH].[2017-03-01]}, {[CAUSE].[All CAUSEs]}), {[TYPE].[All TYPEs]}), {[MODEL].[All MODELs]})
数据样本 - 在这种情况下,平均值应为:7.567.743
DATE QTD AVERAGE It has to be
01/11/2016 7.731.442 7.731.442 7.567.743
02/11/2016 7.973.846 7.973.846 7.567.743
03/11/2016 7.430.333 7.430.333 7.567.743
04/11/2016 7.517.061 7.517.061 7.567.743
05/11/2016 6.738.677 6.738.677 7.567.743
06/11/2016 6.796.424 6.796.424 7.567.743
07/11/2016 7.631.584 7.631.584 7.567.743
08/11/2016 7.907.649 7.907.649 7.567.743
09/11/2016 8.995.933 8.995.933 7.567.743
10/11/2016 7.444.471 7.444.471 7.567.743
11/11/2016 8.039.431 8.039.431 7.567.743
12/11/2016 7.240.583 7.240.583 7.567.743
13/11/2016 6.779.103 6.779.103 7.567.743
14/11/2016 7.648.149 7.648.149 7.567.743
15/11/2016 7.641.452 7.641.452 7.567.743
---- 编辑:
我请求创建时间维度。 现在它处于同一层次结构中。
但是我还是解决不了。 在这种情况下,它看起来如何?
WITH MEMBER [Measures].[AVG] AS
Avg( Descendants([TIME].[MONTH].CURRENTMEMBER, [TIME].[DATE])
, [Measures].[QTDE]
)
SELECT {[Measures].[QTD], [Measures].[AVG]} ON COLUMNS,
NON EMPTY{[TIME].[DATE].MEMBERS} ON ROWS
FROM [DW20_DAY]
谢谢。
如果您在日期维度中具有多级用户层次结构,但您使用的是以下两个属性层次结构,则此类查询很容易完成:
[MONTH].[MONTH]
[DATE].[DATE]
尝试对 Date 使用当前成员,然后使用 NonEmpty 来获取相应的月份:
NonEmpty([MONTH].[MONTH].MEMBERS,[DATE].CURRENTMEMBER)
然后您需要找到与该月相关的日期以计算平均值:
NonEmpty([DATE].[DATE].MEMBERS,
NonEmpty([MONTH].[MONTH].MEMBERS,[DATE].CURRENTMEMBER).ITEM(0)
)
然后尝试应用平均值:
WITH
MEMBER [Measures].[AVG] AS
AVG (
NonEmpty(
[DATE].[DATE].MEMBERS,
NonEmpty(
[MONTH].[MONTH].MEMBERS,[DATE].CURRENTMEMBER).ITEM(0)
)
, [Measures].[QTD]
)
...
...
我需要针对 AdvWrks 测试以上内容!
以下代码也必须有效:
Member [Measures].[AVG] as
AVG([DATE].[DATE].[DATE].Members, [Measures].[QTD])
如果你有层次结构 Day -> Month 并且想按父级获取 AVG,请尝试:
AVG([DATE].[DATE].CurrentMember.Siblings, [Measures].[QTD])