Skip to main content

初めて投稿します。

 

購買レコードの購買分析を行っているのですが、

タイムスタンプが年月日までしかなく、時分が無い状態です。

こうなると、同日内に複数購入している場合、fixedにてMAXやMINのような

関数でレコードを扱う際どれを掴んでいるのか不明のため、適当に採番をしたく思います。

 

イメージとしては以下のように、同ユーザーの同日購買レコード内で採番を折り返したく、

 

ユーザー | 購買日 | 採番

Aさん    2020/1/1   1

Aさん      2020/1/2    1

Aさん      2020/1/2    2

Bさん    2020/1/5   1

Bさん    2020/1/5   2

Bさん    2020/1/5   3

 

回避するために、index()が使えないか試したところ、ワークシート上では採番できたのですが、

実際にその番号を他の関数で扱えるものではないようでした。

何か良い方法があればどなたか教えていただきたく、よろしくお願いいたします。

(※番号の振り方は「DBの先に出てきたほうから」などなんでも良いと考えてます)

 

つたない説明で恐縮ですが、何卒、よろしくお願いいたします。

4 answers
  1. Feb 17, 2020, 7:06 AM

    Maruyamaさん、こんにちは。

     

    お手持ちのデータをデータベースに格納し、row_number()という行番号を付与する関数を使えば、Tableauに読み込む前のデータソース側で望む形でデータを持つことができます。

    Tableauだけやるのはできたとしても筋がよくない感覚があります。

     

    仮に、ユーザー(列名をuserとする)、購入日(列名をdateとする)の2列のテーブルをデータベース側に作ったら、以下のSQL文で行けるはずです。

     

    select user, date, row_number() over(partition by user, date) as number

    from sample.test

     

    https://console.cloud.google.com/bigquery?project=a2i-bq-sql&hl=ja&j=bq:US:bquxjob_54965893_17051f18f63&page=queryresults

     

    この方法の良いところは、データに「購入金額」があった場合、同一ユーザーの同一購入日内において、購入金額の高い順、低い順を指定してnumberを振り出すこともできることです。Tableauからデータ接続を行なった、場合、{fixed user : min(xxxx)}や{fixed user : max(xxx)}だと、特定日の購入金額の最大値、最小値は取り出せますが、二番目に購入額の大きかった購買を取り出すのは面倒です。購入金額順に採番されていれば、そんなときにも応用が利きます。

     

    Kida

0/9000