【问题标题】:MDX running total with cross join带有交叉连接的 MDX 运行总计
【发布时间】:2015-06-10 18:21:10
【问题描述】:

MDX 新手问题

我正在使用 FoodMart 示例数据库来表达我的问题。

我需要在列上显示“单位销售额”度量的运行总计 行中包含“月”、“年”和“产品名称”维度:

Year    Month     Product   |  Unit Sales    UnitSoldIncludngThisProdTillDate
                            |
2014    Jan        P1       |    4                4
                   P2       |    2                6
                   P3       |    0                6
        Feb        P1       |    1                7
                   P2       |    0                7
                   P3       |    3               10
2015    Jan        P1       |    7               17

……等等

没有与 Product 的交叉连接,查询运行良好。 但是,加入 Product 并不能满足我的需求。

如何解决这个问题?

我正在运行的 MDX 查询是

AGGREGATE(YTD(), [Measures].[Unit Sales])
SELECT {[Measures].[Unit Sales], MEASURES.YTDDEMO} ON 0,
NON EMPTY {[Time].[Month].Members * [Product].[ProductLevel].Members} ON 1
FROM  [TestFoodMart]

2015 年 6 月 10 日添加

我一直在使用正确的语法等。

如果没有加入,我会得到以下信息:

|                  | Unit Sales | Sales To Date |
+------+-----------+------------+---------------+
| 2013 | April     |     45,049 |        45,049 |
|      | August    |     44,777 |        89,826 |
|      | December  |            |        89,826 |
|      | February  |     44,431 |       134,257 |
|      | January   |     46,313 |       180,570 |
|      | July      |     46,671 |       227,241 |
|      | June      |     45,611 |       272,852 |
|      | March     |     46,334 |       319,186 |
|      | May       |     45,085 |       364,271 |
|      | November  |     53,807 |       418,078 |
|      | October   |     43,945 |       462,023 |
|      | September |     47,964 |       509,987 |

通过加入,我得到以下信息:

                                                                | Unit Sales | YTDDEMO |
+------+-----------+---------------------------------------------+------------+---------+
| 2013 | April     | ADJ Rosy Sunglasses                         |         38 |      38 |
|      |           | Akron City Map                              |         29 |      29 |
|      |           | Akron Eyeglass Screwdriver                  |         34 |      34 |
|      |           | American Beef Bologna                       |         28 |      28 |
|      |           | American Chicken Hot Dogs                   |         25 |      25 |
|

如您所见,聚合不起作用

【问题讨论】:

  • 这给了你什么你想要的东西?屏幕截图会有所帮助。
  • 我想要的在上表中给出,我想要那种格式的输出
  • 您最后的屏幕打印并不能证明计算无效。八月份的 YTDDEMO 数字是多少?您是否期望它添加 38 和 29,所以阿克伦市地图的 YTDDEMO 编号将为 67?!
  • 是的,我希望阿克伦市地图的 YTDDEMO 数字为 67

标签: mdx


【解决方案1】:

您缺少WITH 代码行:

WITH MEMBER MEASURES.YTDDEMO AS
  AGGREGATE(YTD(), [Measures].[Unit Sales])
SELECT 
  {[Measures].[Unit Sales], MEASURES.YTDDEMO} ON 0,
  NON EMPTY 
  {[Time].[Month].Members * [Product].[ProductLevel].Members} ON 1
FROM  [TestFoodMart]

请注意MSDN 函数YTD 定义中的备注部分:https://msdn.microsoft.com/en-us/library/ms146039.aspx

如果未指定成员表达式,则默认为当前 第一个层次结构的成员,级别类型为 Years in the first 度量值组中时间类型的维度。 Ytd 函数是 PeriodsToDate 函数的快捷函数,其中 Type 设置级别所基于的属性层次结构的属性 到年。也就是说,Ytd(Member_Expression) 等价于 PeriodsToDate(Year_Level_Expression,Member_Expression)。请注意,这 当 Type 属性设置为 FiscalYears 时,函数将不起作用。

如果您的年份属性层次结构的类型属性未设置为时间,则YTD 函数将不起作用。

这个等效版本是否有效?

WITH 
  MEMBER MEASURES.YTDDEMO AS 
    Aggregate
    (
      PeriodsToDate([Time].[Year]) <<//change to what your year level is
     ,[Measures].[Unit Sales]
    ) 
SELECT 
  NON EMPTY 
    {
      [Measures].[Unit Sales]
     ,MEASURES.YTDDEMO
    } ON 0
 ,NON EMPTY 
    {[Time].[Month].Members * [Product].[ProductLevel].Members} ON 1
FROM [Adventure Works];

【讨论】:

  • 我不认为整个查询是由 Diptendu 发布的,这是一个语法问题。他说“但是,加入 Product 并不能满足我的需求”。
【解决方案2】:

你可以试试这个,我认为这只是一个语法问题。

AGGREGATE(YTD(), [Measures].[Unit Sales])
SELECT {[Measures].[Unit Sales], MEASURES.YTDDEMO} ON 0,
NON EMPTY ([Time].[Month].Members * [Product].[ProductLevel].Members) ON 1
FROM  [TestFoodMart]

【讨论】:

  • 哇!它与有问题的脚本相同吗?这怎么能算作答案?
  • 我用括号替换了大括号。
猜你喜欢
  • 1970-01-01
  • 2017-11-03
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多