2017-03-08 1 views
0

MDX 쿼리의 주요 논리를 이해하기 위해 도움을 요청하고 싶습니다. 큐브에서 다른 차원을 쿼리하고 싶습니다. 하지만 : 어떤 경우에는 NULL 값을 숨기고 싶지만 다른 차원에서는 여전히 필요합니다. 제 경우에는 날짜 주를 제공하고 싶습니다. 그리고 기간 내에 매일 날짜가 정해져 있습니다. (데이터가없는 경우에도) 콘텐츠는 주문 번호, 직위 번호 및 회사이며 물론 KPI : OTD_ 고객입니다. null 값 문제를 해결하기 위해 여러 번 시도했지만 MDX에서는 초보자입니다. 나는 NON EMPTY 키워드를 사용하고 또한 비어 있지 않은 기능을 사용하려고 시도했지만, 여전히 결과를 얻지 못했습니다. 한 가지 더 복잡한 것은 기간에 대한 날짜를 필터링하는 것입니다. 실제 날짜를 기준으로 지난 15 주. (이 부분은 정상적으로 작동합니다)MDX 스크립트 - 같은 축에서 공백과 비 공백을 섞습니다.

> SELECT NON EMPTY 
> { [OTD_customer_new] } ON COLUMNS, NON EMPTY 
> { 
> (
> (( strtoset("LASTPERIODS(15,([Date - Plan Delivery Date].[Calendar Week].&[" + left(ltrim("2017 KW 10"),4) +" KW " + right(ltrim("2017 KW 10"),2) + "]))  ") 
> , [Order Number].[Order Number].[Order Number].ALLMEMBERS 
> , [Position Number].[Position Number].[Position Number].ALLMEMBERS 
> ,[Date - Plan Delivery Date].[Day of the Week].ALLMEMBERS 
> ,[Group Structure].[Group Structure].ALLMEMBERS 
> ) ) 
> * 
> ([Date - Plan Delivery Date].[Date].[All].FirstChild: 
> tail 
>  (filter 
>  ([Date - Plan Delivery Date].[Date].[All].Children, 
>   [Date - Plan Delivery Date].[Date].CurrentMember.Name <= Format(Now(), "yyyyMMdd") 
>  ), 1 
>  ).item(0) 
> )) 
> } 
>  ON ROWS 
>  FROM [ProductionCube] 

어디에서 필터를 사용해야합니까? 큐브에서 결과를 쿼리하는 가장 좋은 방법은 무엇입니까? 그것이 정상적인 관계 데이터베이스에있을 때 나는이 목적을 위해 간단한 조인을 사용할 것입니다. 그러나 MDX에서는 스크립트에서 왼쪽과 안쪽 조인의 가능성을 보지 못합니다. 내 이해에 따라 구멍 축은 null 값을 필터링 할 수 있습니다. 너는 어떤 생각을 가지고 있니? (읽어 주셔서 감사합니다) 현재 결과 예제는 찾을 수 있습니다.

답변

1

빈 축을 필터링하도록 설계된 함수 (출력 계산시) 함수를 찾을 수 있습니다. NonEmpty 함수는 집합 계산을 수행합니다. 따라서 다음을 실행하면

Non Empty {Set1} * {Set2} 

비어 있지 않은 레코드가 교차됩니다. 을 실행하면 :

NonEmpty({Set1} * {Set2}, [Measures].[NonEmptyMeasure]) 

당신은 동일한 결과를 얻을 수 있습니다,하지만 정비사는 조금 다르다. 당신이 특정 세트를 필터링 할 경우 이러한 세트 주위에 비어 있지 않은을 사용할 수 있습니다 :

{Set1} * NonEmpty({Set2}, [Measures].[NonEmptyMeasure]) 

Set1과는 필터링되지 않습니다. 그럼에도 불구하고 Set1의 모든 구성원은 Set2의 모든 비어 있지 않은 구성원과 교차 결합됩니다. 대부분 당신이 원하는 것이 아닙니다. 날짜에 추가 된 많은 추가 속성이 있습니다. 빈 레코드에 대해 반환 할 것으로 예상되는 것은 무엇입니까? 난 당신이 반환 할 추측 할 수있다 모든 멤버 말하자면, 선언 된 SET1 날짜 설정되고 Set2를이 회사의 집합은 다음과 같습니다

NonEmpty({Set1} * {Set2}, [Measures].[NonEmptyMeasure]) + { {Set1} - NonEmpty({Set1}, [Measures].[NonEmptyMeasure])} * {Set2}.Item(0).Parent 

설명 :

1. NonEmpty({Set1} * {Set2}, [Measures].[NonEmptyMeasure]) -- returns non-empty records 
2. {Set1} - NonEmpty({Set1}, [Measures].[NonEmptyMeasure]) -- returns empty dates 
3. {Set2}.Item(0).Parent -- returns All member 

결과는 다음과 같이합니다 :

|=====================================| 
| 2016 week 51 | Company1  | 1 | 
| 2016 week 51 | Company2  | 1 | 
| 2016 week 51 | Company3  | 1 | 
| 2016 week 52 | All companies | NULL | 
======================================= 

원하는 결과입니까?

+0

(올린) 아주 좋은 설명 – whytheq

+0

완벽한 전문 조사에 감사드립니다! 그게 내가 필요한거야! 이제 그것이 어떻게 작동 하는지를 분명하고 이해했습니다! 다시 감사합니다! 좋은 하루 보내세요, 친구! – Messersmith

관련 문제