Help us understand the problem. What is going on with this article?

タイム インテリジェンス 関数は見えるようにして確認するとよいのではなかろうか。

先般の Power BI 勉強会 #16 で質問が上がっていたのだけどあまり時間が取れなかったので、改めてこんな感じで勉強するとよいですよって話。質問の内容としては、

SAMEPERIODLASTYEAR と PREVIOUSYEAR どう違うの?

まぁ、別の関数ですし、得られる結果は異なりますよね。異なることはわかっているけどどうなの?って感じだったかな。違いを覚えないと使うことはできないから、当たって砕けろだけじゃなくて、どのように理解しやすくするか。特にタイム インテリジェンス関数は似た感じのもの多い気がするし。

まずはリファレンスをきちんと読む

支援はあるけれども、さっぱりわからんですよね。なので、リファレンスはきちんと読んだ方がいい。
image.png
image.png

例えば、SAMEPERIODLASTYEAR 関数 (DAX) - DAX | Microsoft Docs

現在のコンテキストで、指定された dates 列の日付から 1 年前にシフトした日付の列を含むテーブルを返します。

読んでも、うーん🤔ってこともあるでしょう。目に見える形だ確認したほうがよいよね。でも、リファレンスがまったく意味がないということではなく、とても重要な記述があるのでお見逃しなく。

パラメータ-

タイム インテリジェンス関数ですから "日付列" が重要です。構文にある Dates は 日付テーブルの 日付列を指定することがほとんどなのではないかと。

DAX構文
SAMEPERIODLASTYEAR( <dates> )

ちなみに、SAMEPERIODLASTYEAR は

DAX-DATEADD
DATEADD( <Dates>, -1, YEAR )

です。

戻り値

戻り値の型にはいくつかあるのだけど、多くの場合、列をひとつだけ持つテーブル で その値は 日付。なかには、列 / 行 ともにひとつだけのテーブルスカラ値 が戻るものもある。このあたりはよーく確認してください。
ただ、DAX では 1 行1 列のテーブルは暗黙の変換でスカラ値としてくれるのは便利ではあるけれども、なぜうまくいくのかぐらいは確認しておいた方がよいのでしょう。暗黙の変換をあてにしない記述は大事なことだと思うのです。

見えるようにして確認するとよい

例に挙げるタイム インテリジェンス 関数は 日付の範囲を戻す感じだから 範囲の両端と行数を メジャー でしたたて、マトリクス や テーブルに配置してみる感じで。

SAMEPERIODLASTYEAR
SPLY = 
VAR DateFilter = SAMEPERIODLASTYEAR( 'Dates'[Date] )
VAR ResultValue =
    CONCATENATEX(
        CALCULATETABLE(
            {
                MIN( 'Dates'[Date] ),
                MAX( 'Dates'[Date] ),
                FORMAT( COUNTROWS( 'Dates' ), "0" )
            },
            DateFilter
        ),
        [Value], " - "
    )
VAR Result =
    IF(
        NOT ISEMPTY( DateFilter ),
        ResultValue
    )
RETURN
    Result
PREVIOUSYEAR
PY = 
VAR DateFilter = PREVIOUSYEAR( 'Dates'[Date] )
VAR ResultValue =
    CONCATENATEX(
        CALCULATETABLE(
            {
                MIN( 'Dates'[Date] ),
                MAX( 'Dates'[Date] ),
                FORMAT( COUNTROWS( 'Dates' ), "0" )
            },
            DateFilter
        ),
        [Value], " - "
    )
VAR Result =
    IF(
        NOT ISEMPTY( DateFilter ),
        ResultValue
    )
RETURN
    Result

image.png

カレント行の日付の範囲から得られる結果(ここでは日付のセット)の違いの整理はつけられそう。なので具体的な結果もこんな感じになる。

受注額 (SPLY) = 
CALCULATE(
    [受注額],
    SAMEPERIODLASTYEAR( 'Dates'[Date] )
)
受注額 (PY) = 
CALCULATE(
    [受注額],
    PREVIOUSYEAR( 'Dates'[Date] )
)

いわゆる未来の日付についてなにも手当てしてないから別途実装のこと。
image.png

思ったこと🙄

4、5 年前 こんなことやってたなぁと思いだした。読むだけ聞くだけではダメなんですね。試さないと。

その他

PowerBIxyz
#PowerBI とか #PowerQuery とか Microsoft MVP for Data Platform (2016,2017-2018,2018-2019,2019-2020,2020-2021), Access (2011-2015)
https://powerbi.connpass.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした