开发者社区> 郑郑.in> 正文

使用SqlServer建立数据仓库

简介: 本文介绍了一个数据仓库从无到有的建立过程,包括设计维度表、事实表,数据抽取,数据可视化。使用SQlServer2008R2制作,数据源为Mysql官方示例数据集。
+关注继续查看



一、作业一:星型模型及缓慢变化维

1.1 问题一:基本星型模型

对于问题一中建立星型模型所满足的要求:(1)公司每个员工每月的薪资分别是多少?(2)哪些部门每个月开出的薪资比较高?(3)哪种职称的每月得到的薪资比较高?我们对需求语义进行分析可知:事实表中的度量有:工资,时间;维度有:员工信息、部门信息、职称信息。

通过以上分析,我们通过数据库设计工具进行制图,在星形模型中,无论是事实表还是维度表都需要一个SK,这个SK通常为int类型;并将原本表中的主键变为NK;此外,事实表与维度表通过外键关联。我们设计的星形模型如图1.1所示。

899019d81b1547d6a67dc387fac3624713e94964

图1.1 问题一星形模型

其中salaries_fact是事实表,title_dim、emp_dim、dept_dim、day_dim是维度表,表title_dim的字段定义如表1.1所示,表emp_dim的字段定义如表1.2所示,表dept_dim的字段定义如表1.3所示,表day_dim的字段定义如表1.4所示,表salaries_fact的字段定义如表1.4所示。

表1.1 title_dim表字段定义

类型

长度

是否为主键

title_key

int

11

title

varchar

50

表1.2 emp_dim表字段定义

类型

长度

是否为主键

emp_key

int

11

birth_day

date

 

first_name

varchar

20

last_name

varchar

20

emp_no

int

11

gender

varchar

10

hire_date

date

 

表1.3 dept_dim表字段定义

类型

长度

是否为主键

dept_key

int

11

dept_no

varchar

4

dept_name

varchar

40

表1.4 day_dim表字段定义

类型

长度

是否为主键

day_key

int

11

from_day

date

 

to_day

date

 

表1.5 salaries_fact表字段定义

类型

长度

是否为主键

salary_key

int

11

salary

int

11

emp_key

int

11

dept_key

int

11

fitle_key

int

11

day_key

int

11

1.2 问题二:增加缓慢变化维的星型模型

对于问题二中所增加的需求:(1)我们需要根据以前部门的名称统计名称改变以前的薪水情况;(2)同时,需要根据现在部门的名称统计整个部门历史的薪水情况。我们可以在问题一所建立的星形模型上进行修改得到,将department_dimension表中的dept_name做成一个混合类型的缓慢变化维类型即可。

通过以上分析,我们将dept_name属性变为两个属性dept_name_current和dept_name-history。其中,dept_name_current属性存储当前部门名称,dept_name-history存储历史部门名称。如图1.2所示。

07e39db3b8d30b00b01f23f58004815401571a82

图1.2 问题二星形模型

      相对于图1.1,图1.2中仅dept_dim表进行了修改,修改后的dept_dim表字段定义如表1.6所示。

表1.6  增加缓慢变化维的dept_dim表字段定义

类型

长度

是否为主键

dept_key

int

11

dept_no

varchar

4

dept_name_current

varchar

40

dept_name_history

varchar

40

二、作业二:导出表和多值维度问题

2.1 问题一:导出表

对于问题一中提出的要求:如果想要了解每位员工的年薪情况,但是又觉得在OLAP中查询的速度比较慢,应该怎样解决这一问题?我们可以使用导出表的形式来提升查询速度,其中聚集表的粒度为年薪。在第一次作业的基础上我们设计事实表:salaries_fact表;维度表:title_dim、emp_dim、dept_dim、year_dim。通过以上分析我们使用数据库设计工具进行设计,如图2.1所示。

c15f5c79ade74763dea8f6a7fb40718616c677ce

图2.1 问题一导出表

相对于图1.1,图2.1中新增了表year_dim,修改了表salaries_fact。其中表year_dim的字段定义如表2.1所示,表salaries_fact的字段定义如表2.2所示。

表2.1 year_dim表字段定义

类型

长度

是否为主键

year_key

int

11

year

date

 

表2.2 salaries_fact表字段定义

类型

长度

是否为主键

salary_key

int

11

salary

int

11

emp_key

int

11

dept_key

int

11

fitle_key

int

11

year_key

int

11

2.2 问题二:多值维度问题

对于问题二中提出的要求:如果公司管理层需要了解每位员工在公司的各部门中的变动情况,即员工什么时候来到公司,在哪些岗位工作了多长时间,现在在什么岗位工作。应该建立什么样的模型来满足要求?关键点在与解决一个多值维度问题。这里,我们使用桥接表+主表的方式解决。

这里我们设计事实表emp_fact,在查询时该表的信息通过桥接表msgGroup_dim提供。msgGroup_dim表与msgGroupMenberShip_dim表相连接。msgGroupMenberShip_dim表拥有msg_title_dim、msg_department_dim、msg_date_dim表的外键。如图2.2所示。

0b870cc084fdfa97b0dfe24ca0c274db102aefe3

图2.2 多值维度问题解决

其中employees_fact是事实表,其表结构如表2.3所示,salary_dim,date_dim, msgGroup_dim,msgGroupMemberShip_dim,msg_title_dim,msg_department_dim,msg_date_dim是维度表。salary_dim表字段结构如图2.4所示,date_dim表字段结构如图2.5所示,msgGroup_dim表字段结构如图2.6所示,msgGroupMemberShip_dim表字段结构如图2.7所示,msg_title_dim表字段结构如图2.8所示,msg_department_dim表字段结构如图2.9所示,msg_date_dim表字段结构如图2.10所示。

表2.3 employees_fact字段结构表

类型

长度

是否为主键

emp_key

int

11

birth_date

date

 

first_name

varchar

14

last_name

varchar

14

emp_no

int

11

gender

enum

 

hire_date

date

 

msgGroup_key

int

11

date_key

int

11

salary_key

int

11

表2.4 salary_dim字段结构表

类型

长度

是否为主键

salary_key

int

11

salary

int

10

表2.5 date_dim字段结构表

类型

长度

是否为主键

date_key

int

11

year

date

 

month

date

 

day

date

 

week

date

 

表2.6 msgGroup_dim字段结构表

类型

长度

是否为主键

msgGroup_key

int

11

表2.7 msgGroupMemberShip_dim字段结构表

类型

长度

是否为主键

msgGroupMemberShip _key

int

11

msgGroup_key

int

11

msg_title_key

int

11

msg_dept_key

int

11

msg_date_key

int

11

表2.8 msg_title_dim字段结构表

类型

长度

是否为主键

title_key

int

11

title

varchar

50

表2.9 msg_department_dim字段结构表

类型

长度

是否为主键

dept_key

int

11

dept_no

varchar

11

dept_name_current

varchar

50

dept_name_history

varchar

50

表2.10 msg_date_dim字段结构表

类型

长度

是否为主键

date_key

int

11

from_day

date

11

end_day

date

50

三、作业三:维度表的抽取

针对作业任务中提出的需求: 将样例数据库中的数据经过ETL过程装载到数据仓库中,主要是完成维度表格的装载,我们可以使用SQL Server的Integration Service项目进行数据的抽取与转换。根据前两次作业中对于数据仓库的设计,我们这里需要抽取的维度表有 day_dim、dept_dim、employees_dim、titles_dim四个。这里,我们在数据源部分使用SQL语句进行抽取,在数据目标部分使用表或视图的映射。下面我们依次对他们进行抽取。

3.1 一些准备工作

首先,我们将以上模型使用SQL语句在SqlServer数据库中建表,使用的SQL语句如下:

CREATE TABLE [day_dim] (

[day_key] int NOT NULL IDENTITY(1,1),[from_day] date NULL,[to_day] date NULL,

PRIMARY KEY ([day_key]) )

GO

