21
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

HASONEVALUE関数 を使う

Last updated at Posted at 2022-12-09

はじめに

この記事は、Microsoft Power BI Advent Calendar 2022 に参加しています。
勇気を出して初めての投稿になります:heart_exclamation::grinning:
今年、Power BI勉強会の「DAX Boot Camp1」で教えていただいた HASONEVALUE関数 について、書きとめておこうと思います。

HASONEVALUE関数 とは

columnName のコンテキストが 1 つの個別の値のみにフィルター処理されている場合、TRUE を返します。
それ以外の場合は、FALSE を返します。

HASONEVALUE関数 を使ってやりたいこと(完成形)

実際の勉強会では、HASONEVALUE関数 を使って What-if 分析 をするという内容でしたが、本稿ではシンプルな例で説明します。
クリームパン 250円、ドーナツ 200円、コーヒー 200円 を購入した際の合計金額 650円 に対して、「イートイン」の場合、「テイクアウト」の場合の税込み合計金額をスライサーで切り替えて表示させます。
例としてはどうかと思いますが(笑):sweat_smile:、説明することを目的としているため、何卒ご容赦ください:pray:

Excel の Power Pivot を使います。

:point_down:イートインの場合
[イートイン(標準税率)]のスライサーを選択することにより、「合計金額」として 標準税率 10% の税込み金額を表示させます。
001.JPG
:point_down:テイクアウトの場合
[テイクアウト(軽減税率)]のスライサーを選択することにより、「合計金額」として 軽減税率8% の税込み金額を表示させます。
002.JPG

準備

用意したテーブル

■ 販売テーブル(ファクトテーブル)

商品名 個数
クリームパン 1
ドーナツ 1
コーヒー 1

■ 商品マスタ

商品名 単価
クリームパン 250
ドーナツ 200
コーヒー 200

■ 消費税率マスタ

販売形態 消費税率
イートイン(標準税率) 10%
テイクアウト(軽減税率) 8%

データモデル

004.JPG

商品名を キー にして、「商品マスタ」と「販売テーブル」間に 1対多 のリレーションシップを作成します。
スライサーとなる「消費税率マスタ」は、どのテーブルともリレーションシップでつながれていません。

計算列

「販売テーブル」に、「金額」を計算する 計算列 を追加しています。

金額=[単価]*[個数]

005.JPG

HASONEVALUE関数を使ってメジャーを作成する

さていよいよ本題の HASONEVALUE関数 を使って、メジャーを作成します。

合計金額:=
SUM(
    '販売テーブル'[金額])*IF(
     HASONEVALUE('消費税率マスタ'[販売形態]),VALUES('消費税率マスタ'[消費税率])+1,1
)

006.JPG

スライサーでいずれかの値が選択されている、つまり「消費税率マスタ」の「販売形態」列がひとつの値でフォルターされている場合に HASONEVALUE関数 は true を返すため、IF関数 の1つめの引き数の処理(消費税率の消費税を載せる)が実行されます。
スライサーでいずれの値も選択されていない場合には、 false が返され、IF関数 の2つめの引き数の処理(金額の合計に 1 を掛ける)が実行されるため、「金額」の合計が返ります。

うまくいきました!

:point_down:イートインの場合
スライサーで[イートイン(標準税率)]が選択されているため、HASONEVALUE 関数は true を返し、IF関数の1つめの引数の処理が行われ「合計金額」として 標準税率 10% の税込み金額 715円 が表示させます。
001.JPG
:point_down:テイクアウトの場合
スライサーで[テイクアウト(軽減税率)]が選択されているため、HASONEVALUE 関数は true を返し、IF関数 の1つめの引数の処理が行われ「合計金額」として 軽減税率8% の税込み金額 702円 が表示させます。
002.JPG
:point_down:スライサーがかかっていないとき
「合計金額」として 金額の合計 = 税抜きの金額 650円 が表示されます。
003.JPG

Power BI でも試してみました

Power BI でも試してみたところ、Excel 同様にうまくいきました。

:point_down:イートインの場合
007.JPG
:point_down:テイクアウトの場合
008.JPG
:point_down:スライサーが選択されていないとき
009.JPG

おわりに

おかげさまで、Power BI勉強会 がマイルストーンとなり、何とか学習を続けることができています。
勉強会の皆さんには、優しくアドバイスをしていただいたり、温かく励ましていただいたり、とても助けられています。
この場を借りてお礼申し上げます。本当にいつもありがとうございます :heart_exclamation:

  1. 「DAX Boot Camp」は、みんなで DAX の訓練(勉強)する勉強会です。通常は月に一度、土曜日の午後に実施されています。

21
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?