下面是小编帮大家整理的一步一步学习sqlserver BI应用开发(共含9篇),希望对大家的学习与工作有所帮助。同时,但愿您也能像本文投稿人“不吃披萨边儿”一样,积极向本站投稿分享好文章。
接着我们上节的《一步一步学习sqlserver BI--ETL设计》,现在我们的游戏交易数据分析系统的数 据仓库已经建好了,并且也已经有数据了,让我们开始我们的OLAP过程吧,
在这一节中,我们主要详细的讲解使用Sqlserver Analysis Service 来建立多维数据库的过程 。
首先我么新建一个Analysis Services 项目,建好以后,我们将会在我们的解决方案资源管理器里面 看到如下图所示的项目结构。
接着,我们新建数据源,然后根据向导一步一步点下去,完成后事实上建立了一个到数据仓库的连接 串。
然后创建数据源视图,也几乎是一步一步按照向导点下去,事实上就是从数据源中选择我们需要的表 到我们的数据源视图里面来,
好了,下面我们开始建立多维数据集,这也是我们今天这节的重点。
注意在这里选择时间维度表。
最后,我们把我们的多维数据库发布到我们的Sqlserver2005 Analysis Service服务器中去。
右键点击项目属性,设置我们部署的目标服务器(如下图)。设置好以后,点击工具栏上的部署按钮 ,把多维数据库部署到我们的服务器中去。
部署完毕以后,我们就可以右键点击多维数据集进行浏览数据了。
因为过程比较简单,以上过程都没有怎么用文字了。到此为止,我们的多维数据库已经建立好了,当 然,如果要应用于具体项目中的话,还要修改多维数据库的很多属性。
下一节,我准备详细介绍运用ADOMD.NET开发建立在这个多维数据库上的应用。
接着我们上次那篇《一步一步学习sqlserverBi--多维数据库建立》,现在我们多维数据库已经有了 ,并且里面也已经有了数据,那么赶快进入咱们程序员的主题吧,
今天我要在这个多维数据库上 面开发两个应用:
1。按天统计各个部门的交易量
2。按天统计各个部门和各个游戏的交 易量
首先设计强类型的数据集,如下图。
按部门统计数据集
按部门和游戏交叉统 计数据集
设计MDX语句,在数据层执行MDX,并返回CellSet
/**////
/// 按天统计各个部门的交易数据
///
/// 日期的键值
///
public CellSet Count(int tradeDateKey)
{
StringBuilder mdxBuilder = new StringBuilder;
mdxBuilder.Append(“WITH MEMBER [Measures].[Total Orders Count] AS 'SUM([Measures].[Total Orders] )' ”);
mdxBuilder.Append(“ MEMBER [Measures].[Total Amount Count] AS 'SUM([Measures]. [Total Amount])'”);
mdxBuilder.Append(“ MEMBER [Measures].[Total Money Count] AS 'SUM([Measures].[Total Money])'”);
mdxBuilder.Append(“ MEMBER [Measures].[Un Paid Cancel Amount Count] AS 'SUM([Measures].[Un Paid Cancel Amount])'”);
mdxBuilder.Append(“ MEMBER [Measures].[Un Paid Cancel Money Count] AS 'SUM([Measures].[Un Paid Cancel Money])'”);
mdxBuilder.Append (“ MEMBER [Measures].[Paid Cancel Amount Count] AS 'SUM([Measures].[Paid Cancel Amount])'”);
mdxBuilder.Append(“ MEMBER [Measures].[Paid Cancel Money Count] AS'SUM([Measures].[Paid Cancel Money])'”);
mdxBuilder.Append (“ SELECT { [Measures].[Total Orders Count], [Measures].[Total Amount Count], [Measures].[Total Money Count], [Measures].[Un Paid Cancel Amount Count], [Measures].[Un Paid Cancel Money Count], [Measures].[Paid Cancel Amount Count], [Measures].[Paid Cancel Money Count]} ON COLUMNS,”);
mdxBuilder.Append(“ {[Department].[Dep Code Alternate Key].Members} ON ROWS”);
mdxBuilder.Append(“ FROM [Data Center DW]”);
mdxBuilder.Append(“ WHERE ([Time].[TimeKey]. [”+tradeDateKey+“])”);
return DBServer.AnalysisServer.ExecuteCellset(mdxBuilder.ToString());
}
/**////
/// 按天统计各个游戏单个部门的交易数据
///
/// 日期的键值
///
public CellSet Count(int tradeDateKey,int departmentKey)
{
StringBuilder mdxBuilder = new StringBuilder ();
mdxBuilder.Append(“WITH MEMBER [Measures].[Total Orders Count] AS 'SUM ([Measures].[Total Orders] )' ”);
mdxBuilder.Append(“ MEMBER [Measures].[Total Amount Count] AS 'SUM([Measures].[Total Amount])'”);
mdxBuilder.Append(“ MEMBER [Measures].[Total Money Count] AS 'SUM([Measures]. [Total Money])'”);
mdxBuilder.Append(“ MEMBER [Measures].[Un Paid Cancel Amount Count] AS 'SUM([Measures].[Un Paid Cancel Amount])'”);
mdxBuilder.Append(“ MEMBER [Measures].[Un Paid Cancel Money Count] AS 'SUM ([Measures].[Un Paid Cancel Money])'”);
mdxBuilder.Append(“ MEMBER [Measures].[Paid Cancel Amount Count] AS 'SUM([Measures].[Paid Cancel Amount]) '”);
mdxBuilder.Append(“ MEMBER [Measures].[Paid Cancel Money Count] AS'SUM([Measures].[Paid Cancel Money])'”);
mdxBuilder.Append(“ SELECT { [Measures].[Total Orders Count], [Measures].[Total Amount Count], [Measures]. [Total Money Count], [Measures].[Un Paid Cancel Amount Count], [Measures].[Un Paid Cancel Money Count], [Measures].[Paid Cancel Amount Count], [Measures].[Paid Cancel Money Count]} ON COLUMNS,”);
mdxBuilder.Append(“ {[Game].[Game Code Alternate Key].Members} ON ROWS”);
mdxBuilder.Append(“ FROM [Data Center DW] ”);
mdxBuilder.Append(“ WHERE ([Time].[TimeKey].[” + tradeDateKey + “],[Department].[Dim Department].[”+departmentKey.ToString()+“])”);
return DBServer.AnalysisServer.ExecuteCellset(mdxBuilder.ToString());
}
在业务逻辑层把CellSet组装成我们前台需要的数据集格式
/**////
/// 填充按部门统计的数据
///
///
///
public void Fill(DepartmentTotalModel model, DateTime time, int timeKey)
{
CellSet cellSet = new DepartmentTotalDac ().Count(timeKey);
DepartmentTotalModel.FactGameTradeDataRow newRow;
for (int i = 1; i < cellSet.Axes[1].Positions.Count; i++)
{
newRow = model.FactGameTradeData.NewFactGameTradeDataRow();
newRow.Department = cellSet.Axes [1].Positions[i].Members[0].Caption;
newRow.TradeDate = time;
for (int j = 0; j < cellSet.Axes[0].Positions.Count; j++)
{
if (cellSet.Axes[0].Positions [j].Members[0].Name == “[Measures].[Total Orders Count]”)
{
newRow.TotalOrders = TypeParse.ToInt32(cellSet[j, i].FormattedValue);
}
else if (cellSet.Axes[0].Positions[j].Members[0].Name == “[Measures].[Total Amount Count] ”)
{
newRow.TotalAmount = TypeParse.ToInt32(cellSet[j, i].FormattedValue);
}
else if (cellSet.Axes[0].Positions[j].Members[0].Name == “[Measures].[Total Money Count]”)
{
newRow.TotalMoney = TypeParse.ToDecimal(cellSet[j, i].FormattedValue);
}
else if (cellSet.Axes [0].Positions[j].Members[0].Name == “[Measures].[Un Paid Cancel Amount Count]”)
{
newRow.UnPaidCancelAmount = TypeParse.ToInt32(cellSet[j, i].FormattedValue);
}
else if (cellSet.Axes[0].Positions[j].Members[0].Name == “[Measures].[Un Paid Cancel Money Count]”)
{
newRow.UnPaidCancelMoney = TypeParse.ToDecimal(cellSet[j, i].FormattedValue);
}
else if (cellSet.Axes [0].Positions[j].Members[0].Name == “[Measures].[Paid Cancel Amount Count]”)
{
newRow.PaidCancelAmount = TypeParse.ToInt32(cellSet[j, i].FormattedValue);
}
else if (cellSet.Axes[0].Positions[j].Members[0].Name == “[Measures].[Paid Cancel Money Count]”)
{
newRow.PaidCancelMoney = TypeParse.ToDecimal (cellSet[j, i].FormattedValue);
}
}
model.FactGameTradeData.AddFactGameTradeDataRow(newRow);
}
}
/**////
/// 填充按游戏和部门交叉统计的数据
///
///
///
///
public void Fill(GameByDepartmentTotalModel model,DateTime time,int timeKey,string dep,int depKey)
{
CellSet cellSet = new GameByDepartmentTotalDac().Count(timeKey, depKey);
GameByDepartmentTotalModel.FactGameTradeDataRow newRow;
for (int i = 1; i < cellSet.Axes[1].Positions.Count; i++)
{
newRow = model.FactGameTradeData.NewFactGameTradeDataRow();
newRow.Game = cellSet.Axes [1].Positions[i].Members[0].Caption;
newRow.Department = dep;
newRow.TradeDate = time;
for (int j = 0; j < cellSet.Axes[0].Positions.Count; j++)
{
if (cellSet.Axes[0].Positions[j].Members[0].Name == “[Measures].[Total Orders Count]”)
{
newRow.TotalOrders = TypeParse.ToInt32(cellSet[j, i].FormattedValue);
}
else if (cellSet.Axes[0].Positions[j].Members[0].Name == “[Measures].[Total Amount Count]”)
{
newRow.TotalAmount = TypeParse.ToInt32(cellSet[j, i].FormattedValue);
}
else if (cellSet.Axes [0].Positions[j].Members[0].Name == “[Measures].[Total Money Count]”)
{
newRow.TotalMoney = TypeParse.ToDecimal(cellSet[j, i].FormattedValue);
}
else if (cellSet.Axes[0].Positions[j].Members[0].Name == “[Measures].[Un Paid Cancel Amount Count]”)
{
newRow.UnPaidCancelAmount = TypeParse.ToInt32(cellSet[j, i].FormattedValue);
}
else if (cellSet.Axes[0].Positions[j].Members[0].Name == “[Measures].[Un Paid Cancel Money Count]”)
{
newRow.UnPaidCancelMoney = TypeParse.ToDecimal(cellSet[j, i].FormattedValue);
}
else if (cellSet.Axes [0].Positions[j].Members[0].Name == “[Measures].[Paid Cancel Amount Count]”)
{
newRow.PaidCancelAmount = TypeParse.ToInt32(cellSet[j, i].FormattedValue);
}
else if (cellSet.Axes[0].Positions[j].Members[0].Name == “[Measures].[Paid Cancel Money Count]”)
{
newRow.PaidCancelMoney = TypeParse.ToDecimal (cellSet[j, i].FormattedValue);
}
}
model.FactGameTradeData.AddFactGameTradeDataRow(newRow);
}
}
好了,目前为止,我们已经从多维数据库里面返回我们需要统计的数据了,爱怎么展现 就怎么展现吧,
数据列表,柱状图,曲线图,饼状图等等。在以后的章节中我会介绍一款开源的非常成 熟的图形控件ZedGraph,我做展现的时候,有部分就是用的这个家伙,修改了它的一些代码,感觉非常实 用。
硬盘的数据结构
初买来一块硬盘,我们是没有办法使用的,你需要将它分区、格式化,然后再安装上操作系统才可以使用,一个完整硬盘的数据应该包括五部分:mbr,dbr,fat,dir区和data区。其中只有主引导扇区是唯一的,其它的随你的分区数的增加而增加。
主引导扇区
主引导扇区位于整个硬盘的0磁道0柱面1扇区,包括硬盘主引导记录mbr(main boot record)和分区表dpt(disk partition table)。其中主引导记录的作用就是检查分区表是否正确以及确定哪个分区为引导分区,并在程序结束时把该分区的启动程序(也就是操作系统引导扇区)调入内存加以执行。至于分区表,很多人都知道,以80h或00h为开始标志,以55aah为结束标志,共64字节,位于本扇区的最末端。值得一提的是,mbr是由分区程序(例如dos 的fdisk.exe)产生的,不同的操作系统可能这个扇区是不尽相同。如果你有这个意向也可以自己去编写一个,只要它能完成前述的任务即可,这也是为什么能实现多系统启动的原因(说句题外话:正因为这个主引导记录容易编写,所以才出现了很多的引导区病毒)。
操作系统引导扇区
obr(os boot record)即操作系统引导扇区,通常位于硬盘的0磁道1柱面1扇区(这是对于dos来说的,对于那些以多重引导方式启动的系统则位于相应的主分区/扩展分区的第一个扇区),是操作系统可直接访问的第一个扇区,它也包括一个引导程序和一个被称为bpb(bios parameter block)的本分区参数记录表。其实每个逻辑分区都有一个obr,其参数视分区的大小、操作系统的类别而有所不同。引导程序的主要任务是判断本分区根目录前两个文件是否为操作系统的引导文件(例如msdos或者起源于msdos的win9x/me的io.sys和msdos.sys)。如是,就把第一个文件读入内存,并把控制权交予该文件。bpb参数块记录着本分区的起始扇区、结束扇区、文件存储格式、硬盘介质描述符、根目录大小、fat个数、分配单元(allocation unit,以前也称之为簇)的大小等重要参数。obr由高级格式化程序产生(例如dos 的format.com)。
文件分配表
fat(file allocation table)即文件分配表,是dos/win9x系统的文件寻址系统,为了数据安全起见,fat一般做两个,第二fat为第一fat的备份, fat区紧接在obr之后,其大小由本分区的大小及文件分配单元的大小决定。关于fat的格式历来有很多选择,microsoft 的dos及windows采用我们所熟悉的fat12、fat16和fat32格式,但除此以外并非没有其它格式的fat,像windows nt、os/2、unix/linux、novell等都有自己的文件管理方式。
目录区
dir是directory即根目录区的简写,dir紧接在第二fat表之后,只有fat还不能定位文件在磁盘中的位置,fat还必须和dir配合才能准确定位文件的位置。dir记录着每个文件(目录)的起始单元(这是最重要的)、文件的属性等。定位文件位置时,操作系统根据dir中的起始单元,结合fat表就可以知道文件在磁盘的具体位置及大小了。在dir区之后,才是真正意义上的数据存储区,即data区。
数据区
data虽然占据了硬盘的绝大部分空间,但没有了前面的各部分,它对于我们来说,也只能是一些枯燥的二进制代码,没有任何意义。在这里有一点要说明的是,我们通常所说的格式化程序(指高级格式化,例如dos下的format程序),并没有把data区的数据清除,只是重写了fat表而已,至于分区硬盘,也只是修改了mbr和obr,绝大部分的data区的数据并没有被改变,这也是许多硬盘数据能够得以修复的原因,
但即便如此,如mbr/obr/fat/dir之一被破坏的话,也足够咱们那些所谓的diy老鸟们忙乎半天了……需要提醒大家的是,如果你经常整理磁盘,那么你的数据区的数据可能是连续的,这样即使mbr/fat/dir全部坏了,我们也可以使用磁盘编辑软件(比如dos下的diskedit),只要找到一个文件的起始保存位置,那么这个文件就有可能被恢复(当然了,这需要一个前提,那就是你没有覆盖这个文件……)。
硬盘分区方式
我们平时说到的分区概念,不外乎三种:主分区、扩展分区和逻辑分区。主分区是一个比较单纯的分区,通常位于硬盘的最前面一块区域中,构成逻辑c磁盘。在主分区中,不
关 键 字:数据恢复
四年里,我换了四份工作,在职场中不断成为新人,有悔恨,也有不甘,现在终于找到了一份稳定和满意的工作。现在看,这些经历都是我的宝贵财富,每一份工作、每一次面试都给我带来了很多感悟。由于我应聘的是市场工作, 我也不挑剔行业种类,于是在几十家的面试单位中,行业横跨食品、金融、旅游、餐饮、展会等,范围之广可见一斑。经历了几十场面试,其中在三家企业的面试经历令我印象深刻,也让我获益颇多。
理清自己的需求
第一家企业是一家快消公司,我通过了面试,但由于企业给出的薪水与自己的薪资期望不合,我放弃了这个机会。这家企业面试分为初试与复试,初试是部门经理单独面试,与其说是面试,不如说是沟通交流。我和部门经理是校友,感觉十分亲切,我们从学校、生活兴趣一直聊到工作,经理问我为什么选择这家企业、之前的工作主要是做什么等问题。
无论面试问题是什么,一定要从容对答。在面试中,每一个环节都是在考验应聘者,即使是询问你的家庭、兴趣也是在探测你的性格与为人,不能有半点马虎。
初试结束,我对自己信心满满,没想到复试却不尽如人意。复试前,我对公司的情况做了充分了解,并且准备了许多可能被问到的问题。这次面试是人事直接和我谈薪酬,说明公司准备录取我了。
人事经理认为我很符合这个职位,但我的经验还不足以得到我期望的薪资,他还直接告知我这样的工作经验和资历只能从新人开始做,他们能给的薪资比我预期的要少 元。
人事经理的回复很打击我的自信心,但是我从中看出了这句话背后的意义:这个职位的薪资水平十分有限,而公司的发展也很一般。于是我婉拒了人事经理给出的录用函。
面试是应聘者和公司的双向选择,一定要分析清楚并且确定自己在未来公司的发展情况与角色定位。作为一名应聘者,自己坚持的原则一定要把持住,否则以后开始工作了也会不甘心,无法长久。
找到自己的差距
第二家是一家知名的医疗企业,很有发展潜力。当猎头推荐我时,我又喜又忧,喜的是无论从公司规模、职位发展对我来说都是完美的,忧的是我与如此大规模的公司的人才要求有差距,还有很多需要学习的地方。
在面试之前,我早早地来到公司门口, 把中英文自我介绍背得滚瓜烂熟,但是面试结果与我的预测相差无几, 自己还是太稚嫩。面试经历了一个小时,主管是一位温柔的女士,初步了解后,她直接给我出作为市场会议助理会遇到的几个问题,我需要回答出解决方案并说明理由, 问题有:如果你需要组织一场员工内部的团队建设,你会怎么安排;你认为一次完整的医疗研讨会需要注意些什么?我根据之前工作中遇到的情况,结合自己认为理想的安排,一一作答。
在陈述中,我感受到自己缺乏医疗方面的知识,尽管我尽力表现出对应聘岗位的诚意,但我看得出主管的犹豫。之后猎头传达,他们认为我的综合素质非常好,但在医疗会议方面稍微缺失了一些知识,而另外一个应聘者更符合他们的条件。
虽然应聘失败了,但是我也积累了一些面试经验。例如,即使没有充分准备或者回答不出,也不要慌张,可以婉转表达自己并不是很擅长,然后从自己擅长的部分切入。
面试时,专业的能力和积极的态度是公司最希望看到的,现实,公司会把很多问题抛给你,这是想考验你的思考方式和态度。此外,尽量将自己优秀的一面展现出来,但不能说假话,因为对于公司来说,能力可以慢慢培养,但是诚实可靠应是一个员工最基本的素质。
理性分析机会
第三次面试经历是在一家银行,直到今天,我还是很感激这家信用卡中心的人事。由于我的失误,在投简历时,同时投了行政和市场两个岗位。这是两个完全不相关的岗位,对求职者来说这种做法不可取,应该确认好自己的求职目标,不能贪心。
但他们并没介意,依然让我面试了行政岗位。在做完了一个小时的性格测试与职位测试后,我终于见到了人事部经理,经理开诚布公地问我:“我知道你投了两个职位,我们是很民主的公司,想听取你自己的意见,你是想做行政还是市场?”我从没想过会遇到这样出乎意料的选择,不仅没有被指责,还给予一次重新选择的机会,我坦诚地告诉经理自己比较倾向于市场。
人事经理微笑着说:“那也好办,我现在让市场部经理来面试你吧。”就像做梦似的,很快人事就联系了市场部经理,在我们畅谈的两个小时中,我充分感受到了这家公司的包容以及有别于一般银行的眼光。市场部经理不仅和我详细说了公司与职位的情况,更分析了未来金融业的发展前景、互联网与金融的密切联系,让我受益颇丰,而对于我不断挑战自我的想法,他也给予了赞赏。
最后,市场部经理让我马上入职,这对于我来说简直是受宠若惊,但我抑制住了喜悦,理性分析了我所面临的机会。他们给予的薪资与公司规模都令我满意,但是编制与职位和我的想法有一些出入。这个职位是属于派遣制的,我知道编制的重要性,且这个市场职位包含了销售部分,有很大的业绩营销压力,对我来说难度可能大于自己能承受的范围。
虽然,我没有选择这家单位,但是他们的包容让我心存感恩,这次经历让我更有勇气迎接后面的挑战。我也明白了,面试是了解一家公司的宝贵机会,不要害怕面试的高管,一定要鼓起勇气提出疑问,不要留下后顾之忧,而你提出问题也是让对方了解你是否对他们感兴趣。所以提问至关重要,该问时就要大胆询问,不要退缩。如果能在面试前就准备好问题,那么面试时也会更胸有成竹了。
在经历了多次面试之后,我最终选择了一家外资检测公司,因为无论职位、环境、发展、同事都与我的预期非常匹配,而我能下这样的判断也是基于每一次面试的经历积累。我认为,只要坚定自己所认定的,一定会有收获,当你一切准备就绪,也一定会找遇到最合适的工作!
因为项目还没有真正开始,但是接触BI已有半年多,手痒,这几天准备搞一个简化版本的BI项目,一 方面给刚BI入门的朋友一个参考,另外一方面也为自己的将要开始的项目做个准备,让自己能够考虑到 一些项目的细节。同时也希望对BI有研究的朋友提供一些建议和经验。因为我们的这个案例是采用微软 的sqlserver的BI平台开发的,所以这里先贴一张WebCast里面截来的图,这张图主要反映了采用 sqlserver2005的BI项目的架构。
好了,咱们开始吧。我说的这个项目需求很简单,因为是简化版本的么。这是一个游戏中使用到的物 品的销售分析软件。里面包括几个概念,游戏,销售部门,物品,交易金额,交易笔数,发布单数等,
我们要做的事情就是按游戏,按部门,按物品来实现对交易金额,笔数等的数据交叉分析。
在我们这个系统里面,我们的数据颗粒度是天。好了,既然是简化版,我们也就不用那么罗嗦,什么 需求分析,分析设计都省了吧,下面直接进入数据库设计。
我们的数据库一共包括四张维度表(部门维度,游戏维度,物品维度,时间维度),一张事实表(游 戏交易数据事实表)。
部门维度表
游戏维度表
物品维度表
时间维度表
交易数据事实表
由于我们的这个案例比较简单,所以维度与事实表之间的关系也比较简单,是一个简单的星型架构。
这一节我们就先写到这里,下一节我将会详细的写这个项目的ETL部分。
合作学习前进一步真的很难吗
最近,笔者听了一节数学公开课,教学内容是“分数乘法应用题”。课堂上,教师在让学生计算例题时出现了下面的情况。
师:同学们,下面大家以4人小组为单位进行合作。
学生立刻“动”了起来――前面的同学转过身来,4人一起议论。
师:大家分好工了吗?
生:我们这一组,我负责画图,XX负责列式计算,XX负责计算……
生:我们这一组安排了一个人负责记录,一个人负责画图……
师(满意地):好的,大家开始吧。
学生再次“活动”起来。
过了一会儿,教师让一组同学到黑板上面演示,4人同时上台。两个学生画图,两个学生计算。画图的学生中一个手持粉笔在画着线段图,另一个手里拿着黑板擦也很认真;计算的同学,则一个写,一个嘴里轻声说着。
一会的工夫,“合作”完成了。
“不幸”的是图没有画正确,列出的算式也出现了问题。
……
合作学习是新课程理念的体现之一。许多教师在课改的大潮中敢于尝试,这是非常可取的。然而,对于如何真正地在教育(www.xfhttp.com-雪风网络xfhttp教育网)教学中体现合作学习的理念,能领悟其精髓的却极少。
表面上看,这节课中教师有使用合作学习的意识,而且前进了一步――让学生汇报一下各组的小组分工,难得!学生在黑板上展示的时候,他们4人同时走上了讲台,这又前进了一步,这在以往的课堂上也是不多见的,他们有的画图,有的列算式,一堂带有“合作意识”的课就这样呈现出来了。
但合作学习事实真的如此吗?
许多教师认为,只要是以小组的形式进行学习,学生自然就会合作。于是在课堂上,教师只是简单地让同桌或前、后桌的学生组成小组,然后布置一些学习任务要求小组谈论,既不指导学生如何与小组中其他成员交流,也不监控学生在小组中的交往活动。结果,学生在小组内仍然是各自为政,每人要么自己埋头钻研,要么乘机开小差、说闲话,小组活动流于形式。
小组合作学习将社会心理学的合作原理纳入教学之中,强调人际交往对于认知发展的促进功能。基本做法是将全班学生依其学业水平、能力倾向、个性特征、性别乃至社会家庭背景等方面的差异组成若干个异质学习小组(每组3~6人),小组成员不仅要努力争取个人目标的实现,更要帮助小组同伴共同达到学习的预期目标。它将学生个体间的学习竞争关系改变为“组内合作”、“组际竞争”的关系,把师生之间单向或双向交流改变为师生、生生之间的多向交流,提高了学生学习的主动性和对学习的自我控制,从而提高了教学效率。但这节课中,教师让学生合作的`目的是什么?是为了学生学习的需要?还是为了自己“表演”的需要?在需要学习合作的时候合作,合作才有价值,倘若为了合作而合作,就必然会导致合作的虚假。而且本次合作真的有必要吗?对这个题目而言,学生必须要经历一个解决问题的全过程,而这里的学习是一个分工的过程,列出算式的同学好像不需要前面的画图思考的过程了,这就出现了思维的断层,他们似乎忘了分工是为了更好地合作。
从另一个角度讲,学生有合作学习的应用能力吗?
合作学习的方式很多,由于缺乏科学的合作学习理论指导,缺乏切合教学实际需要的合作教学策略,在学习合作学习形式的背后暗含着很多隐患:不少学生在小组活动中无所事事,或者是干着与小组活动无关的事情。其原因在于教师只是关注小组活动的结果,并不在乎小组活动的过程。“教师讲、学生听”是传统课堂上最常见的教学形式,学生在小组学习中复制了这种不平等的、缺乏合作的师生交往方式,演变为“好学生讲、差学生听”的小组交往模式,差学生在小组中仍然是被动的、没有表现的机会,好学生则在小组中包揽一切。在这样的学习小组里,学生之间没有真正的合作,好学生的观点和视角支配着小组的一切活动,学生缺乏认识的多样性。对于其他学生而言,只要能够有人代表小组给出正确的答案,整个小组就能顺利过关,在这种情况下,即使小组中只有一个人认真完成任务,其他组员都不参与也没有关系。久而久之,合作学习的能力谈何提高?
可见,我们课堂上的合作学习还停留在形式化的表面,并不能真正发挥出合作学习在促进学生全面发展方面的优势。当然
[1] [2]
傲游3.0是老牌浏览器厂商傲游最新的浏览器产品,普一问世便因其界面简洁、打开网页快而备受称道,然而要完全感受这款新式浏览器的高效、迅捷,掌握其常用快捷键操作必不可少。本文将会介绍傲游3.0的一些常用快捷键以及应用技巧。
后悔药-Alt+Z(撤销)
误关网页怎么办,当然是使用撤销功能。不用劳动鼠标去点小按钮,只需按下“Alt+Z”,就能快速恢复最后一个被关闭的网页。
追忆时光-Ctrl+H(历史)
Ctrl+H能快速打开历史页面,方便用户查看曾经浏览过的网页,回忆过去不必再依靠不靠谱的记忆。
无处藏身-Ctrl+F(页面内查找)
想在当前网页找到某个特定的词么?按Ctrl+F,就可打开快速查找对话框。不过如果有一个几米长的网页,关键词位置分散怎么办?请看右侧滚动条,傲游3已经帮你标识定位,只要把滚动条拖到相应位置即可。
雌雄双股剑-F2、F3(切换前、后标签)
F2为向前切换标签,F3为向后切换标签。单个快捷键看来也不过是变换页面而已,但若两者配合,则能起到快速查阅标签,对比多个网页异同等功能。
请让我来帮助你-F1(帮助)
按下F1会弹出帮助,用Windows的都知道,不过傲游3.0提供的是在线帮助,除了使用帮助外,也可以通过这里快速进入傲游论坛,以寻求更有针对性的解答。
想去哪儿就去哪儿-F1-F6(智能地址栏快速打开)
虽然F1-F6都有自己的功能,不过在输入网址的过程中,智能地址栏会被激活,F1-F6则成为由上到下前6个网址对应的快速打开快捷键,可以省却持续输入和鼠标点击的繁琐操作,
收发自如-Ctrl+B(隐藏/显示收藏栏)
收藏栏既是快捷工具,也可能是泄露隐私的因素之一。按Ctrl+B可以快速的显示/隐藏收藏栏,让方便和隐私兼顾。此外,对于名“宽屏”、实“矮屏”的流行显示器来说,隐藏收藏栏也是增加浏览面积的好办法。
呼之即来-Ctrl+T(打开新页面)
既然挥之即去,必须也能呼之即来。Ctrl+T的功能便是打开一个新的空白页。能打开新页面并不重要,重要的是打开新页面后焦点正好位于地址栏,用户直接输入地址即可。
挥之即去-Ctrl+W(关闭当前标签)
看完一个网页后要关掉,用鼠标去找小xx么?不用那么费劲,用Ctrl+W就可以关闭当前网页,对于需要快速关闭大量网页来说实在是不二选择。
缩放随心-Ctrl+滚轮(缩放当前页)
泡论坛、看小说,查资料,看新闻……现在网页大多建立在1024*768的分辨率基础上,用大分辨率显示器看起来网页又窄字又小,能放大到全屏才好。这时只需按住Ctrl ,滚动鼠标滚轮,页面就能放大缩小,调整到适合观看为止,很方便吧。谁说滚轮不是按键的……
点击阅读更多学院相关文章>>
分享到
当上网不仅仅是看网页时,用户对浏览器的要求也越来越高,打破传统思维,提供创新性功能已经迫在眉睫。5月10日,傲游3.0.23.1000新版发布,加入了独树一帜的“快应用”功能。通过这个功能,用户可一键直达心爱网站,无需打开浏览器,更不要谈打开收藏、输入网址等繁琐操作,简单快捷。
保存网页为快应用
“快应用”功能使用简单,只需在标签上点击右键,选择“保存为快应用”选项,在弹出的对话框中完善信息,点击确定即可生成一个快应用。
图一
这一步也可以通过点击右上角的“菜单-页面-保存为快应用”来实现。在保存对话框中,用户可以修改快应用的名称,以及快应用图标保存地址。默认的保存地址共有两个选择,“发送到桌面”,以及“锁定到任务栏”,其中“锁定到任务栏”选项仅在Win7系统下生效。
图二
每个网页都可以重复生成快应用,因为应用的默认名称为页面标题,同一个网页在桌面上生成的快应用图标会被覆盖,所以在对同一个网页保存多个快应用时,最好将应用改名。
图三
“快应用”的使用
保存后的快应用会在桌面和任务栏生成一个快捷图标,图标图案自动选用该网站的标识。点击对应的图标,这个“快应用”就会在一个独立窗口中打开。
图四
通过傲游“快应用”功能打开的网页窗口,没有传统浏览器的地址栏、状态栏、工具栏等“标准”界面组件,有的只是一个简捷的边框,
一如表面的简捷,在快应用窗口中,其他各种浏览器组件也不会启动。正因为没有加载这些组件,快应用窗口能够做到随点随开,即时响应,绝不拖泥带水。
“快应用”窗口没有传统的工具栏,仅在右上角有一个控制按钮,可以打开一个简单的控制菜单。
图五
全屏幕:傲游“快应用”窗口可以全屏打开,在全屏状态下,应用窗口的边框、系统任务栏均被隐藏,能够最大化利用屏幕。
总在最前面:当同时使用多个程序时,选择此项可保持傲游“快应用”窗口会始终显示在最前面,不会被其他程序遮挡。
最小化到系统托盘:选中此项,最小化的傲游快应用窗口不会停留在任务栏上,而是进入右下角的系统托盘成为一个图标。
如果仅仅是一个打开网页的快捷方式,当然不能叫“创新功能”。傲游“快应用”功能生成的每个快应用均有独立的用户数据。当需要时,用户可以在同一网站的多个快应用中使用不同身份进行登陆,比如同时打开两个WebQQ,同时使用多个微博等。
图六
傲游浏览器一直是国内浏览器行业的领路人:第一个国产浏览器;第一个提出双核概念的浏览器;第一个,也是目前为止唯一一个拥有独立核心的国产浏览器。现在,傲游浏览器再次打破即有观念,将“快应用”功能引入浏览器中,让互联网再一次领略了傲游的创新思维与研发能力。
《列方程解一步计算的应用问题》教学设计模板
教学目标:
1、结合具体情境,经历列方程和应用等式的性质解方程的过程。
2、会应用等式的性质解一步计算的方程,会用方程解决“已知一个数的几倍是多少,求这个数”的简单问题。
3、积极参加数学活动,获得运用已有知识解决问题的成功体验,激发学习解方程的兴趣。
教学重点:应用等式性质列、解一步计算的方程。
教学难点:分析等量关系,列方程。
教学过程:
一、复习铺垫:
设计应用等式性质填空的练习。(复习等式的性质,重点提问为什么等式两边同时“加减乘除“相同的数,为学习解方程奠定基础。)
二、创设情境,导入新课。
通过创设:“星期日,妈妈去商场购物的情境”,激发学生的学习兴趣。
三、自主探索、学习新知:
(一)自主学习例题1。(解方程)
1、观察情境图,了解图中的数学信息和要解决的问题。
2、本例题重点在“解方程”,通过学生观察情境图,发现数学信息及要解决的问题,自己列方程并试着解方程。
3、交流时重点通过提问“方程两边为什么都减去58”的问题,让学生自己学会解方程。
(1)重点通过“方程两边为什么都减去58”的问题,启发学生交流解方程的依据,学会解方程的思路和方法。
(2)教师指导书写格式:写上“解”字,各行等号要齐。
4、初步练习。教材28页练一练第1题的(1)、(2)小题。
(二)、教师指导,小组讨论,学习例2。(列方程解一步计算的应用题)
1、学生观察、发现情境图中数学信息及要解决的.问题。
2、教师:从图中我们可以看出王叔叔每分钟用电脑打字的速度和手写速度有什么关系?
3、小组讨论:怎样用等式表示他们之间的关系?
三种可能:
每分钟用电脑打的字数÷3=每分钟手写的字数
(2)每分钟手写的字数×3=每分钟用电脑打的字数
(3)每分钟用电脑打的字数÷每分钟手写的字数=3
(找等量关系是列方程解应用题的关键和难点,小组讨论出现在新知的生长点、关键点和知识的难点,让学生通过讨论,发现题中存在的所有等量关系,从而达到强化重点,突破难点的目的。)
5、列方程
教师:如果用“X”表示巴每分钟手写的字数,可以列出怎样的方程?
列出方程如下:
(1)、120÷3=X (2)、3X=120 (3)、120÷X=8
6、试着解方程。(让学生任意选择一个方程试解)
7、再次小组讨论上面三个方程及解方程过程中遇到的问题:
第一个:与算术方法相同;
第三个:不会解或者解起来比较困难,(在小学阶段不要求解此类方程)。
得出结论:第二个是比较合适的方程。
8、规范书写:教师指导:列方程,首先要写出“解”和设哪个数“X”,再写出方程,并示范书写。
7、学生再次规范列、解“3X=120”。交流时重点问:为什么两边都除以“3”。
教师板书示范,规范解题步骤。
8、初步练习。
(1)、教材28页第1题(3)。
(2)根据线段图列、解方程。
(3)教材27页例题2.
(由实物图到线段图再到具体问题,让学生再次经历知识的形成过程,加深对知识的理解和掌握。)
四、运用知识,解决问题。
1、解方程。教材28页第2题。
2、列方程解应用题。教材28页第3题。
五、全课总结:
你学到了什么?
教学后记:
在教学的整个过程中,重点突出了“等式”与“等式两边都加上或减去同一个数,等式仍然成立”这个规律,不断对孩子们进行潜移默化地渗透,促使绝大部分的学生都能灵活地运用此规律来解方程。从而,我惊喜地发现孩子们的学习活动是那么的有滋有味,进而使我能很顺利地就完成了本课的教学任务。
★ 多想一步
★ 文明, 只差一步
★ 多走一步 议论文
★ 多走一步 作文