我正在使用FoodMart示例数据库来表达我的问题。
我需要显示" Unit Sales"在列上测量 使用"月","年"和"产品名称"行上的尺寸:
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]
我一直在使用正确的语法等。
没有加入我得到以下内容:
| | 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 |
|
如您所见,聚合无法正常工作
答案 0 :(得分:0)
您错过了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
如果未指定成员表达式,则默认为当前 第一个层次结构的成员,第一个层次结构的类型为Year 度量组中类型的维度。 Ytd函数是一个 PeriodsToDate函数的快捷函数所在的Type 设置了级别所基于的属性层次结构的属性 多年。也就是说,Ytd(Member_Expression)相当于 PeriodsToDate(Year_Level_Expression,Member_Expression)。请注意这一点 当Type属性设置为FiscalYears时,函数将不起作用。
如果年份属性层次结构的type属性未设置为time,则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];
答案 1 :(得分:-1)
你能尝试一下,我认为这只是一个语法问题。
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]