如果该月的第一天为该月的最后一天取值-Power BI

时间:2019-08-08 18:14:42

标签: powerbi

我有以下数据集: enter image description here

我需要更正数量,即如果该天是可用数据集的第一天,则取上个月该数据集中最后一天的数量。

enter image description here

我正在研究:
1.在可用数据集中我指示月初的位置添加了2 col;在第二列中,我在可用数据集中指出该月的最后一天。

  1. 然后,我创建了一个度量,其想法是检查[date]是否等于[start_date]。如果是,我想从[prev_month_end]返回[数量]。否则,返回当前日期的[数量]。我觉得自己很亲密,但没有得到想要的结果。po
start_date = STARTOFMONTH('tbl'[date])
prev_month_end= LASTDATE ( PREVIOUSMONTH ( 'tbl'[date] ))
quantity_corrected = 
var tdate = 'tbl'[prev_month_end]
var warehouse = 'tbl'[warehouse_code]
var prod_cat = 'tbl'[product_category]
var prod_typ = 'tbl'[product_type]

return
if(
    'tbl'[date]='tbl'[start_date],
    CALCULATE(
        FIRSTNONBLANK('tbl'[quantity],1),
        FILTER(
            ALL('tbl'), 
            'tbl'[product_category]=prod_cat && 
            'tbl'[prev_month_end] = tdate && 
            'tbl'[warehouse_code]=warehouse && 
            'tbl'[product_type]=prod_typ
        )
    ),
    'tbl'[quantity]
)

2 个答案:

答案 0 :(得分:1)

不确定我是否理解这一点,但我认为您只需要在FILTER函数中更改一个参数即可。
另外,我添加了第二个嵌套的IF语句(带有temp变量),否则[quantity_corected]中的第一行变为空白。

quantity_corrected = 
var tdate = 'tbl'[prev_month_end]
var warehouse = 'tbl'[warehouse_code]
var prod_cat = 'tbl'[prod_category]
var prod_typ = 'tbl'[product_type]

return
if(
    'tbl'[date]='tbl'[start_date];
    var temp =
    CALCULATE(
        FIRSTNONBLANK('tbl'[quantity];1);
        FILTER(
            ALL('tbl');
            'tbl'[prod_category]=prod_cat && 
            'tbl'[date] = tdate &&  // <-- Changed from [prev_month_end]
            'tbl'[warehouse_code]=warehouse && 
            'tbl'[product_type]=prod_typ
        )
    )
    return
    IF(
        temp <> BLANK();
        temp;
        'tbl'[quantity]
    );
    'tbl'[quantity]
)

结果表:

enter image description here

答案 1 :(得分:1)

您非常接近,我在if中更正了比较,并使用了Sum,因为我知道过滤器中只有一行。请注意,当数据中存在空白时,逻辑将无法正常工作。例如1月31日不见了。.

quantity_corrected = 
    var tdate = 'tbl'[prev_month_end]
    var warehouse2 = tbl[warehouse_code]
    var prod_cat = tbl[prod_category]
    var prod_typ = tbl[product_type]
    var base_filter = FILTER(tbl; prod_cat = tbl[prod_category] && prod_typ = tbl[product_type] && warehouse2 = tbl[warehouse_code])
return 
    if (tbl[date] - 1 = tdate; 
        CALCULATE(SUM(tbl[quantity]);FILTER(base_filter;tbl[date] = tdate));
        tbl[quantity])