CREATE TABLE [emp_dim] (

[emp_key] int NOT NULL IDENTITY(1,1),

[birth_date] date NULL,[first_name] varchar(20) NULL,[last_name] varchar(20) NULL,

[emp_no] int NULL,[gender] varchar(10) NULL,[hire_date] date NULL,

PRIMARY KEY ([emp_key]) )

GO

CREATE TABLE [title_dim] (

[title_key] int NOT NULL IDENTITY(1,1),[title] varchar(50) NULL,

PRIMARY KEY ([title_key]) )

GO

CREATE TABLE [dept_dim] (

[dept_key] int NOT NULL IDENTITY(1,1),

[dept_no] char(4) NULL,[dept_name] varchar(40) NULL,PRIMARY KEY ([dept_key]) )

GO

CREATE TABLE [salaries_fact] (

[salary_key] int NOT NULL IDENTITY(1,1),

[salary] decimal(12) NULL,[emp_key] int NULL,[dept_key] int NULL,

[title_key] int NULL,[day_key] int NULL,PRIMARY KEY ([salary_key]) )

GO

ALTER TABLE [salaries_fact] ADD CONSTRAINT [day_s] FOREIGN KEY ([day_key]) REFERENCES [day_dim] ([day_key])

GO

ALTER TABLE [salaries_fact] ADD CONSTRAINT [emp_s] FOREIGN KEY ([emp_key]) REFERENCES [emp_dim] ([emp_key])

GO

ALTER TABLE [salaries_fact] ADD CONSTRAINT [title_s] FOREIGN KEY ([title_key]) REFERENCES [title_dim] ([title_key])

GO

ALTER TABLE [salaries_fact] ADD CONSTRAINT [demp] FOREIGN KEY ([dept_key]) REFERENCES [dept_dim] ([dept_key])

GO

这里我们不详细解释创建Integration Service项目的过程,仅给出几点需要注意的问题:

(1)样例数据库为Mysql数据库,SQL Server不支持将其作为数据源,我们可以使用数据库可视化工具Navicat将样例数据库中数据传输到SQL Server的employees数据库中,并以SQL Server的employees数据库作为源数据库。

(2)我们需要将前两次作业设计的模式生成SQL Server数据库作为数据仓库,这里我们的数据仓库名字为“21751106郑明月”。

3.2 抽取title_dim表

titles_dim表中包含titles_key、title两个字段,我们可以直接从示例数据库employees的titles表中抽取。这里要注意的是再抽取过程中需要将将title字段去重,我们设置titles_key字段为主键自增。

Step1新建一个数据流任务,如图3.1所示

bedbaae8f045bcd263239f904a0962a996fe17cc

图3.1 创建数据流任务

Step2设计该数据流中的OLEDB源,数据转换,OLEDB目标。将两张表的字段进行对应。如图3.2所示。

d376157e0916687a6c6e8ca264d31470f65e42c3

图3.2 设计数据流

抽取数据源使用的SQL语句为:

SELECT  distinct  title

FROM      employees.titles

这里需要注意的是,如果直接将OLEDB源转为OLEDB目标,可会会有一个因为转码而造成的错误。如图3.3所示。

2470c0c56be42f4d129b1121349cd012ac203d1b

图3.3 一个错误

针对这个错误,我们设计一个中间转码的流程,如图3.4所示。

ebae8066b8e8eac845bab75c2395285877c97380

图3.4 错误的解决

Step3执行包,经过执行包后,我们看到绿色显示即为成功。如图3.5所示。

79b3069acaaa5986612ea5b4cb561fbfef965b12

图3.5 执行成功

抽取成功后数据仓库中titles_dim表中有7行数据,如下图3.6所示。

afcb2f30ad7427f2699a65a57621fdea3cf7e75c

图3.6 title_dim 表

3.3 抽取dept_dim表

dept_dim表中包含dept_key、dept_no、dept_name三个字段,我们可以直接从示例数据库employees的department表中抽取。我们设置dept_key字段为主键自增。

Step1: 新建一个数据流任务,图3.7所示。

674f24669fffd155856dca661c3d0ae37d66c9ac

图3.7 新建一个数据流任务

Step2设计该数据流中的OLEDB源,数据转换,OLEDB目标。将两张表的字段进行对应。如图3.8所示。

