Views 의 aggregation 에 관해..

안녕하세요!
드루팔은 정말 무궁무진 하네요. 한가지 이해가 안되는 기능이 있어서요.
바로 Views 의 Aggregation 인데요, 노드의 값이나 ID 를 이용하여 생성된 노드의 갯수및 최대값, 합계등을 구할수 있는 기능입니다만..
이 aggregation 기능에 다른 필드의 값을 붙여넣는 과정에서 이해가 안되는것들이 있습니다.
현재 만들고 있는 기능은 타임테이블입니다.
정보 Content type엔 월~일까지 요일필드가 있고 시작시간, 종료시간 필드가 있습니다.
노드에는 월요일 부터 일요일까지의 값중 하나만 들어가 있구요.

한 유저가 월요일 부터 일요일까지 일을 했고, 7개의 노드를 가지고 있습니다.
Views 의 aggregation 기능을 이용하여 각 요일 필드를 SUM 으로 묶어놨습니다.
홍길동 월:10시간 화: 20시간 수:15시간 ... 일:10시간
이런식 입니다.
(게시판에 사진 첨부할수 있는 기능이 있음 좋겠네요.)
그런데 각 노드엔 시작과 종료시간이 있는데, 원하는것은 views 에서 각 필드에 REWRITE RESULTS(Rewrite the output of this field)를 이용하여
월요일필드는 SUM 으로, 시작,종료시간은 그 뒤에 붙일 생각인데요.
문제는 노드가 하나로 합쳐져 있다보니.
각 노드에 해당하는 시작,종료시간 필드를 어떤식으로 묶어야 할지 난감합니다.
시간필드를 ID 로 정렬하면 이 Row 엔 모두 동일한 값이 들어갑니다만.
월요일의 시작시간 따로, 화요일 시작시간따로 묶으려면
aggregation 의 어떤값을 사용해야 하나요?
설정값중 Group column 과 Group columns (additional) 은 어떤것을 의미하는지도
궁금합니다.

우선 이미지 업로드 관련해서 알려 드립니다. 이전에

우선 이미지 업로드 관련해서 알려 드립니다.

이전에 외부 IMG태그를 본문에 허용했습니다만, 이보다 더 편하게 쓰기를 원하시는 거군요.

그래서,

파일 첨부 기능과 아울러 이미지 컨텐츠 생성 권한을 cotnals2님께 방금 설정해 드렸습니다.

----------

음... 질문하신 내용이 저희에게 다소 복잡해 보입니다.

요건 정의를 더 심플하게 해 주시면 이해할 것 같습니다.

게다가 요건이 이해되면, 특정 방법에 종속되지 않고

또다른 방식으로 해결할 수도 있으리라 생각합니다.

부가적인 것입니다만,

- 각 요일을 노드로 나눈 것이 의아했습니다.

여러 사람의 요일 설정이 뭉쳐버린다는 오해가 생겼어요.

==> 혹 한 사람당 7개씩 요일 노드가 배당됐다고 이해하면 맞나요?

혹 사용자들의 (출입상황판 같은) 근태관리나

혹 사용자들의 (출입상황판 같은) 근태관리나 타임카드의 집계가 최종 목적이라면,

Views 의 aggregation 이외에도 방법이 여럿 있을 듯 합니다.

-----

그런데 cotnals2님의 정성이 이미 많이 들어간 것이라서
지금의 방법이 바뀌는 것이 번거로울까봐 염려되네요.

그렇다면 드루지기들도 머리를 모아 지금 상황의 질문을
이해하도록 노력해 보겠습니다.
설명을 조금 더 주시기를.

- "노드가 하나로 합쳐져 있다보니." 이 부분이 이해가 안됐습니다.

윗글에

윗글에 보충사진첨부했습니다.
http://palpal.org/node/577

연관된 모듈로는 Views Crosstab :

연관된 모듈로는

Views Crosstab : (Drupal 6)
This views style plugin lets you display views results as a crosstab (also commonly called a pivot table) - grouping rows by one field, columns by another, and using an aggregate function (count, sum etc) of a third field for the table data.
하나의 필드를 참조하여 rows를 그룹핑 시켜주는 기능.
http://drupal.org/project/views_crosstab

Views Cross Join : (Drupal 7)
Allows to cross join entities in Views. This is an essential tool to bring in not related data. For example you want to display two nodes in the same row, but there is no reference between them. Then you could cross join all nodes. Important all nodes get joined in, so you need to limit the result with filters and arguments.
모든 노드를 묶은후 출력.
http://drupal.org/project/views_cross_join

Views Crosstab : (Drupal 6)가 가장 가까워 보입니다만.. 제가 D7 을 사용하고 있어서요. 아직 D7 버전 개발이 안되고 있어 아쉽습니다.

아직도 사양이 이해가 안되고 있습니다. 궁금한 것 몇

아직도 사양이 이해가 안되고 있습니다.

궁금한 것 몇 개 적습니다.

- 한 사람당 7개씩 요일 노드가 배당됐다고 이해하면 맞나요?

- "노드가 하나로 합쳐져 있다보니." 이 부분이 이해가 안됐습니다. 풀어서 안내해 주시면 감사.

- "월요일필드는 SUM 으로, 시작,종료시간은 그 뒤에 붙일 생각인데요" 에서 왜 월요일에 합계를 넣으려고 하는지? 통상적으로 합계는 동적인 결과라서 어떤 필드에 넣지 않는 것이 좋을 듯 한데요. 계산해 넣는다면 computed field 등으로.

질문만 늘어 아쉽네요. 헤메고 있습니다.

- 한 사람당 7개씩 요일 노드가 배당됐다고 이해하면

- 한 사람당 7개씩 요일 노드가 배당됐다고 이해하면 맞나요?
네 맞습니다.

- "노드가 하나로 합쳐져 있다보니." 이 부분이 이해가 안됐습니다. 풀어서 안내해 주시면 감사.
views 의 aggregation 을 쓰면 노드여러개가 한줄에 겹치는 효과를 가져올수있습니다.
SUM 을 쓰던 MAX 를 쓰던, 첫번째 첨부파일을 보시면 실제 노드에는 현재 요일에 데이터 말고는 0을 가지고 있기 때문입니다.
이 기능을 사용하지 않고서는 7개요일 필드면 views 에 7개 줄을 할당해야 할겁니다.
(첫번째 스샷)

- "월요일필드는 SUM 으로, 시작,종료시간은 그 뒤에 붙일 생각인데요" 에서 왜 월요일에 합계를 넣으려고 하는지? 통상적으로 합계는 동적인 결과라서 어떤 필드에 넣지 않는 것이 좋을 듯 한데요. 계산해 넣는다면 computed field 등으로.
합계는 views aggregation 의 SUM 을 이용한다는 말이었습니다. 단순히 열 합치기를 위해서 말이죠. MAX 를 쓰던 SUM 을 쓰던 상관없습니다.

질문의 요지는 이렇습니다.
예를들어 views aggregation 을 이용중에 각 필드에 링크를 걸어주려고 한다면
통상적으로 title 을 불러오거나 nid 를 이용해 link 를 만들어 주어야 합니다만
여러노드가 한줄로 합쳐져 있는 상태에서는 title 이나 nid 필드를 따로 불러오게 될 경우 이 형식이 풀려버리게 됩니다. (exclude 를 이용해도 줄이 다 풀려버립니다.)
그래서 nid 를 참고하는 요일필드를 computed 로 7개 만들고 불러와서 참조해야 합니다. 이렇게 하면 필드 한개를 제외한 나머지 6개 필드는 값을 0으로 만들수있기 때문에
aggregation 에서 SUM 이나 MAX 값으로 열을 하나로 합칠수 있게 때문입니다.
하지만.. 기능을 하나 넣으려면 저런 컨텐트타입인 경우 7개씩 새로운 필드를 추가해야 한다는 말이죠.

*참고를 위해 컨텐트타입 상세정보를 첨부하여 올립니다.

음... 상세설명 부탁드리고는 큰일났다고

음... 상세설명 부탁드리고는 큰일났다고 느낍니다.
올려주신 이미지들을 보고 더 헤메고 있습니다.

질문하신 내용을 만드는 입장에서 100% 이해못한 상태입니다.
뭐라고 힌트를 드리면 좋을지... 그러다, 솔직하게 느낀 점을
말씀드리는 게 더 건설적인 것 같아 아래와 같이 댓글 답니다.

