Power BI

Power BI 보고서 작성 # 7

s2h15 2024. 5. 17. 09:14
728x90

 

 

 

 

 

 

○ 행렬에서 행 여러개 계단형 레이아웃 제거 + 드릴다운

세 개의 컬럼을 행렬의 행부분에 추가하고 드릴 다운을 한 뒤

계단형 레이아웃을 제거하면 세 개의 행이 각각 다음 사진과 같이 표시되게 된다.

 

연결관계가 없는 경우 행에 따른 데이터 반환하는 측정값

 

Fact 테이블의 값이 하나로 이루어져 그에 대한 구분 컬럼이 존재하는 것이 아니라

재료비 , 노무비 , 경비 등에 대한 값이 각각의 컬럼으로 구성되어있는 경우

다음과 같이 각각의 측정값을 생성해서 switch문을 통해 반환하도록함

이때 비교는 아래 표와 같이 해당하는 level 1,2,3에 따라 index 컬럼을 생성하여 비교하도록 하면 측정값 구문을 간결하게 만들 수 있음

@@실적 =
SWITCH(
    SELECTEDVALUE(BI_CUSTOM_COL_DIV_MST[IDX]),
    1 , [@생_실적],
    2 , [@재변_실적]+ [@노변_실적] + [@노고_실적] +  [@경변_실적] + [@경고_실적],
    3 , [@재변_실적],        
    4 , [@재변_실적],
    5 , [@노변_실적] + [@노고_실적],
    6 , [@노변_실적],
    7 , [@노고_실적],
    8 , [@경변_실적] + [@경고_실적],
    9 , [@경변_실적],
    10 , [@경고_실적]
)
 

하나의 행만 다른 데이터 형식으로 반환되게 하기

 

전년비 실적의 경우 생산액의 경우에는 %로 백분율 값이 나오고

나머지는 값의 차가 정수로 나와야하는 상황

 

백분율 값을 반환하도록 다음과 같이 %를 붙임

@생_전년비_실적 =
FORMAT(ROUND((([@생_실적] - [@생_전년실적]) / [@생_전년실적]) * 100 , 1) , "#.0") & "%"
 
 
이때 값이 없는 경우에 % 만 반환되는 문제 발생
이를 해결하기 위해 아래와 같이 ISBLANK를 사용하여 값이 없을 때는 아무것도 반환하지 않도록 설정함
 
@@전년비_실적 =
SWITCH(
    SELECTEDVALUE(BI_CUSTOM_COL_DIV_MST[IDX]),
    1 ,
    IF( ISBLANK([@생_실적]) , "", [@생_전년비_실적]),
    2 , [@재변_전년비_실적]+ [@노변_전년비_실적] + [@노고_전년비_실적] +  [@경변_전년비_실적] + [@경고_전년비_실적],
    3 , [@재변_전년비_실적],        
    4 , [@재변_전년비_실적],
    5 , [@노변_전년비_실적] + [@노고_전년비_실적],
    6 , [@노변_전년비_실적],
    7 , [@노고_전년비_실적],
    8 , [@경변_전년비_실적] + [@경고_전년비_실적],
    9 , [@경변_전년비_실적],
    10 , [@경고_전년비_실적]
)

 

 

○ 값이 표현되지않고 아이콘만 표현되게 하기

 

먼저 아래와 같이 빈값을 반환하는 측정값을 생성한 뒤 이를 값에 추가해줌

@@Signal = ""

 

해당 측정값의 조건부 서식으로 아래와 같이 기준으로하고자 하는 필드를 지정하고 

조건부 서식을 작성하면 됨

○ 그래프 범례 - 원하는 컬럼이 없을때 

 

원하는 컬럼이 존재하지 않는다면 범례를 위한 테이블을 생성해줌

인덱스는 정렬을 위해 추가함

이때 측정값으로 해당하는 범례에 따라 값이 반환되도록 설정함

 

 

막대그래프도 동일하게 설정하였음

X축(당기 , 전년 , 계획)에 해당하는 값들이 있는 테이블을 위와 같이 생성하고

범례(경비, 노무비 , 재료비)와 같은 값들에 대한 측정값을 각각 생성함

각각의 측정값은 아래와 같이 해당하는 X축 값에 의해 다른 값을 반환하도록 Switch 문을 사용하였음

@@비율분석_노무비 =
SWITCH(
    SELECTEDVALUE('TB2'[Row]) ,
    "계획" , ([@노변_계획] + [@노고_계획]) / [@생_계획],
    "당기",
    ([@노변_실적] + [@노고_실적]) / [@생_실적],
    "전년" , ([@노변_전년실적] + [@노고_전년실적]) / [@생_전년실적]
)

 

 

 

 

 

선택한 연월 기준으로 해당 월까지만 반환하는 행렬 생성하기

 