1e768b575557f74c5b0368f447e8007b0e03a4fe

图3.8 设计数据流

抽取数据源使用的SQL语句为:

SELECT   dept_no, dept_name

FROM      employees.departments

Step3执行包,经过执行包后,我们看到绿色显示即为成功。如图3.9所示。

d1f919cde748b0bd5b2eb0b18f7c10712ca1cf27

图3.9 执行成功

抽取成功后数据仓库中dept_dim表中有9行数据,如下图3.10

0d7d0b288ea797f95844ae19e251313e77796904

图3.10 dept_dim

3.4 抽取emp_dim表

employees_dim表中包含employees_keybirth_datefirst_namelast_nameemp_nogenderhire_date七个字段,我们可以直接从示例数据库employeesemployees表中抽取。我们设置employees_key字段为主键自增。

Step1: 新建一个数据流任务,如图3.11。

17be62446abe3ccf735deffe85a4db43c5f0235f

图3.11 新建一个数据流任务

Step2设计该数据流中的OLEDB源,数据转换,OLEDB目标。将两张表的字段进行对应。如图3.12。

d18252405d120c45a35b86a50e0f179cf9b27ae6

图3.12 设计数据流

抽取数据源使用的SQL语句为:

SELECT DISTINCT emp_no, birth_date, first_name, last_name, gender, hire_date

FROM      employees.employees

Step3执行包,经过执行包后,我们看到绿色显示即为成功。如图3.13。

376246476eec3f35cef77240c5b56695a312514f

图3.13 执行成功

抽取成功后数据仓库中dept_dim表中有300024行数据,如图3.14:

257ff0983a2f3d67c048fa4eb49f4cf49ec634a4

图3.14 dept_dim

3.5 抽取day_dim表

day_dim表中包含day_key、from_day、end_day三个字段,我们可以直接从示例数据库employees的employees表中抽取。我们设置employees_key字段为主键自增。

Step1: 新建一个数据流任务,如图3.15。

970f2c34b3738aa70e9cbe133118fb9242e5e417

图3.15 新建一个数据流任务

Step2设计该数据流中的OLEDB源,OLEDB目标。将两张表的字段进行对应。如图3.16。

5490aa3d93cd6129a014625fea41d7735acaed9f

图3.16 设计数据流

抽取数据源使用的SQL语句为:

SELECT DISTINCT to_date, from_date

FROM      employees.salaries

Step3执行包,经过执行包后,我们看到绿色显示即为成功。如图3.17。

4f7bc570fa77cfa31f79ea5ed10b9db280cbe8b7

图3.17 执行成功

抽取成功后数据仓库中day_dim表中有331603行数据,如下图3.18:

6ca027b0a4627e2153784d1b3c69990502e2faf9

图3.18 day_dim

四、作业四:事实表的抽取

事实表的抽取与维度表的抽取有相同的步骤,但是事实表抽取相对比较麻烦,这里我将事实表的抽取分为三个步骤。步骤一中,创建了中间表:将dept_emp与dept_manager表合并抽取到表produce_one、将salaries表与title表左连接抽取到表produce_two;步骤二中,将表produce_two与表produce_one左连接,抽取到包含所有信息的合并表produce_three;将表produce_three数据仓库中其他表左连接,抽取得到最终的事实表salaries_fact。下面详细讲解这一过程。

Step1创建中间表

使用如下SQL语句抽取表produce_one:

SELECT

       dept_emp.dept_no,dept_emp.emp_no,

       dept_emp.from_date,dept_emp.to_date,

       departments.dept_name

FROM

       departments,dept_emp

WHERE

       dept_emp.dept_no = departments.dept_no

使用如下SQL语句抽取表produce_two:

SELECT

              salaries.emp_no,salaries.salary,

              salaries.from_date AS salary_from_date,

              salaries.to_date AS salary_to_date,

              titles.from_date AS title_from_date,

              titles.to_date AS title_to_date

FROM

              salaries

LEFT JOIN titles ON salaries.emp_no = titles.emp_no

