Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 当表之间建立了关系时,后台会发生什么?_Sql_Relational Database_Powerbi - Fatal编程技术网

Sql 当表之间建立了关系时,后台会发生什么?

Sql 当表之间建立了关系时,后台会发生什么?,sql,relational-database,powerbi,Sql,Relational Database,Powerbi,这个问题不仅限于Power BI,但它将帮助我解释我的问题 如果Power BI中有多个表,可以通过将列从一个表拖动到另一个表来建立它们之间的关系,如下所示: SELECT SUM(Sales.Amount) FROM Sales LEFT OUTER JOIN Customer ON Sales.Customer_Key = Customer.Customer_Key 您可以通过单击发生行编辑该关系: 顺便说一下,这是两个表的结构: # Table1 A,B 1,abc 2,def 3,

这个问题不仅限于Power BI,但它将帮助我解释我的问题

如果Power BI中有多个表,可以通过将列从一个表拖动到另一个表来建立它们之间的关系,如下所示:

SELECT SUM(Sales.Amount)
FROM Sales
LEFT OUTER JOIN Customer
ON Sales.Customer_Key = Customer.Customer_Key

您可以通过单击发生行编辑该关系:

顺便说一下,这是两个表的结构:

# Table1
A,B
1,abc
2,def
3,ghi
4,jkl

# Table2
A,C
1,abc
1,def
2,ghi
3,ghit
这很好,因为表1中的A列包含唯一的值,可以用作主键。现在,您可以直接进入
报告选项卡
,设置两个表,并通过直接单击表1中的A下方或引入切片器,随心所欲地进行切片:

但问题是,您可以这样做,而不必在表之间建立关系。删除
relationshiop下的
relationshiop
并返回
Report
,然后选择
Home>managerelationshiop
查看我的意思:

正如对话框所说,
“尚未定义任何关系”。
,但您仍然可以像以前一样通过在另一个表中进行选择来将一个表子集化(编辑:,RADO的回答证明此语句是错误的)。我知道您可以突出显示切片器并选择
格式>编辑交互
并取消选择与切片器关联的表。但我仍然对整件事感到困惑

我不知道引擎盖下面有什么事情发生吗?或者表之间的关系真的是由表的内容定义的吗?因为表之间存在相关值,并且存在潜在的主键(无论是自然的还是合成的),所以可以使用SQL、dplyr谓词或任何其他形式的查询技术来查询它们。你真的不需要一个明确定义的关系吗

或者换句话说,Power BI表关系的建立是否具有SQL等价物?也许像:

对不起,我在这里有点漫无边际,但我只是很困惑。到目前为止,谷歌搜索只是增加了混乱。因此,感谢您的任何见解

您的陈述“但是您仍然可以像以前一样通过在另一个表中进行选择来子集一个表”是不正确的。这是一个关键问题

关系允许在Power BI中传播筛选器上下文。这是一个非常复杂的短语,如果你计划使用powerbi,你必须了解它的含义。这是需要理解的最重要的概念

要理解我的意思,您需要编写DAX度量,并尝试使用表来操作它们。当你有或没有关系时,你会立即看到区别

整个系统如何工作(简化): PowerBI包含一种称为“DAX”的语言。您将在DAX中创建度量,然后PowerBI将它们转换为其内部语言xmSQL,这是SQL的一种特殊风格。在xmSQL中,常规连接转换为左外连接,如下所示:

SELECT SUM(Sales.Amount)
FROM Sales
LEFT OUTER JOIN Customer
ON Sales.Customer_Key = Customer.Customer_Key
方向关系有点复杂,但概念上相似

总的来说,当您在表之间创建关系时,您正在告诉PowerBI引擎如何连接表。然后,引擎还添加了一些优化以加快查询速度。 每次执行DAX度量时,单击切片器或可视对象,PowerBI都会在后台生成多个xmSQL语句,执行它们,然后将它们的结果呈现为可视对象。您可以使用一些工具(如DAX Studio)查看这些SQL查询

请注意,在PowerBI中不一定要在表之间建立关系。您可以使用DAX(以编程方式)模拟相同的行为,但这种“虚拟”关系更为复杂,速度可能会慢得多

在RM(关系模型)和ERM(实体关系模型)表中,表示关系/关联。因此,关系在“RM”中,关系在“ERM”中

FKs(外键)在伪ERM方法中被错误地称为“关系”。SQLFK约束表示子窗口在其他地方显示为PK(主键)或UNIQUE。DBMS使用它们来禁止无效更新&优化查询

电力BI“关系”不是FK。它们是关于如何构建查询的说明

当有一个FK时,我们经常想加入它。因此,当存在FK时,我们通常需要一种权力BI关系


(另请参见开发者的下载PDF链接。)

PS我们不需要约束来保持、声明或查询。约束(包括PKs、FKs、UNIQUE和基数)由表含义(特征)谓词以及可能出现的业务情况决定。如果约束成立,那么我们只是有时得到的行数比其他情况少&一些查询对总是返回相同的结果,而其他情况下它们不会返回相同的结果


PS交叉连接是具有真实条件(或在某些DBMS中没有条件)的内部连接。是否存在“关系”即FK是无关紧要的。如果条件为FK=PK或除TRUE以外的任何其他值,则它不是交叉连接;否则,无论表之间是否存在FK,都是交叉连接。只是我们经常希望PK=FK出现在一个条件中&工具可以并确实使用FK出现在一个默认条件中

你问“引擎盖下发生了什么?” 简单的答案是“关于关系的陈述”

许多好心人画ER图,似乎忘记或不知道他们的ER图实际上是“语言陈述的图片”

问题是模棱两可

许多善意的人直接跳转到ER图,而没有表达他们的ER图所基于的逻辑语句