如何将计算列的每一行除以另一个计算列的总和?
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
如您所见:
Earned Daily % HARDCODED
工作得很好,因为 82826
被硬编码为分母。
Earned Daily % by StelioK
和 Earned Daily % by Alexis Olson
在使用 SUM
公式时输出相同的错误除法值。
如果重要的话,我正在使用最新的 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 是一种非常糟糕的做法。
我不能用这个样本数据得到正确的除法:
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
如您所见:
Earned Daily % HARDCODED
工作得很好,因为82826
被硬编码为分母。Earned Daily % by StelioK
和Earned Daily % by Alexis Olson
在使用SUM
公式时输出相同的错误除法值。
如果重要的话,我正在使用最新的 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 是一种非常糟糕的做法。