当前位置: 首页 > 编程日记 > 正文

BI之SSAS完整实战教程3 -- 创建第一个多维数据集

上一篇我们已经完成了数据源的准备工作,现在我们就开始动手,创建第一个多维数据集(Cube)。

文章提纲

  • 使用多维数据集向导创建多维数据集
  • 总结Cube设计器简介
  • 维度细化
  • 总结

一、使用向导创建多维数据集

在Analysis Services中,可以通过3种方法构建多维数据集:自上而下,自下而上或者基于一个空多维数据集。

一般我们从现有的关系数据库自下而上构建。

在自下而上方式中,需要一个DSV作为多维数据集的构建基础。

AS中的多维数据集(Cube)包括两部分:

1. 一个或多个度量值组,其数据来自关系数据源中的一个或多个事实表。通常情况下,每个事实表对应一个度量值组,度量值组包含一个或多个度量值(例如销售额,成本,售出产品计数)

2. 多维数据集还包含一个或多个来自关系维度表的维度(例如Product和Time).

构建多维数据集时,需要指定希望使用的事实表和维度表。每个多维数据集必须至少包含一个事实表,用于确定该多维数据集的内容。

后面使用向导时可以看到,如果不选量值组会提示:At least one measure group table must be selected.

另外构建多维数据集之前,必须基于维度表创建维度。

我们简单小结一下:Cube=度量值组+维度

多维数据集向导将创建多维数据集所涉及的所有步骤打包在一起, 形成一个简单的顺序过程,创建步骤:

1. 右键 Cubes à New Cube…

点击 Next进入下一步

选择默认值,下一步

2.在Select Measure Group Table页中,选择FactInternetSales 和 FactResellerSales作为度量值组表,下一步

3. 在Select Measures页面中,可以从度量值组表中选择特定的列作为度量值。

默认情况下,会选中度量值组表中的所有列(键列除外)

按照默认选择,下一步

4. 在Select New Dimensions页面上,多维数据集向导将显示可能的维度及其特性。默认情况下,多维数据集向导在每个维度中包含键特性,键特性将在此页面上突出显示,如下图。取消选中Fact Internet Sales和Fact Reseller Sales维度,下一步。

5. 按照默认名称,点击Finish完成多维数据集的创建。

向导完成后,维度也会相应的创建,并且显示在Solution Explorer中。

二、Cube设计器简介

Adventure Works DW多维数据集将在多维数据集设计器中打开,如下图

可以看到,多维数据集设计器具有多个tab, 通过这些tab, 可以对多维数据集进行各种操作。在多维数据集向导完成后打开的默认页面是Cube Structure

其他的一些页面包括:Dimension Usage, Caculation, KPIs, Actions, Partitions, Aggregations, Perspectives, Translations和Browser

Cube Structure页面包含3个窗格:Measures(度量值)、Dimensions(维度)和Data Source View(数据源视图)。

可以在Measures窗格中添加或修改度量值组和度量值。

使用Dimensions窗格可以添加或修改多维数据集的维度。

Data Source View 窗格显示在多维数据集中使用的事实表和维度表,并使用不同颜色进行区分(黄色表示事实表,蓝色表示维度表)

在每个窗格内部右击,可以看到能够在每个窗格中完成的各种操作。

三、维度细化

多维数据集向导仅向创建的维度中添加了最为基本的一些特性。若要对多维数据集中的数据进行分析,还需要对这些维度进行进一步细化, 后续文章我们专门有一篇讲解维度的细化,下面我们先来一个维度细化示例。

1.在Solution Explorer中,双击Dim Date.dim维度。

Dim Date维度将在维度设计器中打开。

Dimension Structure页面包含3个窗格:Attributes, Hierarchies和DSV

2.在DSV窗格中,选中DimDate表中除DateKey以外的所有列,拖到Attributes窗格。该操作会为DimDate表中的每一列创建一个特性。

3. 将键特性从Date Key重命名为Date

4. 将Fiscal Quarter特性从Attributes窗格拖放到Hierarchies窗格。该操作将创建一个层次结构,称为Hierarchy.

将Month Number of Year 特性拖放到Hierarchies窗格的Fisical Quarter特性下面。该操作会在层次结构中创建另一个级别。

类似的,将Date特性拖放到Month Number of Year特性下面。

右击层次结构并选择Rename, 将层次结构重命名为Fiscal Quarter – Month Number of Year, 最终效果如下图:

我们对其他维度也做一些调整。

Dim Currency.dim

