#01 事实表&维度表
事实表:实际发生的事实,比如交易记录
维度表:丰富事实表的观察维,比如产品属性、客户属性
#02 关系
可以理解为自动化的vlookup(),一般情况下,源表为事实表,相关表为维度表。
表关系通过源表的外键和相关表的主键相关联。
#03 数据模型
彼此间存在关系的一组表格是一个数据模型
#04规范化与反规范化
反规范化设计表格
从用户角度出发,一个产品有那么多的属性,放在一张表中是理所当然的事情
规范化设计表格
从技术人员出发,将属性值单独用表存放,使用外键与主键来关联表,是合理的选择,可以减少数据冗余
实际在PBI应用当中,要根据情况适当反规范化,减少表格,减少数据模型的复杂程度
#05 一对多
在一对多关系中其中“一”端的主键要求每一行都独一无二。
例如:交易表和产品表,产品表中的主键一定是只有一个(比如产品编号)
#06 行上下文&关系
对行数据做操作时,DAX中行上下文不会自动沿关系传递到另一张表中,需要用到两个有用的的函数:RELATED / RELATEDTABLE
RELATED()
在一对多关系中,可以从“多”端访问到“一”端,即从实事表向维度表进行查询,如果“一”端没有匹配,返回空值
使用RELATED可以对数据表反规范化操作,扩展事实表的数据,并将不再使用的维度表从数据模型中隐藏掉,以简化模型。
例:=FactSales[UnitPrice] – DimProduct[ListPrice]
上面的方法无效,因为这是两张表,当前行上下文不会自动沿关系传递到另一张表中,这时需要用RELATED 沿着模型关系,查询当前表的行上下文关联的“一”端DimProduct表中ListPrice对应的值
=FactSales[UnitPrice] – RELATED (DimProduct[ListPrice])
RELATEDTABLE()
如果是从“一”端访问“多”端,就需要用到RELATEDTABLE(),会根据关系,返回一个表(因为从一端查询多端,得到的结果一般有多行)
例:=COUNTROWS( RELATEDTABLE(DimProduct) )
本列中RELATEDTABLE 将返回“一”端主键值对应的“多”端的行,作为一个“表“返
COUNTROWS将对“表”的行数进行计数
RELATED 和 RELATEDTABLE 可以沿着模型中的关系一层层传递,不仅仅只有一层,前提是该关系链的类型(即一对多或多对一)和方向相同
#07 筛选上下文 & 关系
DAX语言筛选在模型中的传递
筛选上下文会自动与关系相互作用,即当我们在报表中进行筛选时,所做出的筛选会沿着模型关系进行传递,当然,这种传递依旧受关系类型与方向的影响。
筛选上下文只能是从“一”端自动传递到“多”端,无法从“多”端传递到“一”端,与多少层关系无关。
当我们从产品表中筛选一个产品时,该筛选可以传递到对应“多”端的销售明细表中,但是反过来,从“多”端的销售明细表中,无法筛选产品表