Power Query로 신 캘린더에서 날짜를 안내 (UI)

4886 단어 ExcelPowerQuery
조금 전에 소재로 한 D-Three씨의 아래의 기사의 내용을 UI로 어떻게든 하려고 하는 기사입니다

신 Excel의 신 달력 (?)에서 날짜를 안내
htps : // 이 m / D-Th 리 / / ms / 에 d9814b4b51f2bf9 아 dcf

 

행 밖에 있는 데이터를 가져오는 방법(Power Query 초보자용: 임시)
htps : // 이 m / o lt_yt / ms / 87d1cb9d041685 a3c65a

이 사적으로 데이터의 횡단 빼기라고 부르는 방법의 응용한 처리입니다

전체 처리



각 단계의 작업을 별도의 열로 유지하도록 수정
'중복된 열'과 '#'이름이 변경된 열''은 설명을 위한 단계입니다.
실제로 필요하지 않습니다.

let
    //元データJSON
    X0 = "7ZY7DsIwEAXv4joS6+df4CqYMkdIhbg7LlIg4mIKChylsOREI6eY7Mj3p6trWkqsay42u1t7DGbmprbJaUntjffuNRFOkAuQi5BLkMuQK5CbIXftcTJZvVhsy3/SMnaqoBVBK4JWBK0IWhG0ImhF0Iq6VvZcgD6oDvhVhkEXUAU0AUVAD1CDpxr+KlbbkKfvIR8zWZ2/+YzVkLEKdErOqP0ualsM8i4GQ6btKPewftQebw==",

    //テーブル変換部
    X1 = Binary.FromText(X0),
    X2 =Binary.Decompress(X1,Compression.Deflate),
    X3 =Table.FromRecords(Json.Document(X2,932)),
    //テキスト化のために居れたスペース削除でNULL化
    置き換えられた値 = Table.ReplaceValue(X3," ",null,Replacer.ReplaceValue,{"年月"}),

    //処理部
    追加された条件列 = Table.AddColumn(置き換えられた値, "1", each if [日] = "1" then "〇" else [年月]),
    重複された列 = Table.DuplicateColumn(追加された条件列, "1", "1 - コピー"),
    下方向へコピー済み = Table.FillDown(重複された列,{"1 - コピー"}),
    重複された列1 = Table.DuplicateColumn(下方向へコピー済み, "1 - コピー", "1 - コピー - コピー"),
    上方向へコピー済み = Table.FillUp(重複された列1,{"1 - コピー - コピー"}),
    重複された列2 = Table.DuplicateColumn(上方向へコピー済み, "1 - コピー - コピー", "1 - コピー - コピー - コピー"),
    置き換えられた値1 = Table.ReplaceValue(重複された列2,"〇",null,Replacer.ReplaceValue,{"1 - コピー - コピー - コピー"}),
    重複された列3 = Table.DuplicateColumn(置き換えられた値1, "1 - コピー - コピー - コピー", "1 - コピー - コピー - コピー - コピー"),
    上方向へコピー済み1 = Table.FillUp(重複された列3,{"1 - コピー - コピー - コピー - コピー"}),
    #"名前が変更された列 " = Table.RenameColumns(上方向へコピー済み1,{{"1 - コピー", "2"}, {"1 - コピー - コピー", "3"}, {"1 - コピー - コピー - コピー", "4"}, {"1 - コピー - コピー - コピー - コピー", "5"}})
in
    #"名前が変更された列 "

핵심 부분 설명



필의 「누설」과 그 대책



채우기 동작은 null이 있는 한 값을 계속 복사합니다.
아래와 같이
원하는 경계에 정지시키는 문자열이 없는 경우
아무것도 생각하지 않고 위로 채우면 이렇게
내용이 밖으로 누설됩니다(4/21~4/30에 5월이 들어 버리고 있다)

이것을 해결하는 방법은 원하는 경계에
뭔가 null 이외가 들어가는 열을 만들어
채우기 누출을 멈추고

조건 열에서 구분자 만들기



이러한 내용을 해결하는 방법으로
조건 열로 경계를 만들고
이번에는 경계 위치에 가장 가까운 위치가 움직이기 어렵다.
X 월 1 일을 임시 경계로 처리합니다 (이런 안정된 경계를 찾는 것이 중요).
방법으로서는 조건열로 일이 1의 곳에 「〇(치환의 방해를 하지 않으면 무엇이든 좋다)」를 넣는 조작을 합니다

채우기 전에이 조건 열에서


단순화



이번 원본 데이터는 코드 줄을 줄이기 위해 월 일 열에도 채우고
처리를 줄이고 있습니다.
let
    //元データJSON
    X0 = "7ZY7DsIwEAXv4joS6+df4CqYMkdIhbg7LlIg4mIKChylsOREI6eY7Mj3p6trWkqsay42u1t7DGbmprbJaUntjffuNRFOkAuQi5BLkMuQK5CbIXftcTJZvVhsy3/SMnaqoBVBK4JWBK0IWhG0ImhF0Iq6VvZcgD6oDvhVhkEXUAU0AUVAD1CDpxr+KlbbkKfvIR8zWZ2/+YzVkLEKdErOqP0ualsM8i4GQ6btKPewftQebw==",

    //テーブル変換部
    X1 = Binary.FromText(X0),
    X2 =Binary.Decompress(X1,Compression.Deflate),
    X3 =Table.FromRecords(Json.Document(X2,932)),
    //テキスト化のためにいれたスペース削除でNULL化
    置き換えられた値 = Table.ReplaceValue(X3," ",null,Replacer.ReplaceValue,{"年月"}),

    //コア部
    追加された条件列 = Table.AddColumn(置き換えられた値, "A", each if [日] = "1" then "〇" else [年月]),
    //上下方向へフィル、逆だと1日がおかしくなります
    下方向へコピー済み = Table.FillDown(追加された条件列,{"A"}),
    上方向へコピー済み = Table.FillUp(下方向へコピー済み,{"年月"}),
    //Aと年月から必要な物だけ抜取りカスタムへ入れる
    追加された条件列1 = Table.AddColumn(上方向へコピー済み, "カスタム", each if [A] = null then [年月] else if [A] = "〇" then [年月] else [A])
in
    追加された条件列1


페셜 선크스



테이블을 바이너리(JSON)화하거나 테이블로 되돌리거나
htps : // 이 m/타누키_p 쪽에 x/있어 ms/5f9991아 c2712f91f5f이다

좋은 웹페이지 즐겨찾기