2016-10-06 11 views
1

私は日付のデータセットを持っています。 1つの列があります。CreatedOnDateとその値は、以下に示すようにdatetimeです。Tableau - パラメータに基づくフィルタ

enter image description here

示すように、このデータセットは、値の6ヶ月を有しています。私はベースの日付を変換(日上で作成と呼ばれる)計算フィールドを作成している

enter image description here

、毎月の値がありレポートタイプというパラメータを持って毎週、毎日(下のスクリーンショット)オンのレポートタイプを選択します。式は次のとおりです。

CASE [Report Type] 
    WHEN "Monthly" THEN DATENAME('month', [CreatedOnDate]) 
    WHEN "Weekly" THEN "Week " + STR(DATEPART('week',[CreatedOnDate])) 
    WHEN "Daily" THEN STR(MONTH([CreatedOnDate])) + "/" + STR(DAY([CreatedOnDate])) + "/" + STR(YEAR([CreatedOnDate])) 
END 

これは完全に機能します。計算されたフィールドの結果を以下に示します。

enter image description here

私は今、どのように私はこれを達成ん以下のロジック

IFF Report Type = "Daily" Display only the last 30 days in the dataset 
Other cases Show all values 

を組み込む必要がありますか?

答えて

1

woodhead92、私はそうタブローV8で導入されたLevel of Detail expressionsと呼ばれるを使用してお勧めしたいです。のは、このmaxDateのLODを呼ぶことにしましょう

{FIXED : MAX(CreatedOnDate) } 

:最初に使用可能な最新の(= MAX)の日付を計算します計算フィールドを作成します。

IF [Report Type] = "Daily" AND 
    ([CreatedOnDate] >= DATEADD('day', -30, [MaxDate LOD]) THEN 'Show' 
ELSEIF [Report Type] = "Weekly" OR [Report Type] = "Monthly" THEN 'Show' 
ELSE 'Hide' 
END 

このフィルタを追加し、唯一の「表示」の値を選択します。そして、新しい計算フィールド表示/非表示を追加します。 Weekly/Monthly日付の細かさを選択すると、すべての日付を表示することを前提としています。そうでない場合は、単にELSEIF条件を追加してください。

上記の式は簡略化できますが、レベル表現の仕組みの理解に役立つようにできるだけ冗長にしたいと思っていました。

心に留めておくべき一つのこと - FIXED LODの計算はフィルタを上書きするので、あなたが利用できる日付範囲のフィルターを持っている場合、あなたはそれがコンテキストに追加されますを確認する必要があります。フィルタコンテキストの詳細については、this a bit out-dated, but still excellent blog postを参照してください。

0

条件の計算フィールドを作成し、それをフィルタシェルフに配置して、真と評価される行のみを含めます。

[Report Date] <> "Daily" or 
datediff('day', [CreatedOnDate], { max[CreatedOnDate] } < 30 

カーリーブレースは、LOD計算重要である

関連する問題