WHERE

              salaries.from_date >= titles.from_date

AND salaries.to_date <= titles.to_date

Step2抽取合并表

使用如下SQL语句抽取表produce_three:

SELECT

              produce_two.emp_no,produce_two.salary,

              produce_two.salary_from_date,produce_two.salary_to_date,

              produce_two.title,produce_one.dept_no

       FROM

              employees. produce_two

              LEFT OUTER JOIN employees.produce_one ON produce_two.emp_no =

 produce_one.emp_no

       WHERE

              produce_two.salary_from_date >= produce_one.from_date

       AND produce_two.salary_to_date <= produce_one.to_date

抽取成功后,该表中数据如图4.1所示。

855cabaef4bc4edea587044a40bd5cb055f2631f

图4.1 表produce_three 数据

Step3抽取事实表

得到produce_three表后,我们可以使用emp_no字段得到emp_dim表中的代理键emp_key;使用salary_from_date及salary_to_date字段得到day_dim表中的代理键day_key;使用title字段得到titles_dim表中的代理键title_key字段;使用dept_no字段得到dept_dim表中的dept_key字段。

设计事实表抽取数据流程如图4.2所示。

b19e1c47eaa81539b8c174cb48bb2469676e9db9

图4.2 事实表抽取数据流程

其中,抽取数据源部分使用的SQL语句如下:

SELECT

                     produce_one.salary,

                     emp_dim.emp_key,dept_dim.dept_key,

                     title_dim.title_key,day_dim.day_key

              FROM

                     produce_one

              LEFT JOIN title_dim ON produce_one.title = title_dim.title

              LEFT JOIN day_dim ON produce_one.salary_from_date = day_dim.from_day

              AND produce_one.salary_to_date = day_dim.to_day

              LEFT JOIN dept_dim ON produce_one.dept_no = dept_dim.dept_no

              LEFT JOIN emp_dim ON produce_one.emp_no = emp_dim.emp_no

以上数据流图执行成功后得到salaries_fact表,抽取成功结果图如图4.3所示。

1c0727fc1f78ec37c372eea6f42bdd07cb8bfa88

图4.3 抽取成功

salaries_fact表中数据如图4.4所示。

3164042acd467d72bbb708f3ae02a18911550de7

表4.4 salaries_fact表中数据

五、作业五:数据分析

本次作业要求使用SqlServer对数据仓库进行可视化,需要实现的需求有:(1)分析每个员工每个月的薪水情况;(2)分析每个部门的薪水情况;(3)分析不同职称的薪水情况。

想要实现对上文数据仓库中数据的分析,我们需要借助SqlServer提供的两个项目AnalysisService项目以及报表项目。首先我们在AnalysisService项目中构建多维数据集,然后使用报表项目对其进行可视化。下面我们分两步完成需求。

5.1构建多维数据集

构建多维数据集这一部分我们使用一个AnalysisService项目完成。这里省略创建项目以及创建数据源、数据源视图的步骤,着重阐述多维数据集的构造。如图5.1所示为创建数据源后的成果图。

4672c1dc454511bbd29bb3069bab8451facfa69f

图5.1 创建数据源

Step1创建多维数据集

我们以salaries_fact表为度量创建一个多维数据集,创建过程中主要流程如图5.2所示。

2614554a491890270328b16e9fb19a50507c87a69816739b0ad218e4e949fcec6f007314e938e1fda7ba01693e5e6bea08fbe60aae81472e86e70720


图5.2 创建一个多维数据集

Step2:完善维度

创建一个多维数据集之后,我们对度量的相关维度进行完善,为每个维度增加

字段,完善之后维度字段如图5.3所示。

6eb994ab3dc0b4b3b322d2d2003098fa73bc0f3a    c4cc98a6cfc32fadbb03e77b382ca9951ff310f5

aad71eadb295c235540a6a3ac50b1eebb866c01e    e6177478a39a5bd3db9bb54a1febe25fced7623a

图5.3 完善维度

Step3部署

我们通过在项目上右键,然后点击部署的方式部署多维数据集,部署结果如图5.4所示。

