Skip to main content
修平 田中 ha fatto una domanda in Japan

下記データを結合して、アイテム名毎に「売上数」「再販希望数」「売上数+再販希望数」という数値を表示させたいです。

・売上データ.csv

・​再販希望数データ.csv

・商品マスタ.csv

データを結合したところ、重複して、正しい数値よりも大きくなってしまいます。

理解不足で申し訳ないのですが、今後のため、なぜ重複してしまうのか?どのようにすれば重複しないで表示できるのか?

この2点を教えてください。

※参考データ.twbx​

今回作成したデータです。​数値が重複してしまっています。

※説明データ.xlsx​

Excelで計算したデータです。tableau数値の違いを説明しています。​

商品マスタを掛け合わせている理由は、数量ベース⇒金額ベースにしたり、カテゴリ単位で分析するなどを予定しているためです。​

 

よろしくお願いいたします。

10 risposte
  1. 8 giu 2021, 07:56

    ④ 日付のマージについて

    私の経験上、Tableauの日付型への自動変換は結構気まぐれなところがあって、​数値や文字列を期待するような日付形式に直してくれないことがあります。計算式を使っているのは、そういったリスクを避けて確実に私達が期待するような日付に変換するためです。

    今回のデータは「片方は8桁で​もう片方は12桁」なのではなく、「片方は日付型で片方は数値型」と言ったほうが正しく、数値型を日付型に変換する必要があります。

    ⑤ 日付を作る式

    一気に作ってしまったので少し分かりにくかったですね。ここは中身を分解して考えましょう。​

    まずデータソースを確認すると、ユニオンした段階でまだ日付と登録日時は分けてあります。

    ④ 日付のマージについて私の経験上、Tableauの日付型への自動変換は結構気まぐれなところがあって、​数値や文字列を期待するような日付形式に直してくれないことがあります。計算式を使っているのは、そういったリスクを避けて確実に私達が期待するような日付に変換するためです。​今回のデータは「片方は8桁で​もう片方は12桁」なのではなく、「片方は日付型で片方は数値型」と言ったほうが正しく、数値型を日付型日付は売上のCSV​にしかありませんし、登録日時は再販売希望のCSVにしかありません。2つのカラムのうちどちらか片方にしかありません(逆に言うとどちらかには必ず有る)から、「ひとつめのカラムを見て、そこにデータが有ればそれを採用。データがなければもう片方のカラムを採用」と考えます。これを実現するのが IFNULL関数 です。IFNULL(A, B) で「もしAにデータがあればAを使う。AのデータがNULLならBを使う」という処理になります。したがって、最初のステップは

    IFNULL([日付], [登録日時])

    となります。​

    しかし、このままでは「データの型が合わない」​というエラーを吐くので、登録日時を日付型に変換します。データから日付を作成する方法はいくつかありますが、今回採用したのは MAKEDATE関数 です。この関数は MAKEDATE(年, 月, 日) とすることで日付型を作成できます。

    [登録日時] =(日付型に変換)> MAKEDATE(年, 月, 日)

    元となる登録日時は年月日時分の12桁のようなので、先頭4桁を年、次の2桁を月、続く2桁を日として取り出すことにします。取り出し方はこれもいくつか方法がありますが、今回は登録日時をあえて文字列型に変換してから必要な部分を切り出し、再び数値型に戻すという手順を踏んでいます。まずSTR関数で登録日時の12桁を文字列として扱えるようにし、

    文字列化した登録日時 : STR([登録日時])

    LEFT関数やMID関数を使って年月日を取り出します。

    年 = 先頭から4文字: LEFT(文字列化した登録日時, 4)

    月 = 5文字目から2文字分: MID(文字列化した登録日時, 5, 2)

    日 = 7文字目から2文字分: MID(文字列化した登録日時, 7, 2)

    ​これで年月日がそれぞれ取り出せますが、MAKEDATE関数はそれらを数値で要求するので、INT関数を掛けて再び整数に戻します。

    MAKEDATE(INT(年), INT(月), INT(日))

    ここまでの式を全部代入して入れ子状態にすると​、先に添付したファイルにあるような式になります。

0/9000