求教通过派生列和迭代函数求和

Power Pivot 啊哦额信 ⋅ 于 2022-06-15 16:05:37 ⋅ 最后回复由 啊哦额信 2022-06-16 15:28:47 ⋅ 1417 阅读

原始表有两个:
事实表:
file
维度表:
file
两者关系:
file
汇总后如图:
file

问题:
在对维度1或者2进行筛选后,[数量]字段显示的值为 (维度1筛选个数 / 维度1总个数) * 数量;
例如:
在维度2切片器中筛选B,维度1在甲中筛选个数都为1,在乙中筛选个数为2,所以期望值如图:
file
我自己的想法是通过ADDCOLUMNS在事实表上加派生列,来计算维度1筛选的个数的占比,然后通过SUMX迭代函数求和,但函数不熟悉,写出来报错
file
求问大佬们这个方向能否得到期望值?代码应该怎么写?或者有其他方法可以达到想要的期望值?

示例文档链接:
链接:https://pan.baidu.com/s/1Af1PgREWeUgnLfhIVYG8AQ
提取码:7c6j

成为第一个点赞的人吧 :bowtie:
最佳答案
  • 焦棚子 微软 MVP
    2022-06-16 14:30:45

    @啊哦额信

    file

    和上面计算逻辑一样的,照着抄一下就是了。

    建议你系统学习一下我的 Power BI 视频课。

    https://jiaopengzi.com/video/video-101

    期望值 = 
    //VAR A = SELECTEDVALUE('维度表'[维度3])
    //VAR B = COUNTROWS( FILTER('维度表','维度表'[维度3] = A ) )
    //VAR C = COUNTROWS( FILTER(ALL('维度表'),'维度表'[维度3] = A ) )
    //VAR D = SUM ( '事实表'[数量] )
    VAR E =
        SUMMARIZE (
            '维度表',
            '维度表'[维度3],
            "@B", VAR A = [维度3] RETURN COUNTROWS ( FILTER ( '维度表', '维度表'[维度3] = A ) ),
            "@C", VAR A = [维度3] RETURN COUNTROWS ( FILTER ( ALL ( '维度表' ), '维度表'[维度3] = A ) ),
            "@D", CALCULATE ( SUM ( '事实表'[数量] ) )
        )
    RETURN
        //B/C*D
        SUMX ( E, [@B] / [@C] * [@D] )
回复数量: 8
  • 焦棚子 微软 MVP
    2022-06-15 19:30:33

    你这模型建立的只能说是乱七八糟。

    按照你需求参考如下:

    file

    期望值 = 
    VAR A = SELECTEDVALUE('维度表'[维度3])
    VAR B = COUNTROWS( FILTER('维度表','维度表'[维度3] = A ) )
    VAR C = COUNTROWS( FILTER(ALL('维度表'),'维度表'[维度3] = A ) )
    VAR D = SUM('事实表'[数量])
    RETURN 
    B/C*D
  • 啊哦额信
    2022-06-16 10:10:20

    @焦棚子 感谢大佬!!
    实际业务上只能整这种模型。。我也是没啥办法
    不过您这个方法,只要维度3筛选超过一个,就不显示总计值,这个有办法解决么?

  • 焦棚子 微软 MVP
    2022-06-16 10:18:20

    @啊哦额信

    很明显是可以的。但是你的逻辑没说清楚,没法写。建议你把你的业务逻辑理清楚再写。

  • 啊哦额信
    2022-06-16 11:18:07

    @焦棚子
    抱歉哈,是我表达上有问题,您上面提供的方法计算的值都是完全准确的,就缺这个总计而已。
    file

    冒昧问问您业务逻辑上哪里没有搞懂呢?是需要我说明实际的业务情况吗?

  • 焦棚子 微软 MVP
    2022-06-16 11:29:55

    @啊哦额信

    你总计的计算逻辑是什么?就像上面你的 Excel 中的公式是什么。

  • 啊哦额信
    2022-06-16 12:16:48

    @焦棚子
    总计是需要加权求和,像我上面举的例子:

    file

    当维度2筛选了B:

    维度3的甲中包含了1个维度1(B1),而甲中总维度1个数是5,所以这一行的期望值是 329 * (1 / 5);

    维度3的乙中包含了2个维度1(B2,B3),而乙中总维度1个数是5,所以这一行的期望值是 306 * (2 / 5);

    总计就是上面两个期望值之和,而不是汇总后 (329 + 306) * ( 1+2 / 5+5 ) 这个值,所以我觉得得用迭代函数解决。

  • 焦棚子 微软 MVP
    2022-06-16 14:30:45

    @啊哦额信

    file

    和上面计算逻辑一样的,照着抄一下就是了。

    建议你系统学习一下我的 Power BI 视频课。

    https://jiaopengzi.com/video/video-101

    期望值 = 
    //VAR A = SELECTEDVALUE('维度表'[维度3])
    //VAR B = COUNTROWS( FILTER('维度表','维度表'[维度3] = A ) )
    //VAR C = COUNTROWS( FILTER(ALL('维度表'),'维度表'[维度3] = A ) )
    //VAR D = SUM ( '事实表'[数量] )
    VAR E =
        SUMMARIZE (
            '维度表',
            '维度表'[维度3],
            "@B", VAR A = [维度3] RETURN COUNTROWS ( FILTER ( '维度表', '维度表'[维度3] = A ) ),
            "@C", VAR A = [维度3] RETURN COUNTROWS ( FILTER ( ALL ( '维度表' ), '维度表'[维度3] = A ) ),
            "@D", CALCULATE ( SUM ( '事实表'[数量] ) )
        )
    RETURN
        //B/C*D
        SUMX ( E, [@B] / [@C] * [@D] )
  • 啊哦额信
    2022-06-16 15:28:47

    @焦棚子
    明白了
    非常感谢非常感谢!!

暂无评论~~
  • 请务必阅读并严格遵守《社区管理规范与使用说明》
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 发送表情,可用的 Emoji 见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板粘贴上传, 格式限制 - jpg, png, gif
  • 不支持上传附件,请尽可能用文字和图片将问题描述清楚,如实在需要上传附件,可上传到 共享网盘 后分享链接
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
Ctrl+Enter