【问题标题】:SSAS -> MDX -> How to create a query that returns a topcount by a date period i.e. week?SSAS - > MDX - >如何创建一个按日期周期(即周)返回topcount的查询?
【发布时间】:2012-01-20 21:44:02
【问题描述】:

我最近收到了创建查询的请求,该查询返回每周收入排名前 100 位的客户。显然,我可以轻松地返回整体排名前 100 位的客户,但是当我添加周属性时,我的查询超时。我只是想知道是否有人遇到过这种情况或能够产生类似的查询?

我的查询在没有一周的情况下有效。 :

     SELECT NON EMPTY { [Measures].[Revenue] } ON COLUMNS, 
NON EMPTY TopCount ( { ([Customer].[Customer Id].[Customer Id].ALLMEMBERS * [Customer].[Name].[Name].ALLMEMBERS  ) }, 100, [Measures].[Revenue])  ON ROWS 
FROM [DW]

我对一周礼物的查询只是完全超时。 :

SELECT NON EMPTY { [Measures].[Revenue] } ON COLUMNS, 
NON EMPTY TopCount ( { ([Customer].[Customer Id].[Customer Id].ALLMEMBERS * [Customer].[Name].[Name].ALLMEMBERS * [Date Link].[Week].[Week].ALLMEMBERS ) }, 100, [Measures].[Revenue])  ON ROWS 
FROM [DW]

【问题讨论】:

    标签: sql sql-server sql-server-2012 ssas mdx


    【解决方案1】:

    这不会为您提供前 100 名客户以及他们在哪一周排名靠前吗?所以客户 A 可能在第一周排名第一,在第二周排名第五,依此类推,但您总共会得到 100 行而不是每周 100 行?

    试试类似的东西

    SELECT NON EMPTY { [Measures].[Revenue] } ON COLUMNS, 
    NON EMPTY 
    {
    [Date Link].[Week].[Week].ALLMEMBERS *
    {
    TopCount ( { ([Customer].[Customer Id].[Customer Id].ALLMEMBERS * [Customer].[Name].[Name].ALLMEMBERS ) }, 100, [Measures].[Revenue])  
    }
    }
    ON ROWS 
    FROM [DW]
    

    我认为您可能需要对周成员使用 GENERATE 而不是 *,不记得并试图在我的脑海中这样做;)

    【讨论】:

    • 标记为答案,因为这是我最接近的答案。这为我提供了结果,但每周没有 100 个客户。它在某些周显示 90,在另一个显示 70,我将为此使用 generate 函数进行研究。谢谢,因为这会给我更多的方向。
    • @UserSmith 你检查了这几周,你是否 100% 确定仅在这一周就有至少 100 位客户提供measures.revenue?
    • 是的,我检查了这个以确保通过 sql。这也是我的第一个猜测。我稍后会检查,因为我相信有人正在更新数据,这可能会给我带来好坏参半的结果。再次感谢您对此的指导。
    • 更新后重新检查,问题是我正在审查的这个测试数据没有 100 个客户在场.....很好的电话。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多