○ 두 가지의 선택한 연도/월 을 기준으로 하나의 시각적 개체에 일별 주문금액 합계 추세 확인하기
이전에 했던 방법에서 너무 많은 테이블을(관계 설정이 되어있지 않은) 사용하였어서
추가적으로 테이블을 축소시키고자했었는데 결국에는 총 관계가 설정되어있지 않은 두 개의 Calendar 테이블과
Fact 테이블과 관계가 설정되어있는 원본 Calendar 테이블 이렇게 총 세개가 필요하다는 결론을 내리게 되었다.
>> 추가적으로 연도와 월로 나누어져있는 슬라이서를 통해 그 선택된 값으로 연도와 월이 동일한 조건을 만족하는 주문 내역을 조회하는 구문으로 수정하였다.
○ 숫자의 빈 자릿수 0으로 채우기( zfill과 같은 역할)
FORMAT( 텍스트 또는 숫자값 , "000" ) >>> 세자리수로 만들어줌
Ex) 7 >> 007
○ 평균 배송 기간 구하기
테이블의 값은 한 줄 씩 읽는다 (for each와 같이)
따라서 아래와 같이 max여도 각 행의 Max 값으로 즉 그 고유값을 반환한다.
Mean_DP = DATEDIFF(
max('FACT_InternetSales'[DueDate]),
max(FACT_InternetSales[OrderDate]),
HOUR
)
테이블 전체 행의 특정 컬럼의 Max 값은 아래와 같이 구할 수 있다
test용 = MAX('FACT_InternetSales'[DueDate])
측정값 하나로 평균 배송기간을 구하려 했으나
새 열을 생성하여 주문일자와 배송도착 일자의 차를 구하고
○ 당월누계 수정
당월 누계에서 공백이 나올 경우 연간 누계값이 나오도록하기
SelectedMonth_SA =
IF(SELECTEDVALUE('summ'[Year]) >= SELECTEDVALUE('DIM_Calendar (4)'[Year]) - 2
&& SELECTEDVALUE('summ'[Year]) <= SELECTEDVALUE('DIM_Calendar (4)'[Year]) ,
IF(
SELECTEDVALUE(summ[MonthNo]) = "연간누계",
CALCULATE(
SUM('FACT_InternetSales'[SalesAmount]),
FILTER(
'FACT_InternetSales',
YEAR('FACT_InternetSales'[OrderDate]) == SELECTEDVALUE('summ'[Year])
)
),
IF(
SELECTEDVALUE(summ[MonthNo]) = "당월누계" ,
IF(
CALCULATE(
SUM('FACT_InternetSales'[SalesAmount]),
FILTER(
'FACT_InternetSales',
Month('FACT_InternetSales'[OrderDate]) <= VALUE(SELECTEDVALUE('DIM_Calendar (4)'[MonthNo]))
&& YEAR('FACT_InternetSales'[OrderDate]) == SELECTEDVALUE('summ'[Year])
)
) = 0 ,
CALCULATE(
SUM('FACT_InternetSales'[SalesAmount]),
FILTER(
'FACT_InternetSales',
YEAR('FACT_InternetSales'[OrderDate]) == SELECTEDVALUE('summ'[Year])
)
),
CALCULATE(
SUM('FACT_InternetSales'[SalesAmount]),
FILTER(
'FACT_InternetSales',
Month('FACT_InternetSales'[OrderDate]) <= VALUE(SELECTEDVALUE('DIM_Calendar (4)'[MonthNo]))
&& YEAR('FACT_InternetSales'[OrderDate]) == SELECTEDVALUE('summ'[Year])
)
)),
IF(SELECTEDVALUE('summ'[Year]) == SELECTEDVALUE('DIM_Calendar (4)'[Year])
&& VALUE(SELECTEDVALUE('summ'[MonthNo])) > SELECTEDVALUE('DIM_Calendar (4)'[MonthNo]) ,
BLANK() ,
CALCULATE(
SUM('FACT_InternetSales'[SalesAmount]),
YEAR('FACT_InternetSales'[OrderDate]) == SELECTEDVALUE('summ'[Year])
&& MONTH(FACT_InternetSales[OrderDate]) == VALUE(SELECTEDVALUE('summ'[MonthNo])
)
)
)
)
))
>> 당월 누계의 if문 true 식에 하나의 if 문을 추가하여 0일경우 연간누계값이 , 그 외에는 원래대로 당월누계값이 나오도록 하였음
○ 선택한 연도에 따라 카테고리별 월간 주문금액합계 차트
ProductCategory_Selected_SA =
CALCULATE(
SUM('FACT_InternetSales'[SalesAmount]),
YEAR('FACT_InternetSales'[OrderDate]) == SELECTEDVALUE('DIM_Calendar (4)'[Year]), ALL('DIM_Calendar (4)'))
>> Calculate의 Filter 조건으로 슬라이서에서 선택한 연도값 조건과 ALL 을 사용한 기존 필터 해제를 적용함
값의 동일함을 확인하기 위한 MS SQL 문
○ 주문금액이 가장 많은 도시 10개의 주문금액 합계 반환(RANKX)
Customer City로 그룹화 한 뒤 각각의 도시의 SalesAmount 합계 순위를 통해
가장 주문금액이 많은 도시 10개의 주문금액 합계 반환하는 측정값 DAX 식
Top10_City =
VAR ranking = RANKX(ALLSELECTED('DIM_Customer'[Customercity]) , [총주문금액])
return
CALCULATE(
[총주문금액],
FILTER(
'DIM_Customer',
ranking <=10
))
>> ALLSELECTED를 통해 슬라이서를 통해 선택한 연도와 월에 해당하는 조건 필터를 적용하여
2013년 5월을 선택하였을때 2013년 5월의 주문 내역을 기준으로 도시별 주문금액 합계를 계산하고
그에 대한 순위를 매긴 후 상위 10개만 추출하도록 한다.
ALL을 넣으면 모든 도시의 주문내역을 기준으로 적용된다.
○ 남자가 가장 많이 주문한 카테고리 반환하기
BestP_M =
VAR top_tb =
MAXX(TOPN(1,
SUMMARIZE(
'FACT_InternetSales',
DIM_Products[Category],
"OrderAmount",
COUNTAX(
FILTER('FACT_InternetSales',
RELATED('DIM_Customer'[Gender]) = "Male"),
FACT_InternetSales[SalesOrderNumber])),
[OrderAmount],DESC),
[Category])
return top_tb
>> COUNTAX를 통해 조건에 맞는 주문 내역의 행 개수(즉, 주문 횟수) 를 통해 가장 많은 주문을 한 카테고리를 반환한다.
MAXX는 2열 1행으로 되어있는 값에서 하나의 Category 데이터를 추출하기 위해 사용하였다.
○ 남자가 주문한것 중 가장 높은 매출을 보이는 카테고리 반환
BestP_M =
VAR top_tb =
MAXX(TOPN(1,
SUMMARIZE(
FILTER('FACT_InternetSales' , RELATED(DIM_Customer[Gender]) = "Male"),
DIM_Products[Category],
"OrderSalesAmount",
[총주문금액]),
[OrderSalesAmount],DESC),
[Category])
return top_tb
>> 위와 동일하나 행의 개수가 아닌 총 주문금액을 통해 순위를 매겼다.
또한 Filter를 Summarize의 테이블 식에 걸어주었다.
'Power BI' 카테고리의 다른 글
Power BI 보고서 작성 # 5 (0) | 2024.05.10 |
---|---|
Power BI 보고서 작성 # 4 (0) | 2024.05.08 |
Power BI 보고서 작성 # 2 (2) | 2024.04.25 |
Power BI 보고서 작성 # 1 (0) | 2024.04.24 |
Power BI - 데이터 적재 , ETL (4) | 2024.04.23 |