Power BI

Power BI 보고서 작성 # 3

s2h15 2024. 5. 2. 17:41
728x90

 

  두 가지의 선택한 연도/월 을 기준으로 하나의 시각적 개체에 일별 주문금액 합계 추세 확인하기

 

이전에 했던 방법에서 너무 많은 테이블을(관계 설정이 되어있지 않은) 사용하였어서

추가적으로 테이블을 축소시키고자했었는데 결국에는 총 관계가 설정되어있지 않은 두 개의 Calendar 테이블과

Fact 테이블과 관계가 설정되어있는 원본 Calendar 테이블 이렇게 총 세개가 필요하다는 결론을 내리게 되었다.

 

SelectedSM1 =
    CALCULATE(
        SUM('FACT_InternetSales'[SalesAmount]),
        FORMAT('FACT_InternetSales'[OrderDate],"YYYYMM")  = CONCATENATE(SELECTEDVALUE('DIM_Calendar (4)'[Year]) , FORMAT(SELECTEDVALUE('DIM_Calendar (4)'[MonthNo]) , "00")
        ))

 

 

>> 추가적으로 연도와 월로 나누어져있는 슬라이서를 통해 그 선택된 값으로 연도와 월이 동일한 조건을 만족하는 주문 내역을 조회하는 구문으로 수정하였다.

 

 

○ 숫자의 빈 자릿수 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])

 

측정값 하나로 평균 배송기간을 구하려 했으나

새 열을 생성하여 주문일자와 배송도착 일자의 차를 구하고

DeliveryPeriod = DATEDIFF([OrderDate],[DueDate],DAY)
 
이를 측정값으로 평균을 구하는 방법을 사용하였다.
 
평균전체배송기간 = AVERAGE('FACT_InternetSales'[DeliveryPeriod])
 
 
 

○ 당월누계 수정

당월 누계에서 공백이 나올 경우 연간 누계값이 나오도록하기

 

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의 테이블 식에 걸어주었다.

 

728x90