当前位置: 首页 > news >正文

精品丨模型关系介绍

PowerBI中的模型关系相信小伙伴们都不会感觉到陌生,因为一份优秀的报表无法离开数据模型的支撑。
对比其它BI类工具而言,白茶认为其建模功能才是最为突出的功能点。

模型关系类型

PowerBI中我们常用的模型关系一共包含5类:

  • 一对一关系(1:1)

  • 一对多关系(1:*)

  • 多对多关系(*:*)

  • 虚线关系(1:N)

  • 无关系

多对一关系在白茶看来与一对多其实没有太大区别,这里就不单独罗列了。

一对一

一对一关系通常表示维度表中的所有维度与事实表中都是一一对应的。

假设Dim表中只有3行数据,那么与之对应的Fact表也是只有3行数据,这种场景在实际应用中并不多见。

一对一关系可以设置筛选器方向为交叉筛选,即除了利用Dim表来筛选Fact表以外,用Fact表也可以反向来筛选Dim表。

如果想避免一对一情况下Fact表对Dim进行筛选,可以将模型关系更改为一对多,再将模型筛选器方向改为单向即可。

一对多

一对多关系可以说是模型关系中最常见的一种,也是使用频率最高的一种了,通常表示Fact表中的多行记录属性在Dim表中均可以找到对应项,也是主流模型的设计思路。

也因此派生出了两种模型设计思路:星型模型雪花模型

多对多

多对多的关系通常发生在数据颗粒度不统一的场景,例如Fact表中最细的颗粒度包含产品、门店、销售、地区,而Target目标只针对门店或者地区。

那么这种情况下,将Fact和Target在同一个上下文中展示,且包含销售颗粒度的时候,则相同门店或相同地区的销售其Target值是一致的。

类似于这种场景,也有可能是两张Fact表相关联,需要注意交叉筛选器方向

虚线关系

我们在创建模型关系时,一旦勾选了使此关系可用,那么创建的模型关系都属于实线关系,通常也叫激活的关系

与之对应的,取消使此关系可用的模型关系则为虚线关系,也叫未激活的关系

这种情况通常发生在Fact表中存在双属性列与同一Dim表建立关系时。

例如:
Fact表中既有订单日期,也有发货日期和送达日期,都需要与日期表建立关联,模型之间只能有1条激活关系,那么剩下的2条关系则处于未激活的状态。

这个场景在实际应用中并不多见,面对未激活的关系,我们可以在构建DAX函数时,通过USERELATIONSHIP函数来激活其他关系。

无关系

无关系其实比较好理解,就是表与表之间,并不存在任何关系

对比上面的其他类型关系的使用率,无关系仅次于一对多。

是的,你没看错,无关系使用频率非常的高。

无关系适用场景非常的多,在字段参数功能发布之前,我们需要创建动态轴,需要创建多属性维度表时,需要无关系。

服装场景下,需要筛选某一颜色的产品销量,且单个SKU是包含多颜色时,需要无关系。

RLS权限设计时,权限表与维度表之间也是无关系。

而在DAX函数中,可以用来处理无关系的函数,也非常的多,比如IN、TREATAS、INTERSECT、FIND、SEARCH、VAR等,这些其实都可以用来处理无关系。

当然,从性能的角度出发,虽然TREATAS函数某些场合下表现接近于实线关系,但还是推荐使用实线关系

星型模型与雪花模型

星型模型

星型模型表示Fact表位于中心,Dim表直接与事实表建立模型关系。

对于DAX计算来说,星型模型其实适用大部分场景,而且很大程度上可以避免模型设计上带来的性能损耗

雪花模型

雪花模型表示Dim表经过规范化处理,多个Dim表通过串联的方式,与Fact表关联到一块,单表没有冗余,可以避免数据冗余的存储问题

缺点也很明显,在DAX计算的时候,会因为雪花模型导致上下文转化过程中产生性能损耗

模型关系注意事项

参照完整性

从概念上来说,参照完整性并不是很好理解,说的通俗一点就是Fact中的维度,Dim表中不存在

如上图所示,Fact表存在的类别在Dim表是不存在的,因此这些行值所对应的数据都会被汇总归类到空白

如果Dim表中的类别本身就包含空白选项,那么因为参照完整性的空白数据会与空白选项的数据合并

这其实是不利于后期运维的,因此要尽量保证Dim表与Fact表的维度都是完整的。

有趣的是,VALUES参照完整性DISTINCT不考虑参照完整性,感兴趣的小伙伴可以自己动手测试。

注意,因为模型关系产生的扩展表相关问题这里就不赘述了。

日期表

日期表单独拿出来讲的原因就是因为它太重要了,日常开发中用户需要的指标基本上都无法脱离同环比,因此日期表是重中之重。

  • 日期列需要注意日期和日期/时间不是一回事

  • 能使用自己创建的日期表,就不要使用内部自动生成的

  • 能使用DAX函数自己计算时间指标,就不要使用时间智能函数

  • 能标记日期表就进行标记,可以避免模型中出现隐藏的自动日期表

  • 文件设置中的新文件的自动日期/时间自动关系一定要关闭

以下是利用DAX创建日期表的通用代码,可以根据Fact日期创建对应的日期表:

Dim_Date =
GENERATE (CALENDAR ( MIN ( 'Fact'[DATE] ), MAX ( 'Fact'[DATE] ) ),//'Fact'[DATE]需要根据自身情况调整VAR DA = [Date]VAR YEAR =YEAR ( DA )VAR QUARTER ="Q" & FORMAT ( DA, "Q" )VAR MONTE =FORMAT ( DA, "MM" )VAR DAY =DAY ( DA )RETURNROW ("Year", YEAR,"Quarter", QUARTER,"Month", MONTE,"DayOfMonth", DAY,"YearQuarter", YEAR & QUARTER,"YearMonth", YEAR & MONTE,"YearMonthCount",YEAR * 12 + MONTE)
)

安全筛选器

当模型关系为一对一或者多对多时,此时交叉筛选器方向选择双向,则可以选择是否在两个方向上应用安全筛选器

如图,我们现在添加了RLS权限,设定Fact_Sales表的Key等于A。

模型未应用安全筛选器,其结果如下:

模型应用了安全筛选器,其结果如下:

不开安全筛选器,则RLS仅对单表生效,打开安全筛选器,则RLS会对双端表生效

题外话

某些场景下,Fact表中可能缺少某些Dim表属性,需要创建列将Dim与Fact表关联,这种场景下切忌将列设置为BlankNull,一定要将列设置一个默认值,否则有可能造成云端数据刷新问题


相关文章:

精品丨模型关系介绍

PowerBI中的模型关系相信小伙伴们都不会感觉到陌生,因为一份优秀的报表无法离开数据模型的支撑。 对比其它BI类工具而言,白茶认为其建模功能才是最为突出的功能点。 模型关系类型 PowerBI中我们常用的模型关系一共包含5类: 一对一关系(1:1) …...

CentOS7 配置 nginx 和 php 方案

配置方案 一、安装软件二、编写配置文件,连接PHP三、引用文件四、测试 鉴于网上教程错综复杂,写下一这篇文章 本教程只需要三步即可 一、安装软件 yum install -y nginx php php-fpm二、编写配置文件,连接PHP 一般情况下在安装完 nginx 后…...

Promise.all全面解析:使用方法与实战技巧

Promise是JavaScript中处理异步操作的重要机制,它提供了一种优雅的方式来处理异步回调,避免了传统回调地狱的问题。而Promise.all作为Promise的一个静态方法,更是在处理多个异步操作时发挥着关键作用。本文将全面解析Promise.all的使用方法&a…...

NLP从零开始------9文本进阶处理之文本相似度计算

1.文本相似度计算简介 在自然语言处理中,经常会涉及度量两个文本相似度的问题。在诸如对话系统和信息减速等中,度量句子或短语之间的相似度尤为重要。在新闻学传媒中应用文本相似度可以帮助读者快速检索到想要了解的报道。 文本相似度的定义式如下所示&a…...

Electron 在 MAC 上的 build 签名应用配置

Electron 在 MAC 上的 build 签名应用配置涉及多个步骤,包括准备开发者账号、生成证书和配置文件、配置环境变量以及使用适当的工具进行签名和公证。以下是一个详细的配置流程: 一、准备开发者账号 首先,你需要在 Apple 开发者网站 注册并拥有一个开发者账号。这个账号将用…...

15 交换机命令行配置

交换机命令行配置 一、交换机命令行基本配置 (一)配置主机名 Switch>enable Switch#configure terminal Switch(config)#hostname S1(二)查看配置信息 Switch#show running-config Building configuration...Current confi…...

工作流之Flowable与SpringBoot结合

文章目录 1 Flowable1.1 flowable-ui部署运行1.2 绘制流程图1.2.1 绘制1.2.2 绘图细节1.2.3 bpmn文件导入 1.3 后台项目搭建1.3.1 pom.xml1.3.2 数据库表说明 1.4 流程引擎API与服务1.4.1 主要API1.4.2 示例 1 Flowable 1.1 flowable-ui部署运行 flowable-6.6.0 运行 官方dem…...

python实战:数据分析基础知识

当涉及到数据分析和统计建模时,Python 提供了强大的工具和库,如 pandas、numpy、statsmodels 和 matplotlib。本文将以一个实际的案例为例,介绍如何利用这些工具进行回归分析,并通过可视化工具进行结果展示和解释。 1. 背景介绍 …...

Grafana深入讲解

Grafana 深入讲解 目录 概述Grafana 基本概念 2.1 Grafana 简介2.2 Grafana 功能特性2.3 Grafana 架构 Grafana 安装与配置 3.1 安装 Grafana3.2 配置 Grafana3.3 验证 Grafana 安装 Grafana 数据源 4.1 支持的数据源类型4.2 添加数据源4.3 配置 Prometheus 数据源 Grafana 仪…...

002 git

下载 使用git clone命令下载特定分支 打开终端或命令行界面。 使用cd命令切换到你想存放仓库副本的本地目录。 使用以下命令克隆仓库的develop分支到本地&#xff08;注意替换<仓库URL>为实际的仓库URL&#xff09;&#xff1a; git clone -b develop --single-branch…...

MySQL --- 用户管理

一、用户信息 MySQL中的用户信息&#xff0c;都存储在系统数据库mysql的表user中 user表的结构如下 这里主要介绍以下几个字段 host &#xff1a; 表示这个用户可以从哪个主机登陆&#xff0c;如果是 localhost &#xff0c;表示只能从本机登陆 user&#xff1a; 用户名 a…...

Linux 错误码

目录 一、概述二、含义三、错误处理函数1、IS_ERR2、strerr、perror 一、概述 在 Linux 系统中&#xff0c;错误码是用来表示操作系统运行过程中发生的错误的数字代码。错误码通常由负数表示&#xff0c;0 表示成功&#xff0c;正数表示警告或其他非致命错误。 为了开发者更好…...

《向量数据库指南》——开源社区与商业化的平衡

开源社区与商业化的平衡 Lynn:我觉得这个说的特别好,因为开发者工具其实有很多,但是事实上真正去做开源的这种社区的,尤其是做的比较大的,其实这样的企业还是比较少的。那么当初在起步的时候就这么坚定的去选择开源,然后这么短的时间能获得这么多产品反馈。其实让我想到那…...

记录一次echarts图表大数据量轮询刷新页面卡死问题的优化

项目场景: 在我们的项目架构中,集成的Echarts图表组件采用了折线图,业务需求即每300毫秒自动更新图表上的数据,并且每一次的数据点数量达到了约700个,折线图刷新的很快,每300毫秒就要刷新数据 问题描述 开发过程中发现在这种数据量请求频率下,大概2个小时左右就会导致…...

补录:day023-回溯法

40.组合II 给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意&#xff1a;解集不能包含重复的组合。 思路:组合题目二&#xff0c;这个题…...

【物联网】(防水篇)电子产品如何做到IPX7级别的防水?

电子产品如何做到IPX7级别的防水&#xff1f; 要使电子产品达到 IPX7 级别的防水&#xff0c;通常需要以下几个方面的措施&#xff1a; 1. 密封设计&#xff1a; 在产品的外壳连接处、接口、按键等部位&#xff0c;采用高质量的密封材料&#xff0c;如橡胶垫圈、硅胶密封圈等…...

JDK版本切换 - Windows

JDK 下载 点我跳转 - JDK下载官网 可以切换网址后面的JDK版本来跳转到不同的JDK版本下载页面 JDK 安装 双击exe文件即可安装最好是使用默认路径安装, 几个版本的JDK加起来也就1G如果双击exe文件没反应的话, 可以用**7-zip**解压出相应的文件 下载安装**7-zip**** - 默认路…...

STM32-IIC协议详解

一、IIC简介 IC&#xff08;Inter-Integrated Circuit&#xff09;协议由飞利浦公司于1980年代开发&#xff0c;是一种用于集成电路间短距离通信的串行协议。它设计用于连接低速外围设备&#xff0c;特别适合于需要简单数据交换的场景。IC协议使用两根信号线&#xff1a;SCL&am…...

Spring事件处理

Spring事件处理 1、核心概念2、线程模型3、监听上下文事件4、自定义事件 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、核心概念 ApplicationContext&#xff1a;Spring的核心容器&#xff0c;负责管理Bean的生命周期&#xff0c;并支…...

软设之安全防范体系

安全防范体系的划分&#xff1a; 物理环境的安全性。包括通信线路&#xff0c;物理设备和机房的安全等。物理层的安全主要体现在通信线路的可靠性&#xff0c;软硬件设备的安全性&#xff0c;设备的备份&#xff0c;防灾害能力&#xff0c;防干扰能力&#xff0c;设备的运行环…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...