某些属性的TOPCOUNT查询中的结果不正确

时间:2016-08-10 02:35:25

标签: mdx adventureworks ssas-2008-r2

我正在努力找出哪个年度的州经销商销售额最高。我正在使用Adventure Works DW 2008 R2数据库。

以下是我的查询 -

SELECT { [Reseller Sales Amount] } ON COLUMNS,
{
  Generate (
    [Geography].[Geography].[Country].Members,
    TopCount (
      Order (
        Descendants ( 
           [Geography].[Geography].CurrentMember
         , [Geography].[Geography].[State-Province] 
        ) 
       *[Date].[Calendar].[Calendar Year].Members,
        [Reseller Sales Amount],
        DESC
      ),
      1
    )
  )
} ON ROWS
FROM [Adventure Works]

说到法国,它显示(null)作为结果集。另外,为什么不列出所有州 - 省,只选择其中几个?是否也可以将国家与结果一起使用。当我尝试另一个交叉连接时,我得到错误,说地理层次结构已经存在。

2 个答案:

答案 0 :(得分:1)

要删除null,您可以使用BDESC而不是DESC。额外B表示所有自然层次结构顺序都将被破坏

SELECT { [Reseller Sales Amount] } ON COLUMNS,
{
  Generate (
    [Geography].[Geography].[Country].Members,
    TopCount (
      Order (
        Descendants ( 
           [Geography].[Geography].CurrentMember
         , [Geography].[Geography].[State-Province] 
        ) 
       *[Date].[Calendar].[Calendar Year].Members,
        [Reseller Sales Amount],
        BDESC //<<< 
      ),
      1
    )
  )
} ON ROWS
FROM [Adventure Works];

要在国家/地区添加并避免您看到的错误,请使用未使用的属性层次结构[Geography].[Country],而不是您在1轴上已拥有的用户层次结构[Geography].[Geography]

SELECT 
  {[Reseller Sales Amount]} ON COLUMNS
 ,{
    Generate
    (
      [Geography].[Geography].[Country].MEMBERS
     ,TopCount
      (
        Order
        (
            [Geography].[Country].[Country]*
            Descendants
            (
              [Geography].[Geography].CurrentMember
             ,[Geography].[Geography].[State-Province]
            )*
            [Date].[Calendar].[Calendar Year].MEMBERS
         ,[Reseller Sales Amount]
         ,bDESC
        )
       ,1
      )
    )
  } ON ROWS
FROM [Adventure Works];

结果如下:

enter image description here

答案 1 :(得分:0)

我们将在关卡中探索TOP过滤器的通用选项实现。

  

可以为每个级别设置TOP规则。

用于详细分析数据(Expand,Drilldown)。

  

聚合是基于TOP形成的。

TOP-filters on Levels

只要数据在中排序,就可以设置排序顺序 大多数数据透视表。

$('body').on('click', '[name=submit11]', function() {
  var form = $(this).closest('form').get(0);
  $('.error').remove();
  var req = ['username', 'password'];
  var div = '#login_form';
  validate(div, req);
  if ($('.error').length == 0) {
    var login = true;
    var username = $(this).siblings('[name=username]').val();
    var password = $(this).siblings('[name=password]').val();
    $.post('../ajax/multipurpose.php', {
      login: login,
      username: username,
      password: password
    }, function(data) {
      if ($.trim(data) != '') {
        $('#login_form').prepend("<div class='error'>" + data + "</div>");
      }
      else {
         form.submit();
      }
    });
  }
  return false;
});