102d89984ef31817fd99ae197acb42a87c84e7b9

图5.4 部署完成

此时我们可以在SqlServer的浏览器中进行浏览,如图5.5所示。

70f427c5514f56279ca4629413236815dbf98717

图5.5 浏览器中浏览

 

5.2数据可视化

我们使用SqlServer提供的报表项目完成数据可视化。这里我将不会详细描述具体创建步骤,仅提出几点注意事项:

(1)创建共享数据源属性时,选择Analysis Service一项,连接到我们上文部署的多维数据集项目上,如图5.6所示;

acf76d9aeb851c004eecb2c9a1ca194bcaa1d0ad

图5.6 创建共享数据源

(2)创建报表的查询设计器时务必要勾选参数这一项,否则该报表不能使用多个数值作为条件,如图5.7所示。

63d750c53d754e71d79ab246a1af360f24038140

图5.7 勾选参数

5.2.1部门与工资之间的关系

Step1 创建数据集

这里,我们选择Dept_Name、Salary、Salaries_Fact_计数、average_salary四个字段进行计算,如图5.8所示。其中average_salary为一个计算字段,其计算方式如公式(5.1)所示。

average_salary= Salary/ Salaries_Fact_计数               公式(5.1)

6bc3dacf50a7d6eb93e5b3c89fc235a6bc1c11bb

图5.8 创建数据集

Step2 设计表格、绘制图表

我们设计表格、设计图表如下图5.9所示。

7d234db8f041d83a0c25dd5ab8f0eb0f301b22de

图5.9 设计表格图表

Step3 图表的分析

根据Step2中的设计,可以得到表5.1及图5.10、图5.11。从图表中我们可以看出,部门:Development、Production、Sales的总工资较高;部门:Finance、Marking、Sales的人/月平均工资较高。

表5.1 部门与工资

部门

总工资

平均工资

Customer Service

9802982141


57461.45768


Development

42194302803


59225.80966


Finance

10120686629


70676.17305


Human Resources

8070960565


54971.80606


Marketing

11102046223


71764.54078


Production

35307268848


59541.78931


Quality Management

8862262053


57119.86989


Research

9580107115


59868.18595


Sales

35029560045


80564.39493


48f9e5aac217bf3a301ecba24dd95d8bdaca9e7f

图5.10 部门与总工资关系

062f7d06cba00cf2f745cfefa615eb599b553e54

图5.11部门与平均工资关系

5.2.2 职称与工资关系

Step1 创建数据集

创建数据集如图5.12所示。

be5a61aa1f8edbc1e9b9ef70be5fee3d21c26101

图5.12 创建数据集

Step2 设计表格、绘制图表

设计表格、绘制图表如图5.13所示

c61dd431974ba26e63ebf1372759a9b1fd6522fb

图5.13 设计表格、绘制图表

Step3 图表的分析

根据Step2中的设计,可以得到表5.2及图5.13、图5.14。从图表中我们可以看出,职称:Assistant、Manger的总工资较低;职称:Manager、SeniorStaff的人/月平均工资较高。

表5.2 职称工资表

职称

总工资

平均工资

Assistant Engineer

4823711052

54121.1634054394

Engineer

36026662812

54877.4515676481

Manager

19696302

66994.2244897959

Senior Engineer

38254259493

64761.0026307815

Senior Staff

41803627986

75040.8883244357

Staff

40738678933

64118.2416064391

Technique Leader

8403539844

59326.9219756015



   b97db38b1767ccf1734b39cfc04dfa3330d5b87f

图5.13 职称与总工资


b2235f08bbb5288bb77a6c28d039443c71998e16 aef3c2c695255e4ddecf4c1fb3b23ceed8e1b21282b3323d3285777a4d4ae23b1f845befa8509a04

图5.14 职称与平均工资

5.2.3 性别与工资

Step1 创建数据集

创建数据集如图5.15所示。

047b99eb7666dea6cfaab171fffed3a4a672bed8

图5.15 创建数据集

Step2 设计表格、绘制图表

设计表格、绘制图表如图5.16所示。

e7b37486c1d7fc1f3161fb7f719456c512a604a8

