出于某些显而易见的原因,我需要在Dates [date]和Table2 [T2Date]之间建立一个(非活动的)关系。但是,这样做会导致数据波动来衡量表1中的“总计”。
关系之前(日期[日期]-表2 [T2Date]):
关系后(日期[日期]-表2 [T2Date]):
由于度量使用不同的关系,我需要了解为什么会出现这种差异以及这种关系是如何引起的。
作为参考,我附上pbix报告。
https://drive.google.com/open?id=1XknisXvElS6uQN224bEcZ_biX7m-4el4
任何帮助将不胜感激:)
答案 0 :(得分:3)
@MikeHoney提供的链接具有有关关系的细微作用的确实有用的信息,并且确实与该问题有关(请注意!),但是此问题最终并没有特别涉及双向过滤。实际上,我可以使用这种简化的关系结构来重现它:
此处要注意的关键是,将Table2
附加到Dates
时,由于Table2
包含T2Date
个与任何{{1} },这会在Date[date]
中创建一个带有空白日期的额外行,当该关系存在(活动或不活动)时,您可以在Dates
的过滤器中看到该日期。在6. Year
过滤器中过滤出该空白将起作用,除了在测量中,您可以使用6. Year
剥离对该表进行的所有过滤。
有多种方法可以解决此差异,最简单的方法是将ALL(Dates)
替换为ALL
。如果您使用ALLNOBLANKROW
,那么它也可以与在ALLSELECTED
上的报告级过滤器中过滤出空白一起使用。
清理一些与此上下文无关的项目并将6. Year
更改为ALL
,您的总度量可以更简单地写为:
ALLNOBLANKROW
没有ALLNOBLANKROW =
VAR EndServiceDate =
MAX ( Dates[Date] )
RETURN
CALCULATE (
SUM ( Table1[Net Amount] ),
FILTER (
ALLNOBLANKROW ( Dates ),
Dates[Date] <= EndServiceDate
),
Table1[Flag2] = 1,
Table1[Flag] = TRUE ()
)
过滤器且有两种度量的结果,一种使用6. Year
,另一种使用ALL
:
请注意,ALLNOBLANKROW
列中的每一行都减少了ALL
。这是与-7,872.01
表中的任何日期都不匹配的所有Net Amount
值的总和。如果您从Dates
到Dates[date]
删除关系,则空白行将不再存在,并且两者都将与Table2[T2Date]
版本匹配。
答案 1 :(得分:2)
在任何关系上将交叉过滤器方向设置为两者都有些冒险-实际上,您将对运行时查询设计的控制权移交给了Power BI机械手。这样一来,他们就有可能提出意想不到的“创意”查询设计。
在阿尔贝托·法拉利(Alberto Ferrari)最近的一次演讲中,对这种情况的发生有了一些见解:
https://www.sqlbi.com/tv/understanding-relationships-in-power-bi/
我确定你会同意这非常恐怖的。
查看您的信息,我希望您可以通过将交叉过滤器方向更改为单次来避免这些陷阱,因为关系从 MonthYear 更改为 Date strong>。