[Power BI] 보고서 연습 후 리뷰

sooooora·2024년 8월 9일

Power BI

목록 보기
4/5
post-thumbnail

✅ 중요 포인트

📌BI 단계

  1. 가져오기
  2. 관계/모델링
  3. 시각화
  4. 게시
  • BI를 게시하면 보고서, 의미체계모델 두개의 파일이 게시됨
  • 여기서 의미체계 모델 안에 데이터의 관계/ 모델링/ 측정값이 들어있음
  • import: BI에 데이터를 가져와서 BI에서 데이터가 있는 형태
  • DirectQuery: 원천에서 데이터를 끌어와서 BI에는 데이터가 없는 형태

📌 스타스키마

  • Fact (Transaction) : 상품 구매 데이터
  • Dimention (Master) fact에 대한 기준 정보: 구매 연령, 성별 등에 대한 기준 정보가 들어간 테이블이 여러개 있음

📌 릴레이션

  • 카디널리티 , 필터링 방향

Cardinality

💨 1:1 일대일

  • 두 테이블 모두에서 중복되지 않는 고유한 키를 가질 때 설정
  • 한 테이블의 각 행이 다른 데이블의 정확히 하나의 행과만 관련있음
  • 각 사용자의 고유한 ID가 두 테이블에서 매치
  • 각 사용자 ID는 한 테이블에서 한 사용자의 상세 정보와 다른 테이블에서 그 사용자의 로그인 정보를 정확히 대응시키는 유일한 연결고리

💨 1:N 일대다

  • 한 고객 당 주문은 여러개 일 수 있지만 주문 하나는 한 고객에게만 속함

💨 N:1 다대일

  • 여러 주문이 하나의 고객에게 연결

💨 N:N 다대다

  • 한명의 학생은 여러 개의 과목을 들을 수 있고, 하나의 과목은 여러 명의 학생을 가질 수 있음
  • 중간에 수강 테이블이 관리할 수 있음 수강테이블에는 학생ID, 과목ID가 들어감

크로스 필터

💨 Single 단일방향

  • 1:N 으로 생각해보면 고객 테이블은 고객 필터링을 했을 때 주문 테이블에 영향이 있음
    주문 필터링을 했을 때 고객 테이블에 영향 없음

💨 Both 양방향

  • 필터링이 두 테이블 사이에서 양방향으로 전파
  • 한 테이블에서 선택된 필터가 다른 테이블에도 영향을 미치고 그 반대도 마찬가지
  • 데이터 상호작용이 복잡한 보고서, 대시보드 사용 시 유용하지만, 모델의 복잡성을 늘려 사용 시 주의 필요

릴레이션 설명 출처

✅ Q&A

⚡ 파워쿼리, 새열, 측정값

각각의 적절한 쓰임❓

💨 파워쿼리

  • 물리적인 행동 열만 가능
  • 수집, 가공, 전처리에 많이 사용
  • 작업이력 관리 가능

💨 새 열

💥 파워쿼리 + 새열의 공통점

  • 동일한 작업 방식으로 데이터 가지고 있음
  • ROW 기준 계산

💨 측정값

  • 데이터를 가지고 있지 않음 ➡ 측정값은 테이블에서 아무것도 보여지지 않음
  • 열 기준 값
  • 리소스 display ➡ 기준이 바뀔 때마다 계산을 하여 메모리를 많이 잡아먹음

⚡ 측정값이 너무 많다!

어떻게 나열되게 하는 것이 관리하기 편할까❓

  • 새로운 테이블 (ex) Measure을 만들어서 그 테이블에 측정값만 넣어서 폴더로 정리하기❗❕

✨ 점유율 구하기

  • 구하고 싶은 값 (ex) 매출에 대한 점유율이라면 매출에 대해 합계를 먼저 구해야함
    @ ALLSELECTED로 행 값에 영향을 받지 않고 합계가 다 똑같이 나오게 한 후
    @ 점유율= DIVIDE(매출 값 / 영향 받지 않은 매출의 합계)

✨ 해당연도 모든 월 값 구하기

  • 슬라이서 [년도] 2024년 선택 & 슬라이서 [월명] 08월 선택 ➡ 그래프에 2024년 01월 ~ 08월의 값이 나오게 하기
    @ ALLSELECTED로 슬라이서에 사용된 날짜테이블 전체 제외
    @ TOTALYTD로 위에 값과 날짜의 날짜KEY로 누적값 가져오기
    @ ⭐중요뽀인트⭐ 그래프 만들 때 X축 날짜 테이블이 차원테이블이 아닌 팩트테이블에 있는 열로 가져오기..

⚡ 게시

게시 후 수정사항 바로 새로고침 저장이 될까❓

  • 게시 후 수정사항이 있으면 새로 게시를 해야함
  • 대신 의미체계모델 파일에서 데이터는 새로고침이 가능

⚡ 측정값 작성하는 여러 방법

측정값 작성 시 가독성 관련

  • 두 개의 측정값을 만들어서 사용

⏩ Trend매출_ALL = CALCULATE('Measure'[매출], ALLSELECTED('Calendar'))
⏩ Trend
매출_TOTAL = TOTALYTD('Measure'[Trend매출_ALL], 'Calendar'[날짜Key])

  • 두 개의 측정값을 하나로 만들어서 사용

    ⏩ Trend_매출_TOTAL = TOTALYTD(CALCULATE('Measure'[매출], ALLSELECTED('Calendar')), 'Calendar'[날짜Key])

  • 변수 var를 만들어서 사용

    ⏩ Trend_매출_TOTAL =
    var pre_val= CALCULATE('Measure'[매출], ALLSELECTED('Calendar'))
    return
    TOTALYTD(pre_val, 'Calendar'[날짜Key])

    🆗 세 가지 모두 같은 결과 값임
    가독성, 편의, 사용에 따라 다르게 작성할 수 있는 것!

⚡ SELECTEDVALUE & MAX

슬라이서로 만들어진 부문을 선택 시 부문의 이름이 나오는 카드값을 만들었다.
아무것도 선택하지 않았을 때는 '전사'라고 보여주고 싶어 아래와 같이 SELECTEDVALUE를 사용했다.
SELECTEDVALUE를 아래와 같이 작성할 경우
지정된 열에 값이 하나만 있는 경우 값을 반환하고 그렇지 않은 경우 대체 값을 반환한다.

⏩ 부문별실적 = "부문별 실적 : " & SELECTEDVALUE('table'[부문], "전사")

하지만 원래 SELECTEDVALUE가 대체 값 반환을 해주지 않았기 때문에 MAX도 짚고 넘어가야한다.

아래 사진과 같이 3개의 부문이 있다고 하면
'A' 부문 선택 시 1개, 'B'를 선택해도 1개, 'C'를 선택해도 1개

그렇다면 아무것도 선택되지 않았을 때는..?
-> 3개로 인식된다.
⏩ 그러므로 IF문과 MAX를 사용하여 1개 이상의 값일 때는 "전사"가 반환하게 측정값을 작성할 수 있다.

⚡ BLANK()

행렬차트에서 가운데 구분선이 있으면 좋겠따!?
새 측정값 공백 = BLANK() 만들어서 가운데 넣어주기~!

⚡ 상호작용

기획 시 개체 간의 상호작용도 생각하기
연결되서 보여주는게 좋은가?
굳이 상호작용이 필요없나?

  • 상호작용 편집 방법
    ⏩ 시각적 개체 누르고 서식 -> 상호작용편집 -> 관계 끊고 싶은 시각적 개체 위 오른쪽 버튼 누르기
profile
🌱씨앗이 나무가 되는 과정🌳

0개의 댓글