슬라이서는 연결관계가 없는 Calendar 테이블 ,  행렬의 열은 Fact 테이블과 연결관계가 있는 Calendar 테이블을 사용

측정값은 아래와 같이 연도가 동일하고 월이 작은 경우에만 값을 반환하도록 설정

++ 당년 누계는 따로 측정값을 생성하지 않고 열합계의 제목만 바꿔줌

SA =
DIVIDE(
    CALCULATE(
        SUM('T_FACT_EOM_SCO_PROD_CLOSE_BASE_SA'[SALES_AMOUNT]),
        'BI_CUSTOM_DATA_TABLE_GRAPH'[YYYY] = SELECTEDVALUE(T_DIM_FND_COM_DAY[YYYY]) ,
        'BI_CUSTOM_DATA_TABLE_GRAPH'[MONTH] <= SELECTEDVALUE('T_DIM_FND_COM_DAY'[MONTH])
        )
    ,
    SELECTEDVALUE(BI_CUSTOM_UNIT_REGION_TABLE[APPLY_AMOUNT])
)

 

 

전월, 전전년도, 전년도 값 구하기

 

 

관계가 끊어진 Calendar 컬럼이 슬라이서로 지정되어있기 때문에 Dateadd 사용하지 못해서 다른 방법으로 전월 , 전년 구함

 

전월 : 1 값이 0이면 연도에서는 1 빼고 월으로는 12 반환하도록

 

PrevMonth_SA =

VAR selectedmonth = SELECTEDVALUE(T_DIM_FND_COM_DAY[MONTH]) - 1

VAR year =

SWITCH(

    selectedmonth,

    0 , VALUE(SELECTEDVALUE(T_DIM_FND_COM_DAY[YYYY])) - 1,

    VALUE(SELECTEDVALUE(T_DIM_FND_COM_DAY[YYYY])))

VAR month =

SWITCH(

    selectedmonth,

    0 , 12,

    selectedmonth)

VAR py =

DIVIDE(

    CALCULATE(

        SUM('T_FACT_EOM_SCO_PROD_CLOSE_BASE_SA'[SALES_AMOUNT]),

       'BI_CUSTOM_DATA_TABLE_GRAPH'[YYYYMM] = FORMAT(DATE(year , month , 1) , "YYYYMM")

        )

    ,

    SELECTEDVALUE(BI_CUSTOM_UNIT_REGION_TABLE[APPLY_AMOUNT])

)

return py

 

 

전년도

연도는 1 빼도 문제가 되지 않으므로 그대로 진행함

PrevYear_SA =

DIVIDE(

    CALCULATE(

        SUM('T_FACT_EOM_SCO_PROD_CLOSE_BASE_SA'[SALES_AMOUNT]),

        DATEADD(T_DIM_FND_COM_DAY[DATE],-1, YEAR),

        'BI_CUSTOM_DATA_TABLE_GRAPH'[YYYYMM] = FORMAT(DATE(SELECTEDVALUE(T_DIM_FND_COM_DAY[YYYY]) -1 , SELECTEDVALUE(T_DIM_FND_COM_DAY[MONTH]) , 1) , "YYYYMM")

        )

    ,

    SELECTEDVALUE(BI_CUSTOM_UNIT_REGION_TABLE[APPLY_AMOUNT])

)

 

 

선택한 연월의 전년도 , 전전년도 구하기

 

아래 식과 같이 max 값을 구하는 calculate 안에 filter로 슬라이서 Calendar 테이블의 date 컬럼을 Dateadd를 통해 설정해준다.

@prevdate =
CALCULATE(
    MAX('T_DIM_FND_COM_DAY'[YYYYMM_NAME]),
    DATEADD('T_DIM_FND_COM_DAY'[DATE] , -1, YEAR)
)

 

 

이걸 사용해서 전년도의 측정값을 구할 수 있지 않을까?

아래와 같이 작성해본 결과 같은 값을 반환하는 것을 확인할 수 있었다.

앞으로 더욱 간결하게 작성하는 것이 가능해질 것 같다

PrevYear_SA =
VAR testym =
CALCULATE(
    MAX('T_DIM_FND_COM_DAY'[YYYYMM]) ,
    DATEADD('T_DIM_FND_COM_DAY'[DATE], -1, YEAR)
)
RETURN
DIVIDE(
    CALCULATE(
        SUM('T_FACT_EOM_SCO_PROD_CLOSE_BASE_SA'[SALES_AMOUNT]),
        'BI_CUSTOM_DATA_TABLE_GRAPH'[YYYYMM] =testym
     
        )
    ,
    SELECTEDVALUE(BI_CUSTOM_UNIT_REGION_TABLE[APPLY_AMOUNT])
)
728x90