Fir*_*per 5 sql join business-intelligence dax powerbi
我如何在DAX中进行左连接?当我尝试添加关系或使用左外连接DAX函数时,我得到以下错误(见下文).任何想法将不胜感激!
作为参考,我正在尝试创建损益表的计算行.
例:
我的表格如下:
Fact table: ???????????????????????????????????????????? ? 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 ? ???????????????????????????????????????????? Template table: ???????????????????????????????????? ? TemplateID ? AccountID ? Line ? ???????????????????????????????????? ? 105 ? 1 ? Revenue ? ? 105 ? 2 ? Cost ? ? 105 ? 1 ? Profit ? ? 105 ? 2 ? Profit ? ????????????????????????????????????
在SQL中,这非常简单 - 我只在AccountID字段上执行左外连接,为Profit行创建记录,如下所示:
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]
Run Code Online (Sandbox Code Playgroud)
结果:
???????????????????????????????????????????????????????????????????????????????
? 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 ?
???????????????????????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
然后我可以像这样转动它:
???????????????????????????????
? Line ? Store A ? Store B ?
???????????????????????????????
? Revenue ? 120 ? 350 ?
? Cost ? -50 ? -70 ?
? Profit ? 70 ? 280 ?
???????????????????????????????
Run Code Online (Sandbox Code Playgroud)
在DAX中,它看起来要复杂得多 - 希望有人可以证明我错了!我读过双向过滤可能允许多对多关系,但我无法让它在这里工作.我尝试这样做的原因是加入DAX而不是SQL,因为我有几个语句模板,如果可以通过DAX动态完成,则不希望多个加载具有非常相似的数据.谢谢!
除了作为计算的虚拟表之外,还有其他原因Template需要该表吗?因为仅从示例数据中我看到事实表不必要地重复(7 -> 14 行)(也许我遗漏了一些关键点)。
如果没有,你可以简单地在DAX中编写一些Measure来在Power BI中进行计算(这正是Power BI的强大之处),并且只Fact需要表格。
德国DAX指数:
收入:
Revenue =
CALCULATE(
SUM('Fact'[Amount]),
FILTER(
'Fact',
'Fact'[Amount] > 0
)
)
Run Code Online (Sandbox Code Playgroud)
成本:
Cost =
CALCULATE(
SUM('Fact'[Amount]),
FILTER(
'Fact',
'Fact'[Amount] < 0
)
)
Run Code Online (Sandbox Code Playgroud)
利润:
Profit = [Revenue] + [Cost]
Run Code Online (Sandbox Code Playgroud)
然后您可以使用Matrix可视化来获得所需的结果:
PS 如果您确实需要将收入/成本/利润放在行而不是列中,则可能需要旋转数据或将计算写入新的Column(但不是Measure)。这是由于Power BI 中的产品限制造成的。
| 归档时间: |
|
| 查看次数: |
3279 次 |
| 最近记录: |