Dim Customer.dim

将键特性从 Custom Key 重命名为 Custom

将DSV中来自DimCustomer表的所有列(Custom Key除外)拖放到Attributes窗格

Dim Sales Territory.dim

将键特性从Sales Territory Key 重命名为 Sales Territory

将DimSalesTerritory表中除SalesTerritoryKey和Image以外的所有列从DSV窗格拖放到Attributes窗格。

Dim Product.dim

将键特性从 Product Key重命名为Product

将DimProduct表中除ProductKey和LargePhoto以外的所有列从DSV拖放到Attributes 窗格。

Dim Promotion.dim

将键特性从Promotion Key 重命名为 Promotion

将DimPromotion表中除PromotionKey以外的所有列从DSV窗格拖放到Attributes窗格。

将 English Promotion Category特性从Attributes窗格拖放到Hierarchies窗格。该操作将创建一个新的层次结构。

将Discount Pct特性从Attributes窗格拖放到Hierarchies窗格的English Promotion Category特性下面。该操作会在层次结构中创建一个新的level.

将Promotion特性从Attributes窗格拖放到Hierarchies窗格的Discount Pct级别下面.

重命名层次结构为English Promotion Category – Discount Pct, 如下图

Dim Reseller.dim

将键特性从Reseller Key重命名为Reseller

将DimReseller表中除ResellerKey以外的所有列从DSV窗格拖放到Attributes窗格。

将Annual Revenue特性从Attributes窗格拖放到Hierarchies窗格。改操作将创建一个新的层次结构。

将Number Employees特性从Attributes窗格拖放到Hierarchies窗格的Annual Revenue特性下面。该操作将创建一个新的level, 成为Number Employees

将Reseller特性从Attributes窗格拖放到Hierarchies窗格的Number Employees级别下面

重命名层次结构为Annual Revenue – Number of Employees , 如下图

Dim Employee.dim

该维度具有多维数据集向导创建的3个键特性,与此相对的是,其他维度创建了一个键特性。这是因为,向导在Dim Employee维度内检测到一种父子关系(后续教程介绍)

将Employee Key特性重命名为Employee

将DimEmployee表中除EmployeeKey, ParentEmployeeKey,Sales TerritoryKey和EmployeePhoto以外的所有列从DSV窗格拖放到Attributes窗格。

将Department Name特性从Attributes窗格拖放到Hierarchies窗格。该操作将创建一个新的层次结构。

将Title特性从Attributes窗格拖放到Hierarchies窗格的Department Name层次结构下面。

将Employee特性从Attributes窗格拖放进Hierarchies窗格的Title特性下面。

重命名层次结构为Department Name - Title

四、总结

现在,你已经成功使用SSDT创建了一个多维数据集,并对维度进行了细化。后续将会围绕这个例子继续进行扩展。

最后我们对本篇内容做个总结:

1. 需要了解向导创建多维数据集的顺序 :

Select Creation Meathod (Use existing tables)

-->Select Measure Group Tables

-->Select Measures

-->Select New Dimensions

-->Completing the Wizard

2. Cube设计器的结构:

包含多个tab, 每个tab包含多个窗格,熟悉这些tab和窗格。

3. 初步了解维度细化的一些操作(后续会有专题讲维度操作)

下一篇文章将会介绍如何部署这个项目到SSAS上,以及进行简单的分析。

祝学习进步:)

首发博客园 by MiroYuan,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。

转载于:https://www.cnblogs.com/miro/p/5848096.html

相关文章:

python opencv local_threshold_Python-OpenCV中的cv2.threshold

