캘린더 테이블에 "헤세이 31 년/레이와 원년"이라는 제목의 열을 추가하고 싶습니다.

4833 단어 PowerBIDAXPowerQuery
새로운 원호 "영화"가 발표가 된 것입니다만, 캘린더 테이블에 "헤세이 31년/영화 원년"같은 표제용의 열을 추가해 두려고 생각했기 때문에. DAX에서도 가능하지만 캘린더 테이블은 많은 보고서에서 공통이며 Power BI 데이터 흐름에서 공유하는 것이 좋습니다. 그래서 Power Query에서 준비해 두는 것도 중요합니다.



DAX에서



날짜 열 [Date]에서 FORMAT 함수 (DAX)로 "ggge 년"을 지정해도 날짜에 대한 원호 표기가 되기 때문에 조금 손을 더한다.

캘린더 테이블에 계산 열을 추가하는 것이 좋습니다.
ggge+ =
CONCATENATEX(
    DISTINCT(
        UNION(
            ROW(
                "ggge", FORMAT(DATE(YEAR([Date]), 1, 1), "ggge年")
            ),
            ROW(
                "ggge", FORMAT([Date], "ggge年")
            )
        )
    ),[ggge]
    ,"/"
)

"ggge년"의 이용에 대해서는, "모델의 언어"가 ja-jp일 때에 좋은 곳에서 사용하면 좋을 것입니다. 새로운 원호에 대한 지원은 그중 될까.
원래 FORMAT 함수의 경우,

FORMAT 함수(DAX) | Microsoft Docs

CAUTION
The format strings supported as an argument to the DAX FORMAT function are based on the format strings used by Visual Basic (OLE Automation), not on the format strings used by the .NET Framework. Therefore, you might get unexpected results or an error if the argument does not match any defined format strings. For example, “p” as an abbreviation for “Percent” is not supported. Strings that you provide as an argument to the FORMAT function that are not included in the list of predefined format strings are handled as part of a custom format string, or as a string literal.

그러니까.

Power Query에서



보고서를 만들 때마다 Power BI Desktop을 사용하여 복사하는 대신 Power BI 데이터 흐름에서 사용합니다.

함수 부분만
(_date as date) as record =>
let
    EraData = [
        _Year = Date.Year(_date),
        _Era1 = Table.SelectRows(
            Table.SelectRows(
                Source,
                each [EndDate] >= #date(_Year, 1, 1)
            ),
            each [StartDate] <= Date.EndOfYear(_date)
        ),
        _Era2 = Table.AddColumn(
            _Era1,
            "ggge",
            each
                let
                    _StartYear = Date.Year([StartDate])
                in
                    [EraName] 
                    & (
                        if 
                            _Year = _StartYear
                        then
                            "元"
                        else
                            Text.From(_Year - _StartYear + 1)
                    )
                    & "年"
        ),
        _Era3 = Table.Sort(
            _Era2,
            {"StartDate", Order.Ascending}
        )[ggge],
        _Era4 = Table.SelectRows(
            _Era2,
            each
                [StartDate] <= _date
                and [EndDate] >= _date
        )[ggge],
        EraDate = [
            #"ggge+" = 
                if
                    List.IsEmpty(_Era3)
                then
                    Text.From(_Year) & "年"
                else
                    Text.Combine( _Era3,  "/"),
            gggeYMD = Date.ToText(_date, _Era4{0}? & "MM月dd日", "ja-jp")
        ]
    ][EraDate],
    Source = #table(
        type table [
            StartDate = Date.Type,
            EndDate = Date.Type,
            EraName = Text.Type
        ],
        {
            {#date(1868,  1, 25), #date(1916,  7, 29), "明治"},
            {#date(1912,  7, 30), #date(1926, 12, 24), "大正"},
            {#date(1926, 12, 25), #date(1989,  1,  7), "昭和"},
            {#date(1989,  1,  8), #date(2019,  4, 30), "平成"},
            {#date(2019,  5,  1), #date(9999, 12, 31), "令和"}
        }
    )
in
    EraData

Power BI 데이터 흐름의 Power Query Online에는 사용자 지정 함수 호출 명령이 없으므로 Table.AddColumn(캘린더 테이블, each 함수 이름([날짜 열]))이라는 느낌으로 적용하는 단계를 추가하면 됩니다.

생각했어요🙄



캘린더 테이블에는 마음이 멀어지는 행수를 안는 일은 없고, Power BI 데이터 플로우로 공유했다고 해도 갱신하는 것은 거의 전무이므로, 다소 무차해도 전혀 문제가 되지 않지요.
Power Query 기술은 이것에 한정되지 않지만, 로직을 그대로 코드로 변환하는 것이 아니라, 결정표로부터 결과를 읽는 로직을 코드로 변환하면 좋다고 생각하는 것.

기타


  • Power BI 스터디 - connpass
  • Power BI Desktop을 사용하려면
  • Excel에서 Power Query를 사용하려면
  • 좋은 웹페이지 즐겨찾기