我该如何在DAX中进行左连接?当我尝试添加关系或使用左外连接DAX函数时,我会收到以下错误(见下文)。有什么想法将不胜感激!
创建关系时出错:
尝试NaturalLeftOuterJoin()时出错:
参考资料,我正在尝试创建计算行的损益表。
例如:
营业额:100 成本:80 利润:20(营业额-成本)
我的表格如下:
事实表: ╔═══════════╦═════════╦═══════════╦════════╗ ║ YearMonth ║ StoreID ║ AccountID ║ Amount ║ ╠═══════════╬═════════╬═══════════╬════════╣ ║ 2017-01 ║ A ║ 1 ║ 100 ║ ║ 2017-01 ║ B ║ 1 ║ 200 ║ ║ 2017-01 ║ A ║ 2 ║ -50 ║ ║ 2017-01 ║ B ║ 2 ║ -50 ║ ║ 2017-02 ║ A ║ 1 ║ 20 ║ ║ 2017-02 ║ B ║ 1 ║ 150 ║ ║ 2017-02 ║ B ║ 2 ║ -20 ║ ╚═══════════╩═════════╩═══════════╩════════╝
模板表: ╔════════════╦═══════════╦═════════╗ ║ TemplateID ║ AccountID ║ Line ║ ╠════════════╬═══════════╬═════════╣ ║ 105 ║ 1 ║ Revenue ║ ║ 105 ║ 2 ║ Cost ║ ║ 105 ║ 1 ║ Profit ║ ║ 105 ║ 2 ║ Profit ║ ╚════════════╩═══════════╩═════════╝
在SQL中,这非常容易 - 我只需要在AccountID字段上执行左外连接,就可以创建利润行的记录,如下所示:
然后我可以像这样旋转它:
在DAX中,这似乎更加复杂 - 希望有人能证明我错了!我已经阅读过双向过滤可能允许多对多关系,但我无法在这里使其工作。我之所以尝试在DAX中进行此连接而不是SQL,是因为我有几个语句模板,并且希望通过DAX动态完成而不必加载非常相似的数据。谢谢!
![You can't create a relationship between these two columns becasue one of the columns must have unique values.](https://istack.dev59.com/bhfkg.webp)
![No common join columns detected. The join function 'NATURALLEFTOUTERJOIN' requires at-least one common join column.](https://istack.dev59.com/nhQ4H.webp)
营业额:100 成本:80 利润:20(营业额-成本)
我的表格如下:
事实表: ╔═══════════╦═════════╦═══════════╦════════╗ ║ YearMonth ║ StoreID ║ AccountID ║ Amount ║ ╠═══════════╬═════════╬═══════════╬════════╣ ║ 2017-01 ║ A ║ 1 ║ 100 ║ ║ 2017-01 ║ B ║ 1 ║ 200 ║ ║ 2017-01 ║ A ║ 2 ║ -50 ║ ║ 2017-01 ║ B ║ 2 ║ -50 ║ ║ 2017-02 ║ A ║ 1 ║ 20 ║ ║ 2017-02 ║ B ║ 1 ║ 150 ║ ║ 2017-02 ║ B ║ 2 ║ -20 ║ ╚═══════════╩═════════╩═══════════╩════════╝
模板表: ╔════════════╦═══════════╦═════════╗ ║ TemplateID ║ AccountID ║ Line ║ ╠════════════╬═══════════╬═════════╣ ║ 105 ║ 1 ║ Revenue ║ ║ 105 ║ 2 ║ Cost ║ ║ 105 ║ 1 ║ Profit ║ ║ 105 ║ 2 ║ Profit ║ ╚════════════╩═══════════╩═════════╝
在SQL中,这非常容易 - 我只需要在AccountID字段上执行左外连接,就可以创建利润行的记录,如下所示:
SELECT
f.[YearMonth]
,f.[StoreID]
,f.[AccountID]
,f.[Amount]
,t.[TemplateID]
,t.[AccountID]
,t.[Line]
FROM [dbo].[Fact] f
left join [dbo].[Templates] t
on f.[AccountID] = t.[AccountID]
结果:
╔═══════════╦═════════╦═══════════╦════════╦════════════╦═══════════╦═════════╗
║ YearMonth ║ StoreID ║ AccountID ║ Amount ║ TemplateID ║ AccountID ║ Line ║
╠═══════════╬═════════╬═══════════╬════════╬════════════╬═══════════╬═════════╣
║ 2017-01 ║ A ║ 1 ║ 100 ║ 105 ║ 1 ║ Revenue ║
║ 2017-01 ║ B ║ 1 ║ 200 ║ 105 ║ 1 ║ Revenue ║
║ 2017-02 ║ A ║ 1 ║ 20 ║ 105 ║ 1 ║ Revenue ║
║ 2017-02 ║ B ║ 1 ║ 150 ║ 105 ║ 1 ║ Revenue ║
║ 2017-01 ║ A ║ 2 ║ -50 ║ 105 ║ 2 ║ Cost ║
║ 2017-01 ║ B ║ 2 ║ -50 ║ 105 ║ 2 ║ Cost ║
║ 2017-02 ║ B ║ 2 ║ -20 ║ 105 ║ 2 ║ Cost ║
║ 2017-01 ║ A ║ 1 ║ 100 ║ 105 ║ 1 ║ Profit ║
║ 2017-01 ║ B ║ 1 ║ 200 ║ 105 ║ 1 ║ Profit ║
║ 2017-02 ║ A ║ 1 ║ 20 ║ 105 ║ 1 ║ Profit ║
║ 2017-02 ║ B ║ 1 ║ 150 ║ 105 ║ 1 ║ Profit ║
║ 2017-01 ║ A ║ 2 ║ -50 ║ 105 ║ 2 ║ Profit ║
║ 2017-01 ║ B ║ 2 ║ -50 ║ 105 ║ 2 ║ Profit ║
║ 2017-02 ║ B ║ 2 ║ -20 ║ 105 ║ 2 ║ Profit ║
╚═══════════╩═════════╩═══════════╩════════╩════════════╩═══════════╩═════════╝
然后我可以像这样旋转它:
╔═════════╦═════════╦═════════╗
║ Line ║ Store A ║ Store B ║
╠═════════╬═════════╬═════════╣
║ Revenue ║ 120 ║ 350 ║
║ Cost ║ -50 ║ -70 ║
║ Profit ║ 70 ║ 280 ║
╚═════════╩═════════╩═════════╝
在DAX中,这似乎更加复杂 - 希望有人能证明我错了!我已经阅读过双向过滤可能允许多对多关系,但我无法在这里使其工作。我之所以尝试在DAX中进行此连接而不是SQL,是因为我有几个语句模板,并且希望通过DAX动态完成而不必加载非常相似的数据。谢谢!
NATURALINNERJOIN(<leftJoinTable>, <rightJoinTable>)
吗?https://msdn.microsoft.com/zh-cn/library/dn802543.aspx?f=255&MSPPError=-2147217396 - Horaciux