主要记录Python-OpenCV中的cv2,threshold()方法;官方文档 cv2.threshold() def threshold(src, thresh, maxval, type, dstNone): """ 设置固定级别的阈值应用于多通道矩阵 例如,将灰度图像变换二值图像,或去除指定级别的噪声…

java中decimalFormat格式化数值

介绍 我们经常要对数字进行格式化,比如取小数点后两位小数,或者加个百分比符号等,Java提供了DecimalFormat这个类0 和 # 的区别 "#"可以理解为在正常的数字显示中,如果前缀与后缀出现不必要的多余的0,则将其…

GO语言有哪些优势?怎样入门?

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 1、学习曲线 它包含了类C语法、GC内置和工程工具。这一点非常重要,因为Go语言容易学习,所以一个普通的大学生花一个星期就能…

POJ-2955 Brackets

题目大意: 给你一个只由(、)、[、]组成的字符串,问你这个字符串的子串能够匹配的最长长度是多少。 能够匹配的意思是这样的: 1.如果s是个空串,那么它是匹配的。 2.如果子串是(s)或者[s],那么它也是匹配的,其…

CentOS7.4-btrfs管理及使用

btrfs, B-tree File System, GPL开源文件系统, 支持CoW即读时写入. 核心特性: 多物理卷支持;btrfs可由多个底层磁盘组成支持RAID mkfs.btrfs 命令的man文档支持: raid0, raid1, raid5, raid6,raid10, single or dup联机"添加, 移除, 修改" CoW写时复制更新机制 对文件…

取消对 null 指针“l”的引用。_C++中的引用

当变量声明为引用时,它将成为现有变量的替代名称。通过在声明中添加“&”,可以将变量声明为引用。#include using namespace std; int main() { int x 10; // ref is a reference to x. int& ref x; // Value of x is no…

你没听说过的Go语言惊人优点

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 在这篇文章中,我将讨论为什么你需要尝试一下 Go 语言,以及应该从哪里学起。 Go 语言是可能是最近几年里你经常听人说起的编…

JS document

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><body><div id"one">今天下雨</div><table border"1" cellspacing"0" cellpadding"…

python 流写入文件_python文件流操作

博主在学习python时对文件进行操作时经常踩一下坑。所以专门梳理了一下。有问题麻烦指出哈。 python对于文件的操作我们一般是用open&#xff08;&#xff09;。我们根据python的源码可以看出。我们必须要传的参是file即打开文件的URL。同时open方法默认是是r的打开方式即只读。…

使用 Python 从零开始开发区块链应用程序

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 “区块链”是什么&#xff1f; 区块链是一种存储数字数据的方式。数据可以是任何内容。对于比特币&#xff0c;它是事务&#xff08;在帐户之间转移…

Mybatis学习记录-使用问题总结之一DISTINCT

问题1&#xff1a;手动修改的查询语句&#xff0c;放入到项目中后显示结果和实际查询结果不一致 由于实际情况中用的了分页功能&#xff0c;导致最终的语句在查询完成后&#xff0c;添加了分页项&#xff0c;即如下代码。 ROW_NUMBER() OVER ( ORDER BY COLUMNS) PAGE_ROW_NUMB…

python xlrd读取excel所有数据_python读取excel进行遍历/xlrd模块操作

我就废话不多说了&#xff0c;大家还是直接看代码吧~ #!/usr/bin/env python # -*- coding: utf-8 -*- import csv import xlrd import xlwt def handler_excel(filenamer/Users/zongyang.yu/horizon/ops_platform/assets/upload/1.xlsl): # 打开文件 workbook xlrd.open_work…

【NOIP2015提高组Day1】 神奇的幻方

【问题描述】 幻方是一种很神奇的 N*N矩阵&#xff1a;它由数字1,2,3, … … ,N*N 构成&#xff0c;且每行、每列及两条对角线上的数字之和都相同。 当N为奇数时&#xff0c;我们可以通过以下方法构建一个幻方&#xff1a; 首先将1写在第一行的中间。 之后&#xff0c;按如下…

40行python开发一个区块链

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 尽管有人认为区块链目前还是个不成熟的解决方案&#xff0c;但它无疑称得上是计算机发展历史上的一个奇迹。但是&#xff0c;到底区块链是什么呢?…

网络实验的背景流

在最近做的网络实验中&#xff0c;发现背景流必须要先于实验流开始&#xff0c;并且要长于实验流的时间&#xff0c;这样才能看出实验流的规律。如果背景流后发于实验流&#xff0c;就会变成竞争模式&#xff0c;实验流就会被抢占或者挤压。转载于:https://www.cnblogs.com/fen…

python捕获异常后处理_python异常捕获处理

一、异常处理 在程序运行过程中&#xff0c;总会遇到各种各样的错误。程序一旦出错就停止运行了&#xff0c;此时就需要捕捉异常&#xff0c;通过捕捉到的异常&#xff0c;我们再去做对应的处理 写一个函数&#xff0c;实现除法运算 def calc(a,b): return a/b print(calc(5,1)…

《JS权威指南学习总结--第十一章子集和扩展》

js子集和扩展&#xff1a;http://www.cnblogs.com/ahthw/p/4298449.html ES6新增let和const关键字&#xff1a;http://www.cnblogs.com/telnetzhang/p/5639949.html JS中 var 和 let 关键字的区别&#xff1a;http://www.w3cfuns.com/notes/21400/891cac0f6bff2d7f25d3084618e8…

最常见的 35 个 Python 面试题及答案

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 作为一个 Python 新手&#xff0c;你必须熟悉基础知识。在本文中我们将讨论一些 Python 面试的基础问题和高级问题以及答案&#xff0c;以帮助你完…

PHP 中日期时间函数 date() 用法总结

[导读] date()是我们常用的一个日期时间函数&#xff0c;下面我来总结一下关于date()函数的各种形式的用法&#xff0c;有需要学习的朋友可参考。格式化日期date() 函数的第一个参数规定了如何格式化日期 时间。它使用字母来表示日期和时间 格式化日期date() 函数的第一个参数规…

mac mysql的安装

mac是重装的系统&#xff0c;很干净&#xff0c;没有xmpp等组合的服务器。 1. 安装mysql server https://dev.mysql.com/downloads/mysql/ 这里是官网地址&#xff0c;选择需要的版本下载&#xff0c;我下载的是第一个dmg的&#xff0c;进入后&#xff0c;会让登陆或注册&#…

windows系统和linux系统可以使用相同的js代码吗_「React 手册 」在 Windows 下使用 React , 你需要注意这些问题...

大家好&#xff0c;本篇内容&#xff0c;我要和大家聊聊使用 Windows 开发 React &#xff0c;你需要注意的一些问题。首先说明下&#xff0c;我不是使用 windows 进行开发&#xff0c;因为其配置开发环境来说不是特别方便&#xff0c;我更喜欢 苹果mac 或者乌班图这样的系统&a…

以太坊:比特币 + 无限可能

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 还记你得刚学编程时&#xff0c;第一次使用“对象”的感觉吗&#xff1f;还记你第一次尝试函数式编程的样子吗&#xff1f;这些编程范式&#xff0…

thinkphp5内置标签

thinkphp5内置标签 知道内置标签怎么用&#xff0c;查手册的时候好查 却功能的时候在里面找着来用 内置标签一览 1 内置标签2 3 变量输出使用普通标签就足够了&#xff0c;但是要完成其他的控制、循环和判断功能&#xff0c;就需要借助模板引擎的标签库4 功能了&#xff0c;系统…

python可视化窗口制作一个摇骰子游戏_使用python制作一个抽奖小游戏——骰子游戏...

1.模拟真实环境掷骰子 从Python标准库中调用模块&#xff1a;random——random中包含以各种方式生成随机数的函数 从random中引用randint这一函数——骰子都是有固定面数 from random import randint **2. **创建Die类**** 骰子属性sides&#xff08;面数&#xff09;默认为6面…

C#拾遗(一、基本类型)

1. C#是一种块结构语言&#xff0c;用花括号{}分块&#xff0c;但是用#region和#endregion来定义可以展开和折叠的代码区域 #region 这是引用区 using System; ...... #endregion 2. C#简单类型都是小写&#xff0c;bool,string类型要区别于Java的写法&#xff1b;float、decim…

我不喜欢Go语言的十个理由

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 Go 语言有多火爆&#xff1f;国外如 Google、AWS、Cloudflare、CoreOS 等&#xff0c;国内如七牛、阿里、知乎等都已经开始大规模使用 Go 语言开发…

写扩展性好的代码:函数

http://blog.jobbole.com/107442/转载于:https://www.cnblogs.com/answercard/p/8862006.html

PHP学习笔记:万能随机字符串生成函数(已经封装好)

做验证码用到的&#xff0c;然后就把这个函数封装起来&#xff0c;使用时候要设置2个参数&#xff1a; $str设置里要被采集的字符串&#xff0c;比如&#xff1a; $strefasfgzsrhftjxjxjhsrth; 则在函数里面生成的字符串就回从efasfgzsrhftjxjxjhsrth里面随机抓取&#xff1b; …

python中getopt函数_python getopt模块详解

getopt这个函数 就是用来抽取 sys.argv 获得的用户输入来确定执行步骤。 getopt是个模块&#xff0c;而这个模块里面又有getopt 函数&#xff0c;所以getopt需要这样这样用。 getopt.getopt( [命令行参数列表], "短选项", [长选项列表] ) 该函数返回两个值. opts 和a…

Go语言的前景分析

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 抓住时代的趋势 在上篇文章中&#xff0c;也就是那个跨维度的打击&#xff0c;是可以直接秒杀的中&#xff0c;提到这个时代的问题&#xff0c;这次…