'2009/10'에 해당되는 글 8건
- 2009/10/21 TreeNode의 깊이와 레벨 구하기
- 2009/10/16 RANET OLAP UI LIBRARY
- 2009/10/09 영상처리
- 2009/10/09 수학
- 2009/10/07 SSAS 계산 멤버를 이용해 누적측정값 생성하기
- 2009/10/07 SSAS 시간차원 계층 만들기
- 2009/10/07 SSAS MDX 쿼리 구문
- 2009/10/07 C# Twitter API
class Program
{
class Node
{
public List<Node> Childs = new List<Node>(10);
public Node Parent;
public void Add(Node node)
{
node.Parent = this;
Childs.Add(node);
}
public int Level
{
get
{
return Parent == null ? 0 : Parent.Level + 1;
}
}
public int Depth
{
get
{
int depth = 0;
GetDepth(this, ref depth);
return depth;
}
}
public void GetDepth(Node node, ref int depth)
{
if (node.Childs.Count == 0)
return;
depth++;
int maxDepth = 0;
foreach (Node child in node.Childs)
{
int d = 0;
GetDepth(child, ref d);
if (maxDepth < d) maxDepth = d;
}
depth += maxDepth;
}
public override string ToString()
{
return string.Format("Level = {0}, Depth = {1}", Level, Depth);
}
}
static void PrintAllNode(Node node)
{
Console.WriteLine(node.ToString());
foreach (Node child in node.Childs)
{
PrintAllNode(child);
}
}
static void Main(string[] args)
{
Node root = new Node();
root.Add(new Node());
root.Add(new Node());
root.Add(new Node());
root.Add(new Node());
root.Add(new Node());
root.Childs[0].Add(new Node());
root.Childs[0].Add(new Node());
root.Childs[1].Add(new Node());
root.Childs[1].Add(new Node());
root.Childs[2].Add(new Node());
root.Childs[2].Add(new Node());
root.Childs[0].Childs[0].Add(new Node());
root.Childs[0].Childs[0].Add(new Node());
PrintAllNode(root);
Console.Read();
}
}
다음과 같은 데이터가 있다.
| 일자 | 가입유저수 |
| 2009-01-01 | 10 |
| 2009-01-02 | 20 |
| … | … |
| 2009-03-10 | 20 |
| 2009-03-11 | 12 |
| … | … |
위 테이블은 일자별 가입유저수 데이터이다.
이 테이블이 팩트 테이블이고 시간차원은 년->월->일 계층구조를 갖도록 이미 만들어져 있다고 치자.
(시간 차원 계층만들기 포스트 참조)
일자별 가입유저수는 측정값으로 쉽게 만들수 있지만 다음 표와 같이 누적유저수를 구하려면 어떻게 해야할까?
| 일자 | 가입유저수 | 누적유저수 |
| 2009-01-01 | 10 | 10 |
| 2009-01-02 | 20 | 30 |
| … | … | … |
| 2009-03-10 | 20 | 120 |
| 2009-03-11 | 12 | 132 |
| … | … | … |
이럴 경우 다음과 같이 큐브에 계산 멤버를 생성해서 원하는 측정값을 만들 수 있다.
위 계산멤버의 핵심은 다음 식이다.
Aggregate(
periodstodate(
[날짜].[Calendar].[Calendar Year],
[날짜].[Calendar].CurrentMember
), [Measures].[유저수]
)
Aggregate함수와 PeriodsToDate함수는 SSAS의 MDX 쿼리 구문이다.
PeriodsToDate함수의 구문은 다음과 같다.
PeriodsToDate( [ Level_Expression [ ,Member_Expression ] ] )
Level_Expression은 수준을 반환하는 MDX식이고 필수파라미터이며, Member_Expression은 멤버를 반환하는 MDX식이고 선택파라미터이다.
수준은 차원의 계층을 말하고 멤버는 차원의 멤버를 의미한다.
즉, 위 식은 Calendar Year 수준(년도내에서)에서 마지막 멤버단위로 유저수 측정값을 누적하라는 의미이다.
CurrentMember는 시간차원의 Calendar계층의 최하위 멤버인 Day멤버(2009-01-01)이다.
시간차원 테이블 스키마
데이터원본인 시간차원 테이블 스키마는 다음과 같다. (좀 더 자세한 정보는 시간 차원 테이블 만들기 포스트 참조)
차원 생성
날짜 차원을 생성한 후 다음과 같이 작업을 수행하면 된다.
- Full Date컬럼을 키 특성으로 생성
Full Date특성의 속성을 다음과 같이 변경
- Day Number Of Year 특성 추가
- Day Number Of Year 특성을 복사해서 Day 특성 생성
Day특성의 속성을 다음과 같이 변경
KeyColumns의 Collection은 다음과 같다.
- Month Number Of Year 특성 추가후 Month로 이름 변경
Month특성의 속성을 다음과 같이 변경
KeyColumns의 Collection은 다음과 같다.
- Full Date키 특성에서 Month 특성 관계 제거
- Day 특성에 Month특성 관계 생성
- Calendar Quarter 특성 추가 후 Full Date에서 특성 관계 제거
Calendar Quarter특성의 속성을 다음과 같이 변경
KeyColumns의 Collection은 다음과 같다.
- Month특성에 Calendar Quarter 특성 관계 생성
- Calendar Year 특성 추가 후 Full Date에서 특성 관계 제거
Calendar Year특성의 속성을 다음과 같이 변경
- Calendar Quarter에 Calendar Year 특성 관계 생성
- Calendar 계층 생성
큐브 수정
큐브에 날짜 차원을 추가한 후 다음과 같이 차원 용도를 설정하면 된다.
SELECT
[차원명].[특성].(Children|Members|멤버) ON COLUMNS,
[차원명].[특성].(Children|Members|멤버) ON ROWS
FROM
[큐브명]
WHERE [Measures].[측정값]
ON COLUMNS에 열거된 차원은 X축을 구성하고 ON ROWS에 열거된 차원은 Y축을 구성한다.
- Children
All을 제외한 해당 특성의 모든 멤버
예를 들면 날짜차원의 월특성 중에 All을 제외한 모든 멤버를 출력하고 싶다면 다음과 같이 입력한다.
[날짜].[월].Children
- Members
All을 포함한 해당 특성의 모든 멤버
예를 들면 날짜차원의 월특성 중에 All을 포함한 모든 멤버를 출력하고 싶다면 다음과 같이 입력한다.
[날짜].[월].Members
- 멤버
특정 멤버를 직접 입력한다.
예를 들면 날짜차원의 월특성 중에 01월만 지정하고 싶다면 다음과 같이 입력한다.
[날짜].[월].[01]
참고자료
다음 페이지를 방문하면 Twitter API를 사용한 각 종 언어의 라이브러리가 있다.
http://apiwiki.twitter.com/Libraries#C/NET
이 중 C# 라이브러리는 Yedda 라이브러리가 오픈소스인데다 메소드 단위로 기능이 분리되어 있어 좋다.
http://devblog.yedda.com/index.php/twitter-c-library/



이올린에 북마크하기
Prev
Rss Feed