당신에게 FILTER
기능을 사용해 볼 수 있습니다 다음 CROSSJOIN
기능에 대한 바로 가기가있는 거의 사용되지 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])
에 대한 가능한 옵션 또한
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])
을 거의 항상 선호되는 :
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])
편집
515,는 다음에 위의 실행 시간 많은 다른 비교하면?
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])
이 예에서는 HAVING의 성능이 훨씬 향상 될 것입니다. –
@DanielHanczyc 제발이 설명을 설명해주세요. 필자는 필터가 일반적으로 성능 측면에서는 좋지 않지만 MDD 튜닝에 대한 지식은 제한적이라는 것을 알고 있습니다. – whytheq
필터는 교차 결합 연산이 수행 된 후 적용됩니다 (컴파일러에서 최적화되지 않음). 반면에 'having'절이 자체 교차 결합 중에 적용됩니다. – George