DAX - 根据保留时间/行层次结构的财务日历查找上一年的等价物

时间:2017-04-30 18:20:12

标签: dax

我有2个表,它们具有由'FiscalWeekEndDate'值定义的多对一关系,就像这样;

WordsTable

FiscalWeekEndDate  | WordGroup   | IndexedVolume
01/01/2017         | Dining      | 1,000
01/01/2017         | Shopping    | 2,000
08/01/2017         | Dining      | 2,000
08/01/2017         | Sports      | 5,000

FiscalDatesTable

FiscalWeekEndDate | FiscalWeek | FiscalMonth | FiscalQuarter | FiscalYear
01/01/2017        | 21         | 5           | 2             | 2017
08/01/2017        | 22         | 5           | 2             | 2017

我正在尝试在DAX(去年)中创建一个简单的PY等价度量,它适用于所有级别的时间层次 - 即所选财政周,月,季度或年度的PY。我不想要YTD(年初至今)的衡量标准。

这是我到目前为止所拥有的;

Previous Year Indexed Volume:=
CALCULATE([IndexedVolume], 
FILTER(ALL('FiscalDatesTable'),'FiscalWeeksTable'[FiscalWeek]= 
MAX('FiscalDatesTable'[FiscalWeek]) && 'FiscalDatesTable'[FiscalYear]  = 
MAX('FiscalDatesTable'[FiscalYear]) - 1))

返回此类结果;

Fiscal Year 2017: 7,000
Fiscal Quarter 2: 7,000
Fiscal Month 5: 7,000
Fiscal Week 22: 7,000
Fiscal Week 21: 3,000

基本上,月,季度或年维度返回最大财政周值(22:7,000)。我知道这是由于我的DAX过滤器引起的问题,但不确定还有什么可以尝试。

无论选择何种时间维度,所需的结果都会为我提供正确的上一年度IndexedVolume值。即如下;

Fiscal Year 2017: 10,000
Fiscal Quarter 2: 10,000
Fiscal Month 5: 10,000
Fiscal Week 22: 7,000
Fiscal Week 21: 3,000

1 个答案:

答案 0 :(得分:0)

经过几个小时的研究,我终于通过在逻辑中引入'PreviousFiscalWeekEndDate'来破解它。

如果有人发现它有用,这是方法。

Previous Year Indexed Volume:=
CALCULATE([IndexedVolume],
FILTER (
    ALL ( 'FiscalDatesTable' ),
    CONTAINS (
        VALUES ( 'FiscalDatesTable'[PreviousYearFiscalWeekEndDate] ),
        'FiscalDatesTable'[PreviousYearFiscalWeekEndDate],
        'FiscalDatesTable'[FiscalWeekEndDate]
    )
  )
)