一、数据标签的结构
成都创新互联公司服务项目包括呈贡网站建设、呈贡网站制作、呈贡网页制作以及呈贡网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,呈贡网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到呈贡省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
1. 业务域
比数据域更高维度的业务划分方法,适用于特别庞大的业务系统,且业务板块之间的指标或业务重叠性较小。例如用车业务板块包含乘客端、司机端,电商业务板块包含商城、返利模块。
2. 业务过程
业务过程可以概括为一个个不可拆分的行为事件,如下单、支付、评价等业务过程/事件。
看到这一系列的名词,很多人可能就开始懵逼了,业务域倒还能理解,简单来说就是对不同业务的分类;业务过程也容易理解,相当于画业务流程图呗。
那数据域又是何方神圣?
3. 数据域
是联系较为紧密的数据主题的集合,是对业务对象高度概括的概念层归类,目的是便于数据管理与应用。
简而言之,数据域就类似于我们电脑桌面要建立不同的文件夹来存储数据,这些个文件夹名就是数据域。
维度、维度属性、修饰这些怎么理解?有什么用途?
4. 维度
是度量的环境,用来反映业务的一类属性,这类属性的集合构成一个维度,可以从who-where-when-what层面来看。
5. 维度属性
维度属性隶属于维度,相当于维度的具体说明,如用户维度中性别为男、女。
6. 修饰词
指除了统计维度以外指标的业务场景。
7. 修饰类型
对修饰词的抽象划分。
简而言之,维度和修饰都可以理解为原子指标的一些限定条件,懂sql的会更好理解一些,一般是写sql时,放在where语句后边的。
8. 度量/原子指标
原子指标和度量含义相同,某一业务行为事件下的度量,是业务定义中不可拆分的指标,如注册数。
9. 时间周期
用来明确数据统计的时间范围或是时间点,如最近30天、自然周、截至当日等。
10. 指标类型
包含原子指标、派生指标。
原子指标= 行为事件+度量
派生指标= 一个原子指标+多个修饰词+时间周期
例如:原子指标=完单量,派生指标=近一周iOS乘客完单量,包含时间周期=近一周,修饰词=iOS,维度=乘客,原子指标=完单量。
二、数据标签开发中常见问题与解决方法
问题1:指标定义不够清晰明确,两个页面上的指标定义其实是不同的,但是展示给商家看到的可能是同一个中文名称。又或者同样一个含义的指标在不同的界面上展示的名称却不相同,让人产生歧义。
问题2:一个指标因为由不同的数据开发同学来制作,可能会被重复开发,不但造成资源浪费,还会造成维护困难。
问题3:对于需要新开发的指标,不仅缺少开发工具简化开发流程,甚至该使用哪些表,不该使用哪些表很大程度上都要凭借数据开发同学与数仓同学的经验。如果稍微马虎一点或者缺乏经验,比如使用了某些业务域下特有的表或者不是由数仓提供的统一中间层的表就可能会使用错误的数据,造成后期返工等情况。
为了解决上述问题,指标库应运而生。
指标库中指标数据的来源一般都是从DW 库,数仓统一中间层的表中通过计算得来。指标库最基础的元数据,比如维度信息,原子指标信息等都是使用数仓统一中间层。
第一步:数仓先确定业务域并导入DW 库统一中间层的表。
要录入的维度指标属于哪个域先确定下来,例如店铺属于店铺域,订单支付金额属于交易域。只要数仓内部自己有统一的规划即可。然后就可以导入中间层的表到指标库。
第二步:数仓定义原子指标,维度,修饰词。
如果之前没有定义过,就新建维度指标等,并关联到正确的表字段上,在第一步导入表的过程中也可以快速关联到已经存在的维度指标。
第三步:生成派生指标。
有了维度,原子指标等元数据,就可以定义派生指标了。利用指标库的SQL 生成功能可以快速生成技术口径。同时在指标库上可以快速创建单个派生指标的数据开发平台调度任务。
第四步:应用派生指标
选择需要的多个派生指标后可以通过指标库快速创建多个派生指标的数据开发平台调度任务和统一数据服务的在线API。至此就可以在线上查询一批指标的数据了。当然指标库上也支持临时查询指标的数据。
标签库的特性:
(1) 检索 :标签多意味着检索效率低,大多业务人员习惯于就访问自己关注的那几个标签,因此需要设立业务专区,根据自身企业的业务分类将标签分门别类,但无论哪种分类都解决不了一线灵活管理的要求,因此还需要提供自定义目录能力,共性的标签确保权威性,个性的标签确保灵活性。
(2) 实时 :可以将整个场景(LBS)封装成一个动态标签,然后再配置一个触发规则;
(3) 簇群 :每个用户都处于一个特定群体中,需要结合业务实际突破了原有以用户为核心的标签管理方式,打造簇群这种新的标签体系,这样可以大幅提升客群管理效率和生成效率,比如营销家庭产品肯定更关注户主,因此就需要家庭标签,而不是个人标签。
(4) 性能 :标签库特别关注两种性能,一个是实时计算能力,一种是实时查询能力,前者解决标签组合计算生成客户群的效率问题,比如10个标签组合关联得到目标用户群,你得在极短的时间生成,后者解决的是实时统计的问题,因为业务人员需要基于实际数据量调整策略。
(5) 聚合标签: 比如原来有四个工作地位置标签,分别是用户工作地归属地市【日】、用户工作地归属区县【日】、用户工作地归属乡镇【日】、用户工作地XXXX【日】等等,但你会发现用户在使用的时候往往无法一步到位选择到自己所需的标签,因为选择太多、粒度太细,而这种现象普遍存在。因此新增了聚合标签这个概念,就是做一次封装,最后面向用户展示的标签被整合成一个,即用户工作地归属行政区域【日】,而更细粒度的标签就定义为子标签,这是一种自顶向下的设计方法。
三、标签在营销中的应用
标签库与营销平台的衔接流程 :营销平台使用的客户群全部来自标签库,用户在营销平台发起的投放流程应该最为便捷的选择到自己在标签库创建的客户群,反之,在标签库也应该最为方便的将客户群推送到营销等外部平台。
我们现在都在提中台,标签也是中台,而数据中台最核心的工作,不是建什么功能,而是持续的提升模型和标签质量,让这些数据持续的产生价值。
需要建立标签效果的反馈机制,比如依据营销的成功率进行标签的评估,你起码得知道哪个标签跟哪个营销活动有关,你才能从营销的成功情况评判标签的价值。
固定资产标签主要用于企业内部对固定资产的管理,如公司内部的电脑,办公桌办公椅的管理,固定资产标签是贴在固定资产上,标注固定资产的名称,编号,使用人,以及登记日期等信息,下面介绍在条码标签打印软件中如何连接SQLServer数据库制作固定资产标签。
运行条码标签打印软件,新建一个空白标签,设置好固定资产标签的大小行列等信息后打开数据数据库设置,添加一个SQLServer数据源,把SQLServer数据库中“yu”数据库的“Sheet1”表中的固定资产信息导入中琅条码标签打印软件中(需配置SQLServer数据库访问权限),测试连接后添加。
在标签上添加一个普通文本,打开普通文本的“图形属性”-“数据源”,修改数据位“固定资产标签”。
再添加一个普通文本,数据源中的文本数据修改为“资产名称”,点数据源左侧+号添加一个一个数据,数据对象类型选择“数据库导入”,导入SQLServer数据库中的“资产名称”字段。“使用人”和“登记日期”也是这样操作添加。
绘制一个条形码,打开条形码的“图形属性”-“数据源”,通过数据库导入SQLServer数据库中的资产编号。
预览查看制作的固定资产标签,可以看到SQLServer数据库中有多少固定资产信息就可以在中琅条码标签打印软件中批量制作多少个固定资产标签。
根据功能可以分为五大类:
1、核心标签
2、格式化标签
3、SQL 标签
4、XML 标签
5、JSTL 函数
一、核心标签
1、c:out /标签会自动忽略XML标记字符,所以它们不会被当做标签来处理。标签用来显示一个表达式的结果,与%= %作用相似,它们的区别就是c:out标签可以直接通过"."操作符来访问属性。
c:out标签有如下属性:
scope 的作用域大小依次为:
application session request page(默认)
jsp 处理变量的作用域先后依次为:
page(默认) - request - session - application
2、c:set标签用于设置变量值和对象属性。
3、c:remove标签用于移除一个变量。
4、c:catch 标签主要用来处理产生错误的异常状况,并且将错误信息储存起来。
5、c:choose标签与Java switch语句的功能一样,用于在众多选项中做出选择。
switch语句中有case,而c:choose标签中对应有c:when,switch语句中有default,而c:choose标签中有c:otherwise。
c:when标签的属性如下:
6、c:import标签提供了所有jsp:include行为标签所具有的功能,同时也允许包含绝对URL。
c:import标签有如下属性:
7、c:forEach标签用作迭代一个集合中的对象。
语法格式:
c:forTokens
items="string"
delims="string"
begin="int"
end="int"
step="int"
var="string"
varStatus="string"
c:forEach标签有如下属性:
c:forEach varStatus 属性
current : 当前这次迭代的(集合中的)项
index : 当前这次迭代从 0 开始的迭代索引
count : 当前这次迭代从 1 开始的迭代计数
first : 用来表明当前这轮迭代是否为第一次迭代的标志
last : 用来表明当前这轮迭代是否为最后一次迭代的标志
begin : 属性值
end : 属性值
step : 属性值
例如:
c:foreach items="${sessionScope.userList}" var="userItem" begin="1" end="10" step="3" varStatus="userStatus" XXX /c:foreach
实例解读: 对 session 对象存储的 userList 集合对象进行遍历,每次访问的项暂时存储在 userItem 变量中,从索引 1 开始至索引 10 进行访问,但不是依次访问,每隔 3 个元素访问一次。每次访问项的状态相关值由 userStatus 对象暂存。
c:foreach 的 varStatus 属性暂存项的相关状态属性,可由 EL 表达式引用。
${userStatus.index} 此项的索引,从0开始
${userStatus.count} 此项的计数序号,从1开始
${userStatus.first} 此项是否是第一项,布尔值
${userStatus.last} 此项是否是最后一项,布尔值
${userStatus.begin} 此次迭代的起始索引,对应c:foreach中begin属性值
${userStatus.end} 此次迭代的终止索引,对应c:foreach中end属性值
${userStatus.step} 此次迭代的跳跃步伐,对应c:foreach中step属性值
8、c:forTokens标签通过指定分隔符将字符串分隔为一个数组然后迭代它们。
c:forTokens
items="string"
delims="string"
begin="int"
end="int"
step="int"
var="string"
varStatus="string"
9、c:url标签将URL格式化为一个字符串,然后存储在一个变量中。
这个标签在需要的时候会自动重写URL。
var属性用于存储格式化后的URL。
c:url标签只是用于调用response.encodeURL()方法的一种可选的方法。它真正的优势在于提供了合适的URL编码,包括c:param中指定的参数。
c:url标签有如下属性:
10、c:param标签用于在c:url标签中指定参数,而且与URL编码相关。
在c:param标签内,name属性表明参数的名称,value属性表明参数的值。
语法格式:
c:param name="string" value="string"/
c:param标签有如下属性:
11、c:redirect标签通过自动重写URL来将浏览器重定向至一个新的URL,它提供内容相关的URL,并且支持c:param标签。
c:redirect标签有如下属性:
二、格式化标签
JSTL格式化标签用来格式化并输出文本、日期、时间、数字。引用格式化标签库的语法如下:
%@ taglib prefix="fmt uri="" %
1、fmt:formatNumber标签,fmt:formatNumber标签用于格式化数字,百分比,货币。
语法格式:
fmt:formatNumber
value="string"
type="string"
pattern="string"
currencyCode="string"
currencySymbol="string"
groupingUsed="string"
maxIntegerDigits="string"
minIntegerDigits="string"
maxFractionDigits="string"
minFractionDigits="string"
var="string"
scope="string"/
fmt:formatNumber标签有如下属性:
如果type属性为percent或number,那么您就可以使用其它几个格式化数字属性。maxIntegerDigits属性和minIntegerDigits属性允许您指定整数的长度。若实际数字超过了maxIntegerDigits所指定的最大值,则数字将会被截断。
有一些属性允许您指定小数点后的位数。minFractionalDigits属性和maxFractionalDigits属性允许您指定小数点后的位数。若实际的数字超出了所指定的范围,则这个数字会被截断。
数字分组可以用来在每三个数字中插入一个逗号。groupingIsUsed属性用来指定是否使用数字分组。当与minIntegerDigits属性一同使用时,就必须要很小心地来获取预期的结果了。
您或许会使用pattern属性。这个属性可以让您在对数字编码时包含指定的字符。接下来的表格中列出了这些字符。
2、fmt:formatDate标签用于使用不同的方式格式化日期。
语法格式
语法格式
fmt:formatDate
value="string"
type="string"
dateStyle="string"
timeStyle="string"
pattern="string"
timeZone="string"
var="string"
scope="string"/
fmt:formatDate标签有如下属性:
fmt:formatDate 标签格式模式:
三、JSTL函数
JSTL包含一系列标准函数,大部分是通用的字符串处理函数。引用JSTL函数库的语法如下:
%@ taglib prefix="fn"uri="" %
1、fn:contains()函数用于确定一个字符串是否包含指定的子串
c:if test="${fn:contains(原始字符串, 要查找的子字符串)}"
.../c:if
举个例子,一篇文章, 比如 《大陆 ** 明星又离婚了》 这属于 「娱乐」 类新闻, 又属于 「中国」 分类下的新闻, 所以文章和分类的关系一般是 1 对 N 。
数据库表结构设计
article :
字段名 注释
id
title 文章标题
author 作者
create_time 创建时间
edit_time 修改时间
creator 创建者
editor 修改者
等等...
category:
字段名 注释
id
article_id 文章 id
category_name 分类名
subcategory_id 子分类(与分类一对多的关系, 不一定需要子分类)
子分类可以依次类推, 想分多细分多细, 看需求
就以只有分类为例(是否含子分类其实原理类似), 这样其实 left join 就可以出来结果, 但是这样的结果不适合展示, 因为多个分类查出的一篇文章就有几行结果(对于 SQL 来说几个分类就几条数据), 所以在后台管理的文章列表页面中, 一次查文章, 还有一次根据文章 id 查出所有分类, 两次查询结果和起来才能显示一条结果,如下表格所示:
标题 分类
《大陆 ** 明星又离婚了》 「大陆」 「娱乐」