【问题标题】:How to filter measure multiple times in cube如何在多维数据集中多次过滤度量
【发布时间】:2015-04-22 00:06:01
【问题描述】:

我需要从我的多维数据集中生成一个类似于以下内容的报告。 (虚拟数据)

其中列出了产品类别中今天、本周、期间和年初至今的销售额和毛利润。

我的立方体设置如下 一个日期维度

还有立方体本身

目前我还没有实现产品类别片。

我正在为如何编写一个 MDX 查询而苦苦挣扎,该查询可以返回一天和一周的销售/毛利润等等。

我可以像这样自己退货

SELECT {[Measures].[Gross Profit],[Measures].[Price]} ON COLUMNS
From [Cube]
WHERE [Date].[Date Key].[2015-04-22];

对于其他各种类型(周等)等等,但我不确定如何将 where 过滤器应用于列本身而不是整个查询,或者这是否是正确的方法和我应该进行多个 MDX 调用,然后在我的应用程序中编写这些调用。

任何人都可以在这里给我一个正确方向的指针吗?

编辑:似乎主要使用@Akshay Rane 描述的方法工作,但是我无法让我的一项措施发挥作用

MEMBER [This Week] as 
 (PeriodsToDate([Date].[Fiscal Week Date].[Fiscal Week],StrToMember('[Date].[Fiscal Week Date].[Date Key].&[' + '20140401' + ']'))
,[Measures].[Merchandise Gross Profit])

给我一​​个错误:

The  function expects a string or numeric expression for the  argument. A tuple set expression was used.

这里有什么建议吗?

【问题讨论】:

    标签: ssas mdx data-warehouse cube


    【解决方案1】:

    您必须为要聚合数据的每个时间间隔创建单独的计算成员。

    这可以在[Adventure Works]立方体中完成,如下所示。

    WITH 
    
    MEMBER [Today] as 
        ([Measures].[Internet Sales Amount], [Date].[Date].CURRENTMEMBER)
    
    MEMBER [Last Week] as 
        AGGREGATE   ( 
                        { [Date].[Date].CURRENTMEMBER.lag(6) : [Date].[Date].CURRENTMEMBER }
                        , [Measures].[Internet Sales Amount] 
                    )
    
    SELECT 
            { [Today], [Last Week] } ON 0,
    
            { ([Product].[Product Categories].[Category], [Date].[Date].[Date]) } ON 1
    
    FROM 
    
    (   
        /*FILTERING ON SPECIFIC DATE USING SUBCUBE*/
        SELECT [Date].[Date].&[20070715] ON 0 
        FROM [Adventure Works]
    )
    

    【讨论】:

    • 看起来不错,你能看看我的编辑,看看我哪里出错了吗?
    • 是的,PeriodsToDate 函数会返回一组维度成员,但元组需要只有一个来自单个维度的成员,而不是一组成员 因此它给出了一个错误,所以为了聚合一组成员,您需要使用Aggregate functionAggregate(PeriodsToDate([Date].[Fiscal Week Date].[Fiscal Week],StrToMember('[Date].[Fiscal Week Date].[Date Key].&[' + '20140401' + ']')) ,[Measures].[Merchandise Gross Profit])
    【解决方案2】:

    如果您可以从同一个用户层次结构中获取不同级别的日期,那么这样的事情是可能的:

    SELECT 
        {
          [Date].[Calendar].[Month].&[2006]&[7]
         ,[Date].[Calendar].[Date].&[20050220]
        }
      * 
        {
          [Measures].[Order Quantity]
         ,[Measures].[Internet Sales Amount]
        } ON COLUMNS
     ,{[Product].[Category].Children} ON ROWS
    FROM [Adventure Works];
    

    上面的结果如下:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      • 1970-01-01
      • 1970-01-01
      • 2020-01-10
      • 2018-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多