지금의 views aggregation 기준으로 해결책을
함께 살펴보는 것이 좋겠지만, 마음 한 구석에 의문이 많았습니다.

---

1. 반드시 views aggregation 모듈 만인가요? 혹 다른 방법은 어떤가요?

요일을 노드로 지정하는 이유는 설명을 해 주셨습니다만,
요일별 노드를 각 사람별로 지정한 것은 뭔가 불안해 보입니다.
나중에 필드를 이용하는 여타 강력한 모듈들을 사용할 경우,
일일이 노드 데이터를 새로운 필드로 대입해야 할 과제가 대두됩니다.
또한 여타 뷰 작성시 필드 조건걸기, 표시 수정 등에서 애를 먹을 가능성이 있어 보입니다.

지금도 views aggregation 이 좀처럼 원하는 대로 되지 않는데,
나중에 다른 요구조건이 추가되면 더욱 더 수정이 힘들어질 겁니다.

또한 데이터의 낭비가 염려됩니다. 휴무 등으로 입력하지 않는
공백의 요일 데이터도 저장의 대상이 되는 건 아닌지 모르겠습니다.

그래서 대안으로, 아래와 같이 필드 기준을 제안 드립니다.

---

2. views를 통해 필드 여러 개가 한 줄에 겹치는 효과를 낼 수 있습니다.

이미 아실 듯 합니다만, 기록해 봅니다.

- views의 Basic Settings >> Style을 이용하는 방법.
Grid / Bulk Operations / 표 등은 필드들을 한 줄에 표시합니다.
Separator나 CSS를 이용하면 보다 더 정교하게 조작 가능하지 않을까요.

- http://drupal.org/project/views_fields_combine
모듈(7.x 대응)을 이용하는 방법도 있습니다.

- 시간적 여유가 된다면 직접 테마링을 하는 방법도 있을 것 같습니다.
views-view-field.tpl.php

만일 이 방식으로 간다면, 좀 더 자유롭게 필드 만으로 조작할 수 있어,
기간 집계가 더 편하게 표시/수정될 것 같습니다.

---

또다른 대안입니다만,

3. 필드 자체가 시각이 아닌, 기간 정보를 가진 것들이 있지 않나요.

http://drupal.org/project/interval
http://drupal.org/project/timefield
http://drupal.org/project/duration
http://drupal.org/project/timeperiod

이들을 이용하면, 굳이 모든 유저가 일일이 7개씩의 노드를 가지지 않고,
입력 설정한 기간만 저장/표시가 가능해 더 효율적일 것 같습니다.

---

저희가 직접 만드는 실무 입장이 아닌 탓에
오히려 이런 답변과 되질문이 더 번거롭게 하는 것 같아 송구스럽네요.

제일 걱정되는 건, 이미 views aggregation 모듈 기준으로
프로젝트가 너무 진행되서 그대로 갈 수 밖에 없는 상황일까 염려됩니다.

부디 저희 답변이 답답함이나 속상함을 유발하지 않기를 바라며,
발전적인 아이디어나 힌트가 생겼으면 좋겠습니다.

아닙니다. 정말 드루팔은 개발시간을 줄여주고

아닙니다. 정말 드루팔은 개발시간을 줄여주고 생각하는걸 그대로 반영하는데
얼마나 도움이 되는지 모르겠어요.
작은 힌트가 저에게는 큰 도움이 된답니다.
aggregation 을 이용하는것은 다른 대안이 없다고 생각해서 였습니다.

views 는 거의 다 안다고 생각하고 있었는데, 아직 모르는것 투성이었군요.
2번이 잘 이해가 가지 않습니다.
basic settings (7.x) 에 style 관련 항목이 없는데,
Structure > Views > settings 얘기하신건가요?
views 에서 여러줄의 데이터를 어떻게 한줄로 표현하는지 조금더 자세하게 알고싶습니다.
여러열의 데이터를 한 열로 표시하는것은 알고있습니다~

3번은 많이 연구를 해봐야 할것 같습니다.
도움주셔서 정말 감사합니다.

- 역시 모르면 고생뿐입니다 ㅋㅋ