89652511 2017-03-14
DAX/PowerBI系列 - 参数表(Parameter Table)
难度: ★☆☆☆☆(1星)
适用范围: ★★★★☆(4星)
概况:
这个模式比较简单灵活,而且很实用。所用的DAX语句也比较简单。
但它的变化形式很多和扩展应用范围很广。后文介绍的动态分组(Dynamic Segmentation)也是其中一种。
主要是通过筛选器(Slicer)选择不一样的参数时,DAX语句根据所选的值反映相关的选择值进行计算。
注:参数表,通常可以不放到Data warehouse里面,可以在Excel,或者PowerBI里面,用户可以随时对参数进行修改。
----------------------------------------------------------------------------------------------
先看最后PowerBI效果:
应用场景:
以下是几个应用场景:
以销售为例:
要求:对SalesAmuont放缩,表示为x1, x1,000, x1000,000等等。
先显示效果:
数据模型:
Sacle表不与其他表相连,DAX只需要拿到所选的值对原有度量进行放缩即可。
Sales Amount := IF ( HASONEVALUE ( Scale[Scale] ), SUM ( Sales[SalesAmount] ) / VALUES ( Scale[Scale] ), SUM ( Sales[SalesAmount] ) )
要点:
显示结果参照上面动图或者如下:
左边x1,右边x1000
扩展1:多参数表
下面显示两个参数 - 折扣数和起订量 - 对折扣后的销售额的影响。
效果:
数据模型:
DiscountedSalesAmount 的计算
DiscountedSalesAmount := IF ( HASONEVALUE ( Discounts[DiscountValue] ) && HASONEVALUE ( MinQuantity[MinQuantity] ), --折扣和起订量都选了 CALCULATE ( [SalesAmount] * ( 1 – VALUES ( Discounts[DiscountValue] ) ), Sales[Quantity] >= VALUES ( MinQuantity[MinQuantity] ) ) + CALCULATE ( [SalesAmount], Sales[Quantity] < VALUES ( MinQuantity[MinQuantity] ) ), IF ( NOT ( ISFILTERED ( Discounts[Discount] ) ) && NOT ( ISFILTERED ( MinQuantity[MinQuantity] ) ), [SalesAmount], --都没选 IF ( HASONEVALUE ( Discounts[Discount] ) --只选了discount的一个值 && NOT ( ISFILTERED ( MinQuantity[MinQuantity] ) ) , CALCULATE ( [SalesAmount] * ( 1 – VALUES ( Discounts[DiscountValue] ) ) ), BLANK () ) ) )
PowerBI效果显示如下:
要把玩上面的PowerBI请戳:
在线:Parameter-Table-Multi: https://app.powerbi.com/view?r=eyJrIjoiNDdkNjgwYjctZjBhNy00OThiLWJlMjctN2EyMDdiMzI2YWQzIiwidCI6ImQxYWY4NDdiLTJjZTEtNDRjYi1iYjUwLWQ1ODAyYmI0M2M4YiIsImMiOjEwfQ%3D%3D
下载链接: https://pan.baidu.com/s/1eR2R6Pc 密码: kiuk
Top N(大客户分析) 和 Period Table分析比较重要,会单独的后续文章介绍。
文末有彩蛋!!!