Power BI 导入,建模和报表设置 (DAX函数 M语言)

一 :原通过文件夹导入 (增加新文件,刷新后数据自动加载,无需手动维护)

以下展示案例用的表格的【列,行】

二:基于原始数据,利用SUMMERRIZE生成辅助表

辅助分类表

ocataloge = SUMMARIZE('sales',sales[分类])

辅助产品表

oclass = SUMMARIZE( 'sales',sales[产品线],sales[产品名])

辅助公司表

ocompany = SUMMARIZE( 'sales',sales[公司代码],sales[公司名])

辅助日期表

odate = SUMMARIZE( 'sales',sales[月],sales[月].[季度],sales[月].[月份])

销售主表

osales = SUMMARIZE( 'sales',sales[产品线],sales[公司代码],sales[分类],sales[月],sales[金额])

新增列【更新日期】

从文件名【table_20240205_1.xlsx】提取【20240205】, 新建列,输入公式

= Text.Middle([Source.Name], 6, 8)

 新增列【索引】

从文件名【table_20240205_1.xlsx】提取【1】, 新建列,输入以M语言

let
    FileName = [Source.Name],
    SplitList = Text.Split(FileName, "_"),
    LastPart = List.Last(SplitList),
    Number = Text.Start(LastPart, Text.Length(LastPart) - 5)
in
    Number

每一个文件存有当月的最新销售金额,需求通过月金额,计算单日金额

原数据:

table_20230401_1.xlsx 4月金额 5元

table_20230402_2.xlsx 4月金额 12元

table_20230402_2.xlsx 4月金额 17元

计算后数据:

table_20230401_1.xlsx 4月金额 15元  4月1日 15元

table_20230402_2.xlsx 4月金额 26元  4月2日 11元

table_20230403_3.xlsx 4月金额 39元  4月3日 13元

计算逻辑:当天的销售金额 =当天月金额 - 前一天月金额

新增列【前日金额】

文件名格式 table_yyyyddmm_1.xlsx

实际业务:yyyyddmm为取数据的日期,因法定休假等,日期存在不连续性,如工作日2024/02/05,2024/02/07,为实现当天销售和前一天销售相减,可以通过设置索引的方法,实现销售数据的连续性,为达此效果,文件格式的末尾添加自增数, table_20240205_1.xlsx,table_20240207_2.xlsx

具体DAX函数

前日金额 = 
VAR cIndex = odyapsi[索引]
VAR cCompany = odyapsi[公司代码]
VAR cProduct = odyapsi[产品线]
VAR cMonth = odyapsi[月份]
VAR cCat = odyapsi[分类]
VAR cOgnazation = odyapsi[销售组织]
VAR preAmount = LOOKUPVALUE(
    odyapsi[金额],
    odyapsi[索引], cIndex - 1,
    odyapsi[公司代码], cCompany,
    odyapsi[产品线], cProduct,
    odyapsi[月份], cMonth,
    odyapsi[分类], cCat,
    odyapsi[销售组织], cOgnazation
)
RETURN
IF(ISBLANK(preAmount), BLANK(), preAmount)

增加列【当日金额】

第一个文件索引为1,默认销售金额就是单日销售金额

当日金额 = IF([索引]=1,[金额],if(ISBLANK([前日金额]),0 , [金额]-[前日金额]))

  实现效果:

 

创建度量值【月】

销售金额合计,以此类推计算【1月】-【12月】

1月 = SUMX(
    FILTER(
        odyapsi,
        YEAR(odyapsi[月份]) = 2024 && MONTH(odyapsi[月份]) = 1 && odyapsi[索引] = MAX(odyapsi[索引])
    ),
    odyapsi[金额]
)

 创建度量【季度】

销售金额合计,以此类推计算【1季度】-【4季度】,季度根据公司财年设定

1Q = SUMX(
    FILTER(
        odyapsi,
        YEAR(odyapsi[月份]) = 2023 && MONTH(odyapsi[月份]) >= 4 && MONTH(odyapsi[月份]) <= 6 &&odyapsi[索引] = MAX(odyapsi[索引])
    ),
    odyapsi[金额]
)

