如何将计算列的每一行除以另一个计算列的总和?

How to divide each row of a calculated column by the total of another calculated column?

我不能用这个样本数据得到正确的除法:

Calculated column    Another calc. column
   48                  207
  257                  370
  518                  138
  489                  354
  837                  478
1,005                  648
1,021                2,060
1,463                2,164
2,630                1,818
2,993                2,358
3,354                3,633
4,332                5,234
4,885                6,108
4,514                6,008
4,356                6,888
4,824                7,382
7,082                5,988
7,498                6,059
                     4,865
                     4,192
                     3,816
                     2,851
                     2,768
                     2,093
                     2,207
                       770
                       397
                       149
                       178
                       336
                       167
                       124
                        18

我想做的是创建一个新的计算列。

对于每一行,我想获取 Calculated column 的值并将其除以 Another calc. column 的总和。

总计Another calc. column = 82826

这是全新计算列中的所需输出,我们称之为 % Column:

% Column

0,000579528167484
0,003102890396735
0,006254074807428
.
.
.

NOTE - these 3 columns: Calculated column, Another calc. column and % Column are all in the same table and are all calculated columns.

我尝试了很多公式,但没有一个返回所需的输出。 :|我想这是因为计算列的性质,或者我没有理解它的要点。

这是否可能,或者我应该使用 Measure 走另一条路?

你能解释一下吗?

####### 编辑#######

我整理了一个示例文件来帮助调试它。这里是: https://drive.google.com/open?id=1r7kiIkwgHnI5GUssJ6KlXBAoeDRISEuC

如您所见:

如果重要的话,我正在使用最新的 Power BI Desktop 版本:Version: 2.70.5494.701 64-bit (June 2019)

您可以使用以下 DAX 执行此操作:

% Column =
VAR TotalSum =
    SUM ( 'Table'[Another Calc column] )
RETURN
    IF (
        NOT ( ISBLANK ( 'Table'[Calc Column] ) ),
        CALCULATE ( DIVIDE ( SUM ( 'Table'[Calc Column] ), TotalSum ) ),
        0
    )

产生以下结果:

希望对您有所帮助!!

对我来说,以下作品:

DIVIDE( Table1[Calculated column], SUM(Table1[Another calc column]) )

如果这不起作用,我需要查看可以重现问题的文件。


编辑:查看您的文件后,82,826 的总和仅在您使用过滤器后才为真已选择.

请注意,计算列不是动态的,不能响应过滤器,因为它们仅在 table 首次加载时计算。

如果你需要它是动态的,那么把它写成更像这样的度量:

Earned Daily =
DIVIDE (
    CALCULATE (
        SUM ( 'Test data'[Value] ),
        'Test data'[Act Rem] = "Actual Units",
        'Test data'[Type] = "Current"
    ),
    CALCULATE (
        SUM ( 'Test data'[Value] ),
        ALLSELECTED ( 'Test data' ),
        'Test data'[Act Rem] = "Remaining Units",
        'Test data'[Type] = "PMB"
    )
)

基本上计算出来的列没有问题,Alexis和StelioK的公式都是正确的。

这里的根本问题是计算列和度量之间的混淆。您正在以概念上错误的方式查看结果 - 通过矩阵视觉,在切片器上激活多个过滤器。如果移除过滤器,您将看到总金额为 140,920,而不是 82,826。后一个数字是 filtered 数据集的总数,而不是整个 table。

要做到这一点,您需要了解 Power BI 背后的几个基本概念:

  • 计算列始终是静态的。一旦计算 完成后,它无法响应切片器或其他 UI 控件。它是 只是静态数据,与 non-calculated 列中的数据相同。达克斯指数 用于计算列的公式仅在您创建时处于活动状态 他们,或者在数据重新加载时。
  • 如果您希望您的计算响应切片器等,它们必须是度量。这是唯一的方法,没有例外。
  • 避免使用计算列,它们毫无用处。 Power BI 就是关于度量的;我想不出使用计算列的单一原因。添加列时,实际上是在增强源数据,因为您感觉缺少报告所需的某些内容。但是这种需求可以在源头(您导入的数据库或文件)或使用专为此类任务设计的 Power Query 得到更好的解决。最佳做法是:在源头构建您的专栏,用于其他所有设计措施。
  • 另一个重要建议:切勿将字段(列)直接放入视觉对象中。始终编​​写 DAX 度量,然后使用它。依赖 Power BI auto-aggregations 是一种非常糟糕的做法。