同じIDで異なる名称の統一化について

既出の質問であれば申し訳ございません。

以下図のような同じIDですが購入日付によって異なる名称が使用されているデータがある場合、
最新の日付で購入された名称を「統一名称」として出したいと思っております。

Quicksightでは名称についてMaxやMin関数が使用できないため、方法があればご教示ください。

ご質問ありがとうございます。
次のような計算フィールドで実現することもできますが、イメージ合いますでしょうか?

firstValue(名称,[購入日付 DESC],[ID])

提示いただいた画像をCSVにしてQuickSightに取り込み、計算フィールドを作成してテーブルで表示してみたスクリーンショットを載せておきます。

思いついた方法を記載しましたが、その他にスマートな方法を思い付かれた方がいたら補足いただけますと助かります。

2 Likes

@Masa

ご回答ありがとうございます。
ご教示頂いたfirstValue関数を使用して計算したところ、統一名称として抽出できました。
ただし、テーブル計算関数のためか、統一名称単体で売上のグラフなどは作成できませんでした。

他に方法はございますでしょうか?よろしくお願いいたします。

@Tomo さん
作成した統一名称を元にグラフを作成する場合、計算フィールドで実現する場合QuickSightではテーブル関数が必要になるかと思います。(実現方法の知見をお持ちの方がいたら情報をいただけると助かります。)

このようなケースではデータ準備で対応することが多いと思います。
本データがCSVファイルの場合の一例としては以下のような方法もあります。
・CSVをS3にアップロード
・Athenaを通じてそのS3上のCSVファイルに対してSQLでテーブルやビューを作成
・QuickSight上でAthenaをデータソースとしたデータセットを作成

この方法で実現したスクリーンショットとクエリが以下です。(日本語列名を使えないため元の日本語列をAthenaでテーブルを作成する際に英語に置き換えし、今回の目的列をnamelatestとして追加しています。)




Query:

CREATE EXTERNAL TABLE IF NOT EXISTS `test_20250220_DB`.`test_20250220_TB` (
  `ID` int,
  `Name` string,
  `Purchase_date` string,
  `NameNew` string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
  'serialization.format' = ',',
  'field.delim' = ','
)
STORED AS TEXTFILE
LOCATION 's3://temp-mizma-test-general01/'
TBLPROPERTIES (
  'skip.header.line.count'='1',
  'serialization.null.format'=''
); 
CREATE OR REPLACE VIEW test_view AS
SELECT t1.ID, t1.Purchase_date, t1.Name, NameNew, (SELECT Name FROM test_20250220_tb WHERE ID=t1.ID AND date_parse(Purchase_date, '%Y/%m/%d')=t2.Datelatest) AS NameLatest
FROM test_20250220_tb t1
JOIN (
    SELECT ID, MAX(date_parse(Purchase_date, '%Y/%m/%d')) AS DateLatest
    FROM test_20250220_tb
    GROUP BY ID
) t2 ON t1.ID = t2.ID;

上記はあくまで一例ですが、いずれにしてもデータ準備のレイヤーで対応するのが自然かと思います。
そのためには例で記載したS3/Athenaを使いながらSQLでデータを準備する方法もありますが、他の方法も複数あるので最適な方法を検討するのが良いかと思います。
元のデータがリレーショナルデータベースに保存されている場合は今回のようなS3/Athenaの必要なく実現できると思います。
または、元データがファイルの場合は自動的に変換するプログラムを間に挟んでQuickSightからは変換後のファイルを見るようにする方法も考えられます。
方法についてはQuickSight上の操作を超えることになりますが、上記を参考にしていただき元のデータに合わせてご検討いただけたらと思います。

こちら、 @Masa さんの返答で解決しておりますでしょうか?
Solutionとしてマークさせていただきますが、もし解決していないようでしたら、お知らせください。
QuickSight Communityにご質問いただき、ありがとうございます。