创建度量【半财年】

销售金额合计,以此类推计算【上半财年】-【下半财年】

H1 = odyapsi[1Q] + odyapsi[2Q]

 创建度量【全年】

销售金额合计

Total = odyapsi[H1] + odyapsi[H2]

以分类单独求金额合计,本案列,分类的值【Sales,Inventory,Purchase】  

创建度量【Sales】

分类为Sales的销售金额合计

S实绩 = CALCULATE(SUM(odyapsi[金额]),odyapsi[分类]="Sales",odyapsi[索引]=max(odyapsi[索引])) 

 创建度量【期末库存】

期末库存 = 
VAR CurrentDate = TODAY()

VAR MaxInventoryDate = CALCULATE(
                            MAX(odyapsi[月份]),
                            odyapsi[分类] = "Inventory",
                            odyapsi[索引] = MAX(odyapsi[索引])
                        )
VAR currentInventory  = CALCULATE(
                            SUM(odyapsi[金额]),
                            odyapsi[分类]="Inventory",
                            odyapsi[月份] = MaxInventoryDate,
                            odyapsi[索引] = MAX(odyapsi[索引])
                        )
RETURN currentInventory

  创建度量【平均3个月销售】

平均3个月销售 = 
VAR CurrentDate = TODAY()
VAR StartDate = EDATE(CurrentDate, -3)
VAR EndDate = EOMONTH(EDATE(CurrentDate, -1), 0)
RETURN
AVERAGEX(
    FILTER(
        SUMMARIZE(
            odyapsi,
            odyapsi[月份],
            "MonthlySales", CALCULATE(SUM(odyapsi[金额]), odyapsi[分类] = "Sales",odyapsi[索引]=MAX(odyapsi[索引]))
        ),
        odyapsi[月份] >= StartDate && odyapsi[月份] <= EndDate 
    ),
    [MonthlySales]
)

 创建度量【库存销售比】

库存销售比 = 
 
IF(
    odyapsi[平均3个月销售] > 0,
    odyapsi[期末库存]  / odyapsi[平均3个月销售],
    BLANK()
)

  创建度量【是否最新日期】

用于高亮显示最新日期的销售金额

是最新日期 = 
IF(MAX(odyapsi[更新日期]) = CALCULATE(MAX(odyapsi[更新日期]), ALL(odyapsi)), BLANK(), 1)

   创建度量【销售目标】

销售目标 = CALCULATE(SUM(targetsbu[金额]),ALLSELECTED(targetsbu[产品线])) 

  创建度量【前一个月销售合计】

s1月 = SUMX(
    FILTER(
        odyapsi,
        YEAR(odyapsi[月份]) = 2024 && MONTH(odyapsi[月份]) = 1 && 
        RANKX(
            FILTER(odyapsi, YEAR(odyapsi[月份]) = 2024 && MONTH(odyapsi[月份]) = 1), 
            odyapsi[索引], 
            , 
            DESC, 
            DENSE
        ) = 2
    ),
    odyapsi[金额]
)

三:基于辅助表,生成星形结构的数据模型

四:可视化设置

设置矩阵表格的布局

可视化->设置视觉对象格式->视觉对象->行标题->渐变布局->OFF

可视化->设置视觉对象格式->视觉对象->行标题->渐变布局->ON

可视化->设置视觉对象格式->视觉对象->单元格元素->数据系列->字体颜色

可视化->设置视觉对象格式->视觉对象->单元格元素->数据系列->数据条

 设置书签

结合按钮实现互动

设置当前页面的筛选,点击书签->添加,取名【Monthly】 

添加按钮

操作->类型,选择【书签】,书签选择【Monthly】

设置高亮显示

可视化->列->颜色->默认值->fx公式

应用此基于哪个字段?选择度量值【是最新日期】

应如何设置空值的格式?选择【指定颜色】

 

实现效果:

 五:类似以下效果

  • 23
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值