我是一个新的 DAX 用户,我显然误解了语言如何处理计算度量的关系传播,我希望有人能帮助我解决我认为的简单概念。简单的例子:
3 个表:
1)Concert_Event
2)Concert_Event_Details
3)City_Budget(出于示例目的,完全不相关)
Concert Event 与 Concert_Event_Details 具有(1:M)关系,并且 City_Budget 与表 1,2 之间没有关系。
表 1,2 链接到Event_ID。现在假设我想对 Concert_Event_Details 中的“TicketSales”字段求和,但不包括 eventID 2。我简单的 DAX 头脑会写一个类似的公式:
- TotTicketSales:= CALCULATE( SUM(TicketSales), FILTER(Concert_Event_Details, Concert_Event_Details[EventID] <> 2) )
好的,接下来需要注意的是,假设我要编写大约 50 个措施,所有措施都始终排除 eventID 2,所以我认为我可以通过在加载 Concert_Event 时简单地过滤掉 eventID 2 来节省时间。现在问题来了。我希望如果我在 Concert_Event_Details 中编写计算的度量,我会希望在 DAX 中添加一条 FILTER 行来表示
过滤器(Concert_Event_Details,Concert_Event_Details[Event_ID] = RELATED(Concert_Event[Event_ID)
确保我的总结中不包括 event_id 2。我认为这是因为我在 (1:M) 关系的许多方面写这个。从我的测试来看,这是正确的,我确实需要特定的过滤线链接回关系的“1”端。
最后,这是我不了解 DAX 引擎行为的地方。我认为如果我在“1”端(Concert_Event)写这个度量,Event_ID 上的关系应该传播到多端,我不应该需要额外的过滤器代码来专门链接 EventID。通过我的测试,我做到了,但我不明白为什么。此外,如果我在完全不相关的表 (City_Budget) 中编写相同的代码,我可以得到相同的 ANSWER。表 3 和 (1,2) 之间没有关系。发生了什么事,我怎么完全错过了模型和传播中的关系?
提前感谢您的回复,不知道为什么这让我如此沮丧。我不想继续使用不需要的链接代码来显式调用我认为已经在我编写的每个计算度量中起作用的关系。
干杯!