sql - 在 MDX 查询上添加过滤器

标签 sql mdx olap

SELECT  
  {[Measures].[Imports - Tons]
   , [Measures].[Imports - Metric Tonnes]
   , [Measures].[Import Customs Value]  } ON COLUMNS,  
{CROSSJOIN (
   [Date].[Month Year].members
  ,[Country].[Country Name].members
  ,[Steel Mill Product].[Steel Mill Product Name].[Plates-Cut Length]
  ,[Concordance].[HTS 10 Digit Code].members) }
ON ROWS  
FROM [AISISteel]   
WHERE ([Date].[Year].[2014], [Concordance].[HTS 2 Digit Code].[72])

我有这个 MDX 查询。
我想取回所有这些数据,但只取回 Import-Tons>0 的数据。我该怎么做?

最佳答案

您可以尝试使用FILTER功能:

SELECT  
  {[Measures].[Imports - Tons]
   , [Measures].[Imports - Metric Tonnes]
   , [Measures].[Import Customs Value]  } ON COLUMNS,  
FILTER(
  {CROSSJOIN (
     [Date].[Month Year].members
    ,[Country].[Country Name].members
    ,[Steel Mill Product].[Steel Mill Product Name].[Plates-Cut Length]
    ,[Concordance].[HTS 10 Digit Code].members) }
  , [Measures].[Imports - Tons] > 0
  )
ON ROWS  
FROM [AISISteel]   
WHERE ([Date].[Year].[2014], [Concordance].[HTS 2 Digit Code].[72])

此外,很少使用的 HAVING 子句也是您的一个可能选择

SELECT  
  {[Measures].[Imports - Tons]
   , [Measures].[Imports - Metric Tonnes]
   , [Measures].[Import Customs Value]  } 
ON COLUMNS,  
  {CROSSJOIN (
     [Date].[Month Year].members
    ,[Country].[Country Name].members
    ,[Steel Mill Product].[Steel Mill Product Name].[Plates-Cut Length]
    ,[Concordance].[HTS 10 Digit Code].members) }
HAVING [Measures].[Imports - Tons] > 0
ON ROWS  
FROM [AISISteel]   
WHERE ([Date].[Year].[2014], [Concordance].[HTS 2 Digit Code].[72])

另外,为了简洁起见,还有一个几乎总是首选的 CROSSJOIN 函数的快捷方式:

SELECT  
  {[Measures].[Imports - Tons]
   , [Measures].[Imports - Metric Tonnes]
   , [Measures].[Import Customs Value]  } 
ON COLUMNS,  
    {[Date].[Month Year].members*
     [Country].[Country Name].members*
     [Steel Mill Product].[Steel Mill Product Name].[Plates-Cut Length]*
     [Concordance].[HTS 10 Digit Code].members}
HAVING [Measures].[Imports - Tons] > 0
ON ROWS  
FROM [AISISteel]   
WHERE ([Date].[Year].[2014], [Concordance].[HTS 2 Digit Code].[72])

编辑

如果将上面的内容与下面的内容进行比较,执行时间是否有很大不同?

SELECT  
  {[Measures].[Imports - Tons]
   , [Measures].[Imports - Metric Tonnes]
   , [Measures].[Import Customs Value]  } ON COLUMNS,  
  FILTER(
    NONEMPTY(
     [Date].[Month Year].members*
     [Country].[Country Name].members*
     [Steel Mill Product].[Steel Mill Product Name].[Plates-Cut Length]*
     [Concordance].[HTS 10 Digit Code].members
    ,[Measures].[Imports - Tons]
    )
  ,[Measures].[Imports - Tons] > 0
  )
ON ROWS  
FROM [AISISteel]   
WHERE ([Date].[Year].[2014], [Concordance].[HTS 2 Digit Code].[72])

关于sql - 在 MDX 查询上添加过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28283552/

相关文章:

mdx - 在 MDX 中,如何对子成员执行计算然后聚合这些子成员?

c++ - 在C++中执行sql脚本

sql - 需要 sql 帮助 : For each record in table A (has more columns than table B), 插入表 B

mdx - CURRENTMEMBER 函数在 MDX 中给出错误

syntax - 为什么显式引用层次结构会消除 "different dimensionality"的错误

ssas - ssas 立方体中的百万行维度

.net - 适用于在 Mono/MySQL 上运行的 .NET 的免费 OLAP 解决方案

sql - 如何在 linux shell 上的 sql 查询中使用 "%"字符?

sql - DB2 - SQL-将结果限制为某个列中某个值仅出现几次

ssas - 在 MDX 中像在 SQL 中一样在顶部显示列名