BOSS:那个谁!白茶啊,过来过来,有个需求和你说一下!

白茶:(黑人问号?)咋了,BOSS?

BOSS:是这样的,我们在十一期间啊,售卖了一部分商品,但是部分商品有些特殊,一部分销售金额为空,这个我们在计算毛利的时候需要让它成本乘以1.5;一部分商品的销售金额为0,这个计算毛利的时候统一显示为0.01,能处理不?

白茶:(????)BOSS,能到是能,介个是啥算法?

BOSS:别问太多,问就是公司业务!

白茶:哦,了解!

常规情况下,我们去衡量数据质量的时候,往往会在意有数值的数据,但是在实际业务中,特别是偏向于财务的算法中,0和空有些时候也是一个比较重要的计算依据。

先来看看本期的案例数据:

数据比较简单,只有6列,通过截图我们可以看到部分数据的销售金额为0,部分为空,但是却有成本,有数量。

正常情况下我们计算只需要考虑销售金额不为空的数据就可以,但是实际业务可能存在调拨库存、赠品销售的情况。

因此有些时候我们在偏向于财务场景应用的时候,就需要我们考量到这种情况,在PowerBI中如何区分0与空呢?

我们在PowerBI中通过Filter函数来筛选一下看看。

代码:

筛选0 =
FILTER ( 'Data', 'Data'[SalesAmt] = 0 )

可以看到,虽然我们通过Filter函数进行了0的筛选,但是实际出来的结果依然是包含空的情况。我们继续筛选一下空值看一下。

代码;

筛选空 =
FILTER ( 'Data', 'Data'[SalesAmt] = BLANK() )

结果同上,依然没有其他变化。

小伙伴可以思考一下,这个问题该如何解决?

3

2

1

...

解决的办法有两种:严格相等与ISBLANK。

严格相等:

通常情况下我们使用的都是相等运算符,这种情况下我们可以使用严格相等来区分0与空。

代码:

严格筛选0 =
FILTER ( 'Data', 'Data'[SalesAmt] == 0 )

代码:

严格筛选空 =
FILTER ( 'Data', 'Data'[SalesAmt] == BLANK() )

ISBLANK:

ISBLANK可以识别空。

代码:

ISBLANK筛选0 =
FILTER ( 'Data', NOT ISBLANK ( 'Data'[SalesAmt] ) && 'Data'[SalesAmt] = 0 )

代码:

ISBLANK筛选空 =
FILTER ( 'Data', ISBLANK ( 'Data'[SalesAmt] ) )

所以,我们可以通过这两种处理办法来完成BOSS最开始提到的需求。

一部分销售金额为空,这个我们在计算毛利的时候需要让它成本乘以1.5;

一部分商品的销售金额为0,这个计算毛利的时候统一显示为0.01。

毛利1:

  毛利1 =
VAR AMT =
    SUM ( 'Data'[SalesAmt] )
VAR COST =
    SUMX ( 'Data', [Cost] * [Quantity] )
VAR Result =
    SWITCH (
        TRUE (),
        AMT == BLANK (),
            AMT - COST * 1.5,
        AMT == 0, 0.01,
        AMT - COST
    )
RETURN
    Result

结果如下:

毛利2:

 毛利2 =
VAR AMT =
    SUM ( 'Data'[SalesAmt] )
VAR COST =
    SUMX ( 'Data', [Cost] * [Quantity] )
VAR Result =
    SWITCH ( TRUE (), ISBLANK ( AMT ), AMT - COST * 1.5, AMT = 0, 0.01, AMT - COST )
RETURN
    Result

结果如下:

小伙伴们❤GET了么?

(BOSS:可以可以!)

这里是白茶,一个PowerBI的初学者。