图5.16 设计表格、绘制图表

Step3 图表的分析

根据Step2中的设计,可以得到表5.3及图5.17、图5.18。从图表中我们可以看出,职称:Assistant、Manger的总工资较低;职称:Manager、SeniorStaff的人/月平均工资较高。

表5.3 性别与工资

性别

总工资

平均工资

领取工资人数

F

67999416575

63640.8459578825

1068487

M

102070759847

63705.7933000504

1602221

e3cf29c63336ca4262656b9b49eb599934953bae

图5.17 性别与总工资

12dfa349e8d40b0638d8b472e36984a61a5af167

图5.18 性别与平均工资

5.2.4 职称、性别与工资

Step1 创建数据集

创建数据集如图5.19所示。

2f717cb6ced2486acafe626c9b75ed6ddf54576e

图5.19 创建数据集

Step2 设计表格、绘制图表

设计表格、绘制图表如图5.20所示。

837e16d486fbcacbaef4b83c2f8f2aa2a23a58b1

图5.20 设计表格、绘制图表

Step3 图表的分析

根据Step2中的设计,可以得到表5.4、表5.5及图5.21、图5.22。

表5.4 职称性别与总工资

Title

F

M

Assistant Engineer

1882429902

2941281150

Engineer

14409240726

21617422086

Manager

8866422

10829880

Senior Engineer

15369973027

22884286466

Senior Staff

16705584008

25098043978

Staff

16232753513

24505925420

Technique Leader

3390568977

5012970867

表5.5职称性别与平均工资

Title

F

M

Assistant Engineer

53940.9107112155

54237.1593214088

Engineer

54817.7934238008

54917.2892875652

Manager

61572.375

72199.2

Senior Engineer

64700.1478676697

64801.9393501764

Senior Staff

75021.5963390921

75053.7348213672

Staff

64123.3167541645

64114.880264979

Technique Leader

59270.5004282842

59365.1441445709

8e5a3fbfd6f6434ccd49d5b1272851caba8c706d

图5.21 性别职称与总工资

99388e313788de4f27e9aa3e53ebb381d5043954

图5.22 性别职称与平均工资

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SQL使用链接服务器执行远程数据库上的存储过程
原文:SQL使用链接服务器执行远程数据库上的存储过程   --创建链接服务器 exec sp_addlinkedserver'server_tmp','','SQLOLEDB','远程服务器名或ip地址' exec sp_addlinkedsrvlogin'server_tmp','fa...
1278 0
Flink 1.11 SQL 使用攻略
SQL 作为 Flink 中公认的核心模块之一,对推动 Flink 流批一体功能的完善至关重要。在 1.11 中,Flink SQL 也进行了大量的增强与完善,开发大功能 10 余项,不仅扩大了应用场景,还简化了流程,上手操作更简单。
4879 0
使用navicat将SQL server数据库导成mysql数据库
使用navicat将SQL server数据库导成mysql数据库 1、新建一个数据库名 2、右键表名,选择导入向导 3、选择‘odbc’ 4、点击下一步, 5、再下一步 6、点去确定的时候报错 “无法打开文件Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=TYPQMS;Data Source=.” 7、原因是 弹出的界面密码又被设置成了空白 因此我们要保存密码 8、正确来连接成功后的页面。
1732 0
Observability:使用 Elastic Stack 分析地理空间数据
在今天的文章中,我们将参考之前的文章 “如何使用 Elasticsearch ingest 节点来丰富日志和指标”。我们可以利用 Elasticsearch ingest 节点来更加丰富我们的数据,并对这些数据做更进一步的的分析。
3742 0
使用ServiceStack.Redis实现Redis数据读写
原文:使用ServiceStack.Redis实现Redis数据读写 User.cs实体类 public class User { public string Name { get; set; ...
1517 0
使用Git上传代码到Github仓库
准备工作:   首先你需要一个github账号,所有还没有的话先去注册吧! https://github.com/ 我们使用git需要先安装git工具,这里给出下载地址,下载后一路直接安装即可: https://git-for-windows.
727 0
+关注
15
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载