我有一个Power BI报告,其中包含多行(它是P和L报告),显示在列表可视化中 .
它是从SQL中的视图填充的
其中一条线是“总收入”
我需要每一行显示其占总收入的比例百分比:
即
LINE MTH %
------------------------
Line1 5 10
Total Revenue 50 100
Line2 20 40
Line3 4 8
Line4 12 24
请注意 MTH
并没有达到总收入,所以我不能只拿总数,我需要把名为Total Revenue的行作为分母
这是我在这里尝试做的完美例子:
https://msdn.microsoft.com/en-us/library/ee634760.aspx
但是当我尝试这种方法时(首先只是为了得到分母),我只得到总收入线上的值和其他线上的空白,如下所示:
LINE MTH %
------------------------
Line1 5
Total Revenue 50 50
Line2 20
Line3 4
Line4 12
这是我的DAX:
MTH% =
SUMX(
CALCULATETABLE(
'vw_PandL',
'vw_PandL'[Line]="TOTAL REVENUE"
)
,
[MTH]
)
据我所知,我的表达式和网页上的示例之间的唯一区别是,网页使用单独的维度来过滤行,而may表达式使用同一个表中的列来过滤行
在网页上给出的示例:
=SUMX( CALCULATETABLE(
'InternetSales_USD',
'DateTime'[CalendarYear]=2006
)
, [SalesAmount_USD])
基于下面的评论,这应该有效,但它对我不起作用
我现在也尝试过:
CALCULATE(
SUM([MTH]),
FILTER(ALL('vw_PandL'),
[Line]="TOTAL REVENUE")
)
这使我获得了TOTAL REVENUE所有行的总计,但忽略了报告过滤器 . 这更接近了 .
ALLEXCEPT
函数用于取消除指定列之外的所有内容,但是当我尝试这个时,我得到相同的结果 . 它仍然没有记下我的日期和网站过滤器:
CALCULATE(
SUM([MTH]),
FILTER(ALLEXCEPT('vw_PandL','vw_PandL'[DateKey],'vw_PandL'[DimSiteKey]),
[Line]="TOTAL REVENUE")
)
Update 1:
我设法在一个简单的模型中重现这一点
我没有提到的很多事情是 LINE
列被另一个名为 SortZZ
的列排序
在@Foxan Ng答案中提出的计算工作完美但但是一旦我对Line列进行排序,它就会显示我提到的行为:Total Revenue数字仅显示在Total Revenue行上
经过进一步调查:我甚至不需要对它进行排序,我可以将SortZZ列放在列表中,它会破坏计算结果 .
Solution
最终运作的计算方法是:
Total Revenue =
CALCULATE(
SUM([MTH]),
FILTER(
ALLEXCEPT('vw_PandL','vw_DimPeriod'[Period],'DimSite'[Site]),
'vw_PandL'[Line] = "Total Revenue")
)
诀窍在 ALLEXCEPT
我的关系和切片器设置如下:
-
vw_PandL
是一个事实表 -
vw_DimPeriod
已加入PeriodCode
-
DimSite
也加入SiteKey
使用以下任何 ALLEXCEPT
表达式时,计算不符合我的切片器 . 也就是说,该数字是所有时期和地点的线路总数:
- 参考事实表中的连接键:
ALLEXCEPT('vw_PandL','vw_PandL'[PeriodCode],'vw_PandL'[SiteKey])
- 参考尺寸中的连接键:
ALLEXCEPT('vw_PandL','vw_DimPeriod'[PeriodCode],'DimSite'[SiteKey])
我可以获得钙片来兑现我的切片器的唯一方法是使用我在切片机中实际使用的实际字段,换句话说就是标签
ALLEXCEPT('vw_PandL','vw_DimPeriod'[Period],'DimSite'[SiteName])
从中学习的关键是,这不仅仅是一个关系数据库,您可以在其中加入密钥,然后对标签进行过滤即可 . 这些函数中提到的列和表非常重要 .
1 回答
您提供的示例实际上有效,但您应将其创建为
Measure
而不是Calculated Column
.Measure
适用于过滤器,而Calculated Column
即使应用了过滤器也会保持不变 .创建名为
Total Revenue
的Measure
:创建另一个名为
%
的Measure
:它将适用于应用的过滤器 .
2015年:
2016年:
取决于数据集的性质,
%
Measure
可以修改如下,因此它可以在没有过滤器的情况下工作:结果:
希望能帮助到你 .
编辑:
我将
Total Revenue
更改为您提供的替代解决方案,它适用于已排序的列案例:没有过滤器:
已应用过滤器: