배경 : 저는 MDX를 조금 사용해 왔지만 전문가가 아니기 때문에 성능에 대한 도움이 필요하지 않습니다. SQL Server Analysis Services 2012 큐브에서 계산 된 "MDX (Number of Stores Authorized/In-Stock/Selling/Etc)"측정 값 세트로 작업하고 있습니다. 이 계산은 원래 잘 수행되었지만 필자가 필요로하는 방식으로 제품 계층 구조 전반에 걸쳐 집계되지 않았 음을 알았습니다. 이 보고서에서 주로 사용되는 두 가지 계층 구조는 비즈니스 -> 항목 및 부문 -> 스토어입니다.MDX - 필터링 된 개수 CROSSJOIN - 성능 관련 문제
예를 들어, 원래 MDX 계산에서 상점 재고량 측정 값은 "항목"레벨에서 올바르게 수행되지만 위의 "비즈니스"레벨로 적절한 합계를 롤백하지는 않습니다. 비즈니스 수준에서 원래 매장으로 보였던 상점/제품 조합의 총 수를 보려고합니다. 고유하거나 MAX 값이 아닙니다.
원래 쿼리의 결과 :
[FILTER: CURRENT WEEK DAYS]
[BUSINESS] [AUTH. STORES] [STORES IN-STOCK] [% OF STORES IN STOCK]
[+] Business One 2,416 2,392 99.01%
[-] Business Two 2,377 2,108 93.39%
-Item 1 2,242 2,094 99.43%
-Item 2 2,234 1,878 84.06%
-Item 3 2,377 2,108 88.68%
-Item N ... ... ...
고정 쿼리 결과 : 여기 (이 엑셀 피벗 테이블 상상) 제대로 작동 하지 그것의 예 많은 시행 착오 후, I (아래) 올바른 숫자를 산출 한 DESCENDANTS() 함수를 사용하여 두 계층 구조의 CROSSJOIN() 필터링 된 카운트를 사용하여 전환 :
[FILTER: CURRENT WEEK DAYS]
[BUSINESS] [AUTH. STORES] [STORES IN-STOCK] [% OF STORES IN STOCK]
[+] Business One 215,644 149,301 93.90%
[-] Business Two 86,898 55,532 83.02%
-Item 1 2,242 2,094 99.43%
-Item 2 2,234 1,878 99.31%
-Item 3 2,377 2,108 99.11%
-Item N ... ... ...
HELP NEEDS 617,451,515,
QUERY :
CREATE MEMBER CURRENTCUBE.[Measures].[Num Stores In-Stock]
AS COUNT(
FILTER(
CROSSJOIN(
DESCENDANTS(
[Product].[Item].CURRENTMEMBER,
[Product].[Item].[UPC]
),
DESCENDANTS(
[Division].[Store].CURRENTMEMBER,
[Division].[Store].[Store ID]
)
),
[Measures].[Inventory Qty] > 0
)
),
FORMAT_STRING = "#,#",
NON_EMPTY_BEHAVIOR = { [Inventory Qty] },
이 쿼리 구문이 다른 "상점의 수는 판매/재고 부족/기타의 무리에 사용됩니다 여기에 위의 결과를 얻을 수"새로운 "쿼리입니다 . "- 계산 된 측정 값을 큐브에 입력하고 하단의 [재고 수량] 조건을 변경하거나 추가 조건을 연결합니다.
이 쿼리는 실행하는 데 2-3 분이 걸릴 수 있습니다.이 쿼리는이보고 대상 사용자에게 너무 길기 때문에 누구든지 쿼리로드를 줄이거 나 더 효율적으로 재 작성하는 방법을 생각할 수 있습니까?
감사합니다.
UPDATE 2014년 2월 24일 : 우리는 관련된 MDX를 많이 무시하고, DSV 우리라는 이름의 쿼리에 플래그 값을 추가하여이 문제를 해결했다. 우리는 단순히 쿼리라는 사실 테이블이 추가 ...
CASE WHEN [Sales Qty] > 0
THEN 1
ELSE NULL
END AS [Flag_Selling]
... 우리는 - 대신에 "판매하는 매장의 수"에 대한 MDX 코드에서 필터 명령을 수행하는 예를 들어
, 큐브에서 LastNonEmpty로 이러한 측정 값을 단순히 집계했습니다. 전체 MDX 쿼리보다 훨씬 빠르게 롤 업합니다.
이 데이터도 시간에 따라 바인딩되므로 차원에 특성을 추가해도 반드시 작동하지는 않습니다 ... 그러나 필자는 언급 한 것처럼 DSV의 사실 테이블에 대한 이진 플래그를 생각했습니다. 나는 그것을 시도하고 다시보고 할 것입니다. –
추천대로 큐브에 조건을 모델링 했으므로 작업 속도가 약 5 배 빨라졌습니다. 우리가 MDX로 너무 멋지게하려고 노력하고 있었던 것을 생각해라! –