0
[Adventure Works] cube에서 예제를 제공하는 문제를 설명해 드리겠습니다. MDX 다음일반 회원 수를 계산하는 MDX - EXISTS 대안
는 17,473
SELECT NON EMPTY { [Measures].[Internet Order Count] } ON COLUMNS,
[Internet Sales Order Details].[Sales Order Number] on ROWS
FROM [Adventure Works])
WHERE ([Sales Reason].[Sales Reason].&[1] -- price
의 수를 반환하고 다음 반환 내가 [판매 이유]에 공통적으로 [판매 주문 번호] 어떤 계산하고자 3515
SELECT NON EMPTY { [Measures].[Internet Order Count] } ON COLUMNS ,
[Internet Sales Order Details].[Sales Order Number] on ROWS
FROM [Adventure Works]
WHERE ([Sales Reason].[Sales Reason].&[2]) -- on promotion
의 계산합니다. & 1 및 [판매 이유]. & [2]
SQL 동등한은 다음과 같습니다
WITH MEMBER [Measures].[common] AS count
( exists (exists ([Internet Sales Order Details].[Sales Order Number].[Sales Order Number].Members,
[Sales Reason].[Sales Reason].&[1],"Internet Orders"
),
[Sales Reason].[Sales Reason].&[2],"Internet Orders"
)
)
SELECT NON EMPTY [Measures].[common] ON COLUMNS
FROM [Adventure Works]
-- 1689
그러나 사용 EXISTS의 내 요구 사항에 대한 다소 느리다 :
select count(distinct f.SalesOrderNumber)
from FactInternetSales f
join FactInternetSalesReason fs
on f.SalesOrderNumber = fs.SalesOrderNumber and f.SalesOrderLineNumber = fs.SalesOrderLineNumber
where fs.SalesReasonKey = 1 and fs.SalesOrderNumber in
(select SalesOrderNumber from FactInternetSalesReason fs1 where fs1.SalesReasonKey = 2)
-- sales reason 1 = 17473
-- sales reason 2 = 3515
-- common 1689
나는 다음 MDX를 사용하여 공통의 수를 얻었다. 대안을 제시하십시오.
또한 스레드 관련 참조하시기 바랍니다 here
감사합니다
'Sales Reason'1 및 2에서 일반적으로 사용되는 '인터넷 주문 횟수'가 필요합니다. 총 횟수는 아닙니다. –
@PrakashGautam - 질문에 대해 오해했습니다. 내 게시물에 대한 대안을 추가했습니다. 당신의'exists' 스크립트는 제 기계에서 1.1 초에 실행되지만 교차점 버전은 0.8 초에서 실행됩니다. – whytheq
감사합니다. @whytheq, 인터 섹트가 더 빨리 실행되고 존재합니다. –