【问题标题】:MDX Calculation speed - CurrentMember?MDX 计算速度 - CurrentMember?
【发布时间】:2023-03-04 19:58:01
【问题描述】:

我仍在掌握 MDX,我正在寻求帮助。这是我的 MDX 查询:

 CREATE MEMBER CURRENTCUBE.[Measures].[Fake]
   AS 
   IIF(
    (
      (
        [Sales Data].[Ship-to No].CurrentMember
       ,[Sales Data].[Price Type].&[Core]
       ,[Measures].[Sales - Local Currency]
      ) 
    / (
        [Sales Data].[Ship-to No].CurrentMember,
        [Sales Data].[Price Type].[(All)].[ALL],
        [Measures].[Sales - Local Currency]
      )
    ) > 0.9 
  ,1 
  ,NULL
  ), 
VISIBLE = 1; 

CREATE MEMBER CURRENTCUBE.[Measures].[Test Calc]
  AS 
  SUM(
     Descendants(
       [Sales Data].[Ship-to No].CurrentMember
      ,[Sales Data].[Ship-to No].[Ship-to No]
     ),
    [Measures].[Fake]
  ), 
VISIBLE = 1; 

SalesData 是事实表,基本计算是统计销售额超过“核心”价格类型 90% 的客户数量。

查询目前大约需要 5 秒才能完成,但我认为如果我根据 http://sqlblog.com/blogs/mosha/archive/2008/07/29/product-volatility-optimizing-mdx-with-mdx-studio.aspx 不使用 CurrentMember 会更快

但是我不知道从哪里开始改变这个,谁能帮我提高效率?

【问题讨论】:

  • 聚合设计?行数?莫拉普?足够的硬件?
  • @MitchWheat,聚合是使用向导设计的(我允许先建立使用)事实表有大约 20M 行,它正在使用 MOLAP。抱歉应该把这个放在帖子上。硬件 - 目前仅在开发人员 SQL 服务器上等本地计算机上。

标签: mdx


【解决方案1】:

如果您从第一个度量中删除 currentmember,它有什么不同吗?

 CREATE MEMBER CURRENTCUBE.[Measures].[Fake]
   AS 
   IIF(
    (
      (
        [Sales Data].[Price Type].&[Core]
       ,[Measures].[Sales - Local Currency]
      ) 
    / (
        [Sales Data].[Price Type].[(All)].[ALL],
        [Measures].[Sales - Local Currency]
      )
    ) > 0.9 
  ,1 
  ,NULL
  ), 
VISIBLE = 1; 

关于您在第二个措施中使用的当前成员,也许 EXISTING 就足够了:

CREATE MEMBER CURRENTCUBE.[Measures].[Test Calc]
  AS 
  SUM(
    EXISTING [Sales Data].[Ship-to No].[Ship-to No].MEMBERS
    ,[Measures].[Fake]
  ), 
VISIBLE = 1;

【讨论】:

  • 它工作了一整秒,非常感谢,非常感谢,它也更容易阅读
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多