海水正蓝

面朝大海,春暖花开
posts - 145, comments - 29, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

在设计产品时,要考虑到到很多的因素,其中一个重要的是配色方案。不同的颜色可以使您的产品创造出不同的效果。请务必检查颜色在一般和特定的文化含义,以获得最佳使用效果。

在这篇文章中,我想向大家介绍一些有用的设计工具将帮助您选择合适的调色板为您的设计。这里有15个在线工具分析和收集的色彩组合。

Colllor

Colllor

 

Toucan

巨嘴鸟

ColoRotate

ColoRotate

0to255

0to255

ColorHexa

ColorHexa

 

Color Explorer

颜色资源管理器

 

ColorMunki

ColorMunki的

Pictaculous

Pictaculous

 

Color Combos

颜色组合

 

Kuler

子弹

Colorspire

Colorspire

Copaso

Copaso

 

Sphere

球

GenoPal

GenoPal

Colrd

Colrd




转自:http://www.cnblogs.com/58top/archive/2013/01/15/useful-color-combination-apps-for-designers.html

posted @ 2013-03-20 22:04 小胡子 阅读(204) | 评论 (0)编辑 收藏

当你将鼠标悬停在该元素,可以显示元素有关的信息。当你想显示的额外信息,工具提示是最好的,无需改变你的设计元素。当你把鼠标光标移到元素,比如链接或按钮,出现一个小框,额外的显示有关该元素的信息。工具提示可以更加用户友好的

大多数的网站管理员使用这些工具提示显示他们的Facebook和Twitter的追随者,同样地,你可以利用这些工具提示自己的网站信息。

今天,我已经收集了20个最好的,免费供您使用jQuery的工具提示插件。

jQuery Tooltip Plugins

qTip2

qTip2

More about qTip2

Tooltipster

Tooltipster

More about Tooltipster

Tooltipsy

Tooltipsy

More about Tooltipsy

clueTip

clueTip

More about clueTip

PowerTip

PowerTip

More about PowerTip

wTooltip

wTooltip

More about wTooltip

Tipped

Tipped

More about Tipped

Responsive and Mobile-Friendly Tooltip

Responsive and Mobile-Friendly Tooltip

More about Responsive and Mobile-Friendly Tooltip

tinytooltip

tinytooltip

More about tinytooltip

Tipsy

Tipsy

More about Tipsy

Sticky Tooltip

Sticky Tooltip

More about Sticky Tooltip

jQuery Tools Tooltip

jQuery Tools Tooltip

More about jQuery Tools Tooltip

EZPZ Tooltip

EZPZ Tooltip

More about EZPZ Tooltip

Gips

Gips

More about Gips

JQuery Tooltip Plugin

JQuery Tooltip Plugin

More about JQuery Tooltip Plugin

BsTip

BsTip

More about BsTip

ChillTip

ChillTip

More about ChillTip

TipTip

TipTip

More about TipTip

Colortip

Colortip

More about Colortip

jQuery and CSS3 Simple Tooltip

jQuery and CSS3 Simple Tooltip

More about jQuery and CSS3 Simple Tooltip

转:
http://www.cnblogs.com/58top/archive/2013/01/11/free-jquery-tooltip-plugins.html

posted @ 2013-03-20 22:00 小胡子 阅读(290) | 评论 (0)编辑 收藏

textarea元素已被广泛用于网页Web的IDE。通常网站自带的textarea编辑器不能满足我们的需求,作为一名开发者我们经常需要进行代码的在线编辑,高亮显示代码等,因此,通过其他的开源项目,我们可以添加一些实用的功能, 在这篇文章中,我将使用JavaScriptACE来创建一个输入框效果。这是一个完全开源的脚本。该脚本允许开发人员创建支持语法高亮的输入框。然后你可以代码嵌入到网站中的任何地方

下载库 首先我们需要Github上下载ACE代码。 下载完成后解压缩,在你的header部分引入js文件

 <script src="src-min/ace.js" type="text/javascript" charset="utf-8"></script>

添加代码到编辑器

首先设置一个id为editor的div 然后在script里面调用ace.edit()方法,代码如下

var editor = ace.edit("editor");
  editor.getSession().setMode(
"ace/mode/javascript");

您可以重命名变量,为了方便起见,我定义了var editor作为变量,你也可以定义var demoeditor作为变量。第二行声明使用哪种类型的语言高亮显示。您可以从 src 目录选择其他语言集合。这里是一些支持支持的语言集合:

  • SQL
  • Ruby
  • SASS
  • PHP
  • Objectivec
  • Csharp
  • Java
  • JSON

 使用额外的参数


editor.setTheme("ace/theme/dawn");
  editor.getSession().setTabSize(
2);
  editor.getSession().setUseWrapMode(
true);

这3行代码是关于文本输入效果的,第一行改变代码默认的语法颜色和主题,在src目录下个有几十个新的主题,你可以从中任意选择

另外两个选项是关于用户体验。通常情况下,按一个键盘上的Tab键将输入4个空格,这里我设置成2个空格,此外,该文本在默认情况下将不会自动换行,超了会追加一个水平滚动条向外延伸。但使用这种方法setUseWrapMode(true),我们可以修复自动换行的问题。

还有一些其他的命令,你可以参考ACE向导。这里面包含了改变光标的位置,动态添加新内容,或复制的文本的全部内容。


CSS代码

 


#editor {    
margin
-left: 15px;
margin
-top: 15px;
width: 1000px;
height: 400px; }
原文出自:
http://www.cnblogs.com/58top/archive/2013/01/28/building-a-syntax-highlighted-input-box-with-javascript.html






posted @ 2013-03-20 21:35 小胡子 阅读(328) | 评论 (0)编辑 收藏

Aspect Oriented Programming  面向切面编程。解耦是程序员编码开发过程中一直追求的。AOP也是为了解耦所诞生。

具体思想是:定义一个切面,在切面的纵向定义处理方法,处理完成之后,回到横向业务流。

AOP 在Spring框架中被作为核心组成部分之一,的确Spring将AOP发挥到很强大的功能。最常见的就是事务控制。工作之余,对于使用的工具,不免需要了解其所以然。学习了一下,写了些程序帮助理解。

AOP 主要是利用代理模式的技术来实现的。

1、静态代理:就是设计模式中的proxy模式

a、业务接口


/**
 * 抽象主题角色:声明了真实主题和代理主题的共同接口。
 * 
 * 
@author yanbin
 * 
 
*/
public interface ITalk {

    
public void talk(String msg);

}
b、业务实现

/**
 * 真实主题角色:定义真实的对象。
 * 
 * 
@author yanbin
 * 
 
*/
public class PeopleTalk implements ITalk {

    
public String username;
    
public String age;

    
public PeopleTalk(String username, String age) {
        
this.username = username;
        
this.age = age;
    }

    
public void talk(String msg) {
        System.out.println(msg 
+ "!你好,我是" + username + ",我年龄是" + age);
    }

    
public String getName() {
        
return username;
    }

    
public void setName(String name) {
        
this.username = name;
    }

    
public String getAge() {
        
return age;
    }

    
public void setAge(String age) {
        
this.age = age;
    }

}
c、代理对象

/**
 * 代理主题角色:内部包含对真实主题的引用,并且提供和真实主题角色相同的接口。
 * 
 * 
@author yanbin
 * 
 
*/
public class TalkProxy implements ITalk {

    
private ITalk talker;

    
public TalkProxy(ITalk talker) {
        
// super();
        this.talker = talker;
    }

    
public void talk(String msg) {
        talker.talk(msg);
    }

    
public void talk(String msg, String singname) {
        talker.talk(msg);
        sing(singname);
    }

    
private void sing(String singname) {
        System.out.println(
"唱歌:" + singname);
    }

}
d、测试类

/**
 * 代理测试类,使用代理
 *
 * 
@author yanbin
 * 
 
*/
public class ProxyPattern {

    
public static void main(String[] args) {
        
// 不需要执行额外方法的。
        ITalk people = new PeopleTalk("AOP""18");
        people.talk(
"No ProXY Test");
        System.out.println(
"-----------------------------");

        
// 需要执行额外方法的(切面)
        TalkProxy talker = new TalkProxy(people);
        talker.talk(
"ProXY Test""代理");
    }

}

从这段代码可以看出来,代理模式其实就是AOP的雏形。 上端代码中talk(String msg, String singname)是一个切面。在代理类中的sing(singname)方法是个后置处理方法。

这样就实现了,其他的辅助方法和业务方法的解耦。业务不需要专门去调用,而是走到talk方法,顺理成章的调用sing方法

再从这段代码看:1、要实现代理方式,必须要定义接口。2、每个业务类,需要一个代理类。

2、动态代理:jdk1.5中提供,利用反射。实现InvocationHandler接口。

业务接口还是必须得,业务接口,业务类同上。

a、代理类:


/**
 * 动态代理类
 * 
 * 
@author yanbin
 * 
 
*/
public class DynamicProxy implements InvocationHandler {

    
/** 需要代理的目标类 */
    
private Object target;

    
/**
     * 写法固定,aop专用:绑定委托对象并返回一个代理类
     * 
     * 
@param delegate
     * 
@return
     
*/
    
public Object bind(Object target) {
        
this.target = target;
        
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
    }

    
/**
     * 
@param Object
     *            target:指被代理的对象。
     * 
@param Method
     *            method:要调用的方法
     * 
@param Object
     *            [] args:方法调用时所需要的参数
     
*/
    @Override
    
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        Object result 
= null;
        
// 切面之前执行
        System.out.println("切面之前执行");
        
// 执行业务
        result = method.invoke(target, args);
        
// 切面之后执行
        System.out.println("切面之后执行");
        
return result;
    }

}
b、测试类

/**
 * 测试类
 * 
 * 
@author yanbin
 * 
 
*/
public class Test {

    
public static void main(String[] args) {
        
// 绑定代理,这种方式会在所有的方法都加上切面方法
        ITalk iTalk = (ITalk) new DynamicProxy().bind(new PeopleTalk());
        iTalk.talk(
"业务说明");
    }
}

输出结果会是:

切面之前执行
people talk业务说法
切面之后执行

说明只要在业务调用方法切面之前,是可以动态的加入需要处理的方法。

从代码来看,如果再建立一个业务模块,也只需要一个代理类。ITalk iTalk = (ITalk) new DynamicProxy().bind(new PeopleTalk());  将业务接口和业务类绑定到动态代理类。

但是这种方式:还是需要定义接口。

3、利用cglib

CGLIB是针对类来实现代理的,他的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强。采用的是继承的方式。不细说,看使用

a、业务类


/**
 * 业务类
 * 
 * 
@author yanbin
 * 
 
*/
public class PeopleTalk {

    
public void talk(String msg) {
        System.out.println(
"people talk" + msg);
    }

}
b、cglib代理类

/**
 * 使用cglib动态代理
 * 
 * 
@author yanbin
 * 
 
*/
public class CglibProxy implements MethodInterceptor {

    
private Object target;

    
/**
     * 创建代理对象
     * 
     * 
@param target
     * 
@return
     
*/
    
public Object getInstance(Object target) {
        
this.target = target;
        Enhancer enhancer 
= new Enhancer();
        enhancer.setSuperclass(
this.target.getClass());
        
// 回调方法
        enhancer.setCallback(this);
        
// 创建代理对象
        return enhancer.create();
    }

    @Override
    
public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
        Object result 
= null;
        System.out.println(
"事物开始");
        result 
= methodProxy.invokeSuper(proxy, args);
        System.out.println(
"事物结束");
        
return result;
    }

}
c.测试类

/**
 * 测试类
 * 
 * 
@author yanbin
 * 
 
*/
public class Test {

    
public static void main(String[] args) {
        PeopleTalk peopleTalk 
= (PeopleTalk) new CglibProxy().getInstance(new PeopleTalk());
        peopleTalk.talk(
"业务方法");
        peopleTalk.spreak(
"业务方法");
    }

}

最后输出结果:

事物开始
people talk业务方法
事物结束
事物开始
spreak chinese业务方法
事物结束

由于篇幅有限,这篇主要对AOP的原理简单实现做了演示和阐述,有助自己理解。至于Spring的AOP实现上面无外乎其右,不过实现方面复杂的多。

原文出自:
http://www.cnblogs.com/yanbincn/archive/2012/06/01/2530377.html





posted @ 2013-03-02 22:28 小胡子 阅读(302) | 评论 (0)编辑 收藏

     摘要: 摘要:ComboBox是常用控件之一,但由于其数据来源分两种形式:本地和远程,故写的形式难度并不亚于ExtJS中的TreePanel和 GridPanel。鄙人也经常提醒自己的师弟师妹,ExtJS本身是面向对象写的,不能在应用的时候却不按照面向对象来写,面向对象最起码的好处就是代 码的复用,对于网页来讲,代码复用的好处就是加载的JS会少很多,这样网页渲染时就不会很慢。下面我将分别介绍扩展的四种Co...  阅读全文

posted @ 2013-03-02 21:48 小胡子 阅读(5075) | 评论 (0)编辑 收藏

首先定义一数据源,一般使用simpleStore,jsonStore。需要注意的是simpleStore用于读取二维数组的数据,而jsonStroe用于读取json数据格式。
Combox使用simpleStore 代码如下所示:
var subjectField = new Ext.form.ComboBox({
     fieldLabel : '分类名称',
    hiddenName : 'drug.subjectCode',// 传递到后台的参数
    store : new Ext.data.SimpleStore({
    autoLoad : true,
    url :'xxx',
    fields : ['subjectCode', 'subjectName']
    }),
   valueField : 'subjectCode',// 域的值,对应于store里的fields
   displayField : 'subjectName',// 显示的域,对应于store里的fields
   typeAhead : true,// 设置true,完成自动提示
   mode : 'local', // 设置local,combox将从本地加载数据
   triggerAction : 'all',// 触发此表单域时,查询所有
   selectOnFocus : true,
   anchor : '90%',
   forceSelection : true
   });



服务端返回的数据结构如下所示:
[
["00000003","硬膏剂"],
["00000005","滴眼剂"],
["00000016","栓剂"],
["00000017","注射剂"],
["00000018","软膏剂"]
]

当combox使用jsonStore时,一般运用于分页查询。页面效果如下所示:



示例代码如下所示:
// 药品商品名
 
var itemNameField = new Ext.form.ComboBox({
    width : 
200,
    fieldLabel : '药品商品名',
    hiddenName : 'drug.itemName',
    store : advanceStore,
    valueField : 'itemName',
    displayField : 'itemName',
    typeAhead : 
true,
    mode : 'remote',
// 分页查询必须设置为    remote,当我们点击下一页的时候是从服务端取数据,而不是本地
    triggerAction : 'all',
    emptyText : '请选择一个分类名',
    selectOnFocus : 
true,
    minChars : 
0// 完成自动提示,当mode为‘local’时,默认为0,当mode为‘remote’时候,默认为4,这里设置为0
    pageSize : 10,// 每页显示的记录数字
    queryParam :'drug.itemName' // 在combox内敲入字符时候,combox向后台查询传递的参数,这里设置为'drug.itemName'是为了更好的封装,默认传递参数‘query’
    });

这里还有一个问题,就是Combox设置初始值。
我是采用如下做法的,不知道各位知不知道其他用法?

var subjectField = new Ext.form.ComboBox({
   fieldLabel : '分类名称',
   hiddenName : 'drug.subjectCode',
   store : 
new Ext.data.SimpleStore({
   autoLoad : 
true,
   url : 'xxx',
   fields : ['subjectCode', 'subjectName'],
   listeners : {
      load : 
function(){         subjectField.setValue(record.get("drug.subjectCode"));
   }
   }
   }),
   valueField : 'subjectCode',
   displayField : 'subjectName',
   typeAhead : 
true,
   mode : 'local',
   triggerAction : 'all',
   emptyText : '请选择一个分类名',
   selectOnFocus : 
true,
   anchor : '
90%',
   forceSelection : 
true
   });
原文出自:
http://www.iteye.com/topic/296710

posted @ 2013-03-02 21:43 小胡子 阅读(865) | 评论 (0)编辑 收藏


所有的事件回调函数都有两个参数:eventui,浏览器自有event对象,和经过封装的ui对象  
ui.helper - 表示sortable元素的JQuery对象,通常是当前元素的克隆对象  
ui.position - 表示相对当前对象,鼠标的坐标值对象{top,left}  
ui.offset - 表示相对于当前页面,鼠标的坐标值对象{top,left}  
ui.item - 表示当前拖拽的元素  
ui.placeholder - 占位符(如果有定义的话)  
ui.sender - 当前拖拽元素的所属sortable对象(仅当元素是从另一个sortable对象传递过来时有用)  

·参数(参数名 : 参数类型 : 默认值)  
appendTo : String : 'parent'
Defines where the helper that moves with the mouse is being appended to during the drag (for example, to resolve overlap/zIndex issues).  
初始:$('.selector').sortable({ appendTo: 'body' });  
获取:var appendTo = $('.selector').sortable('option', 'appendTo');  
设置:$('.selector').sortable('option', 'appendTo', 'body');  

axis : String : false   
如果有设置,则元素仅能横向或纵向拖动。可选值:'x', 'y'
初始:$('.selector').sortable({ axis: 'x' });  
获取:var axis = $('.selector').sortable('option', 'axis');  
设置:$('.selector').sortable('option', 'axis', 'x');  

cancel : Selector : ':input,button'   
阻止排序动作在匹配的元素上发生。  
初始:$('.selector').sortable({ cancel: 'button' });  
获取:var cancel = $('.selector').sortable('option', 'cancel');  
设置:$('.selector').sortable('option', 'cancel', 'button');  

connectWith : Selector : false   
允许sortable对象连接另一个sortable对象,可将item元素拖拽到另一个中。  
初始:$('.selector').sortable({ connectWith: '.otherlist' });  
获取:var connectWith = $('.selector').sortable('option', 'connectWith');  
设置:$('.selector').sortable('option', 'connectWith', '.otherlist');  

containment : Element, String, Selector : false   
约束排序动作只能在一个指定的范围内发生。可选值:DOM对象, 'parent', 'document', 'window', 或jQuery对象  
初始:$('.selector').sortable({ containment: 'parent' });  
获取:var containment = $('.selector').sortable('option', 'containment');  
设置:$('.selector').sortable('option', 'containment', 'parent');  

cursor : String : 'auto'
定义在开始排序动作时,如果的样式。  
初始:$('.selector').sortable({ cursor: 'crosshair' });  
获取:var cursor = $('.selector').sortable('option', 'cursor');  
设置:$('.selector').sortable('option', 'cursor', 'crosshair');  

cursorAt : Object : false   
当开始移动时,鼠标定位在的某个位置上(最多两个方向)。可选值:{ top, left, right, bottom }.  
初始:$('.selector').sortable({ cursorAt: 'top' });  
获取:var cursorAt = $('.selector').sortable('option', 'cursorAt');  
设置:$('.selector').sortable('option', 'cursorAt', 'top');  

delay : Integer : 0  
以毫秒为单位,设置延迟多久才激活排序动作。此参数可防止误点击。  
初始:$('.selector').sortable({ delay: 500 });  
获取:var delay = $('.selector').sortable('option', 'delay');  
设置:$('.selector').sortable('option', 'delay', 500);  

distance : Integer : 1  
决定至少要在元素上面拖动多少像素后,才正式触发排序动作。  
初始:$('.selector').sortable({ distance: 30 });  
获取:var distance = $('.selector').sortable('option', 'distance');  
设置:$('.selector').sortable('option', 'distance', 30);  

dropOnEmpty : Boolean : true   
是否允許拖拽到一個空的sortable对象中。  
初始:$('.selector').sortable({ dropOnEmpty: false });  
获取:var dropOnEmpty = $('.selector').sortable('option', 'dropOnEmpty');  
设置:$('.selector').sortable('option', 'dropOnEmpty', false);  

forceHelperSize : Boolean : false   
If true, forces the helper to have a size.  
初始:$('.selector').sortable({ forceHelperSize: true });  
获取:var forceHelperSize = $('.selector').sortable('option', 'forceHelperSize');  
设置:$('.selector').sortable('option', 'forceHelperSize', true);  

forcePlaceholderSize : Boolean : false
If true, forces the placeholder to have a size.  
初始:$('.selector').sortable({ forcePlaceholderSize: true });  
获取:var forcePlaceholderSize = $('.selector').sortable('option', 'forcePlaceholderSize');  
设置:$('.selector').sortable('option', 'forcePlaceholderSize', true);  

grid : Array : false   
将排序对象的item元素视为一个格子处理,每次移动都按一个格子大小移动,数组值:[x,y]  
初始:$('.selector').sortable({ grid: [50, 20] });  
获取:var grid = $('.selector').sortable('option', 'grid');  
设置:$('.selector').sortable('option', 'grid', [50, 20]);  

handle : Selector, Element : false   
限制排序的动作只能在item元素中的某个元素开始。  
初始:$('.selector').sortable({ handle: 'h2' });  
获取:var handle = $('.selector').sortable('option', 'handle');  
设置:$('.selector').sortable('option', 'handle', 'h2');  

helper : String, Function : 'original'   
设置是否在拖拽元素时,显示一个辅助的元素。可选值:'original', 'clone'
初始:$('.selector').sortable({ helper: 'clone' });  
获取:var helper = $('.selector').sortable('option', 'helper');  
设置:$('.selector').sortable('option', 'helper', 'clone');  

items : Selector : '> *'   
指定在排序对象中,哪些元素是可以进行拖拽排序的。  
初始:$('.selector').sortable({ items: 'li' });  
获取:var items = $('.selector').sortable('option', 'items');  
设置:$('.selector').sortable('option', 'items', 'li');  

opacity : Float : false   
定义当排序时,辅助元素(helper)显示的透明度。  
初始:$('.selector').sortable({ opacity: 0.6 });  
获取:var opacity = $('.selector').sortable('option', 'opacity');  
设置:$('.selector').sortable('option', 'opacity', 0.6);  

placeholderType: StringDefault: false   
设置当排序动作发生时,空白占位符的CSS样式。  
初始:$('.selector').sortable({ placeholder: 'ui-state-highlight' });  
获取:var placeholder = $('.selector').sortable('option', 'placeholder');  
设置:$('.selector').sortable('option', 'placeholder', 'ui-state-highlight');  

revert : Boolean : false
如果设置成true,则被拖拽的元素在返回新位置时,会有一个动画效果。  
初始:$('.selector').sortable({ revert: true });  
获取:var revert = $('.selector').sortable('option', 'revert');  
设置:$('.selector').sortable('option', 'revert', true);  

scroll : Boolean : true
如果设置成true,则元素被拖动到页面边缘时,会自动滚动。  
初始:$('.selector').sortable({ scroll: false });  
获取:var scroll = $('.selector').sortable('option', 'scroll');  
设置:$('.selector').sortable('option', 'scroll', false);  

scrollSensitivity : Integer : 20   
设置当元素移动至边缘多少像素时,便开始滚动页面。  
初始:$('.selector').sortable({ scrollSensitivity: 40 });  
获取:var scrollSensitivity = $('.selector').sortable('option', 'scrollSensitivity');  
设置:$('.selector').sortable('option', 'scrollSensitivity', 40);  

scrollSpeed : Integer : 20  
设置页面滚动的速度。  
初始:$('.selector').sortable({ scrollSpeed: 40 });  
获取:var scrollSpeed = $('.selector').sortable('option', 'scrollSpeed');  
设置:$('.selector').sortable('option', 'scrollSpeed', 40);  

tolerance : String : 'intersect'
设置当拖动元素越过其它元素多少时便对元素进行重新排序。可选值:'intersect', 'pointer'
intersect:至少重叠50%  
pointer:鼠标指针重叠元素  
初始:$('.selector').sortable({ tolerance: 'pointer' });  
获取:var tolerance = $('.selector').sortable('option', 'tolerance');  
设置:$('.selector').sortable('option', 'tolerance', 'pointer');  

zIndex : Integer : 1000  
设置在排序动作发生时,元素的z-index值。  
初始:$('.selector').sortable({ zIndex: 5 });  
获取:var zIndex = $('.selector').sortable('option', 'zIndex');  
设置:$('.selector').sortable('option', 'zIndex', 5);  


·事件  

start  
当排序动作开始时触发此事件。  
定义:$('.selector').sortable({ start: function(event, ui) { ... } });  
绑定:$('.selector').bind('sortstart', function(event, ui) { ... });  

sort  
当元素发生排序时触发此事件。  
定义:$('.selector').sortable({ sort: function(event, ui) { ... } });  
绑定:$('.selector').bind('sort', function(event, ui) { ... });  

change  
当元素发生排序且坐标已发生改变时触发此事件。  
定义:$('.selector').sortable({ change: function(event, ui) { ... } });  
绑定:$('.selector').bind('sortchange', function(event, ui) { ... });  

beforeStop  
当排序动作结束之前触发此事件。此时占位符元素和辅助元素仍有效。  
定义:$('.selector').sortable({ beforeStop: function(event, ui) { ... } });  
绑定:$('.selector').bind('sortbeforeStop', function(event, ui) { ... });  

stop  
当排序动作结束时触发此事件。  
定义:$('.selector').sortable({ stop: function(event, ui) { ... } });  
绑定:$('.selector').bind('sortstop', function(event, ui) { ... });  

update  
当排序动作结束时且元素坐标已经发生改变时触发此事件。  
定义:$('.selector').sortable({ update: function(event, ui) { ... } });  
绑定:$('.selector').bind('sortupdate', function(event, ui) { ... });  

receive  
当一个已连接的sortable对象接收到另一个sortable对象的元素后触发此事件。  
定义:$('.selector').sortable({ receive: function(event, ui) { ... } });  
绑定:$('.selector').bind('sortreceive', function(event, ui) { ... });  

over  
当一个元素拖拽移入另一个sortable对象后触发此事件。  
定义:$('.selector').sortable({ over: function(event, ui) { ... } });  
绑定:$('.selector').bind('sortover', function(event, ui) { ... });  

out  
当一个元素拖拽移出sortable对象移出并进入另一个sortable对象后触发此事件。  
定义:$('.selector').sortable({ out: function(event, ui) { ... } });  
绑定:$('.selector').bind('sortout', function(event, ui) { ... });  

activate  
当一个有使用连接的sortable对象开始排序动作时,所有允许的sortable触发此事件。  
定义:$('.selector').sortable({ activate: function(event, ui) { ... } });  
绑定:$('.selector').bind('sortactivate', function(event, ui) { ... });  

deactivate  
当一个有使用连接的sortable对象结束排序动作时,所有允许的sortable触发此事件。  
定义:$('.selector').sortable({ deactivate: function(event, ui) { ... } });  
绑定:$('.selector').bind('sortdeactivate', function(event, ui) { ... });  


·方法  
destory  
从元素中移除拖拽功能。  
用法:.sortable( 'destroy' )  

disable  
禁用元素的拖拽功能。  
用法:.sortable( 'disable' )  

enable  
启用元素的拖拽功能。  
用法:.sortable( 'enable' )  

option  
获取或设置元素的参数。  
用法:.sortable( 'option' , optionName , [value] )  

serialize  
获取或设置序列化后的每个item元素的id属性。  
用法:.sortable( 'serialize' , [options] )  

toArray  
获取序列化后的每个item元素的id属性的数组。  
用法:.sortable( 'toArray' )  

refresh  
手动重新刷新当前sortable对象的item元素的排序。  
用法:.sortable( 'refresh' )  

refreshPositions  
手动重新刷新当前sortable对象的item元素的坐标,此方法可能会降低性能。  
用法:.sortable( 'refreshPositions' )  

cancel  
取消当前sortable对象中item元素的排序改变。  
用法:.sortable( 'cancel' )


排序后保存有两种方法,一是cookie,二是数据库配置文件等。
这个是cookie  的例子 大家可以参考 http://www.cnblogs.com/tianxiangbing/archive/2010/01/26/jquery_sortable.html

下面是数据库的部分代码 原作:
    $(function() {
        var show = $(".loader"); 
        var orderlist = $(".orderlist");
        var listleft = $("div[id = 'column_left']");
        var listcenter = $("div[id = 'column_center']");
        var listright = $("div[id = 'column_right']");
        $( ".column" ).sortable({
        opacity: 0.5,//拖动的透明度
        revert: true, //缓冲效果
        cursor: 'move', //拖动的时候鼠标样式
        connectWith: ".column",
        //开始用update 结果执行两次,浪费资源,古改成stop
        //但是stop在元素没有改变位置的时候也会执行,
        //用update其他js会有问题,^_^
        stop: function(){
            var new_order_left = []; //左栏布局
            var new_order_center = [];//中栏布局
            var new_order_right = [];//右栏布局
            listleft.children(".portlet").each(function() {
                new_order_left.push(this.title);
             });
            listcenter.children(".portlet").each(function() {
                new_order_center.push(this.title);
             });
            listright.children(".portlet").each(function() {
                new_order_right.push(this.title);
             });
            var newleftid = new_order_left.join(',');
            var newcenterid = new_order_center.join(',');
            var newrightid = new_order_right.join(',');
            $.ajax({
               type: "post",
               url: jsonUrl, //服务端处理程序
               data: { leftid: newleftid, centerid: newcenterid, rightid:newrightid},   //id:新的排列对应的ID,order:原排列顺序
//               beforeSend: function() {
//                    show.html(" 正在更新");
//               },
               success: function(msg) {
                    //alert(msg);
                    show.html("");
               }
            });
       }    
        });

原文出自:
http://hb-keepmoving.iteye.com/blog/1154618

posted @ 2013-03-01 12:44 小胡子 阅读(472) | 评论 (0)编辑 收藏

图片预加载

 1 (function($) {
 2   var cache = [];
 3   // Arguments are image paths relative to the current page.
 4   $.preLoadImages = function() {
 5     var args_len = arguments.length;
 6     for (var i = args_len; i--;) {
 7       var cacheImage = document.createElement('img');
 8       cacheImage.src = arguments[i];
 9       cache.push(cacheImage);
10     }
11   }
12 
13 jQuery.preLoadImages("image1.gif""/path/to/image2.png");

在新窗口打开链接 (target=”blank”)


1 $('a[@rel$='external']').click(function(){
2      this.target = "_blank";
3 });
4 
5 /*
6    Usage:
7    <a href="http://www.catswhocode.com" rel="external">catswhocode.com</a>
8 */

当支持 JavaScript 时为 body 增加 class


1 /* 该代码只有1行,但是最简单的用来检测浏览器是否支持 JavaScript 的方法,如果支持 JavaScript 就在 body 元素增加一个 hasJS 的 class */
2 $('body').addClass('hasJS');

平滑滚动页面到某个锚点


 1 $(document).ready(function() {
 2     $("a.topLink").click(function() {
 3         $("html, body").animate({
 4             scrollTop: $($(this).attr("href")).offset().top + "px"
 5         }, {
 6             duration: 500,
 7             easing: "swing"
 8         });
 9         return false;
10     });
11 });

鼠标滑动时的渐入和渐出


1 $(document).ready(function(){
2     $(".thumbs img").fadeTo("slow"0.6); // This sets the opacity of the thumbs to fade down to 60% when the page loads
3 
4     $(".thumbs img").hover(function(){
5         $(this).fadeTo("slow"1.0); // This should set the opacity to 100% on hover
6     },function(){
7         $(this).fadeTo("slow"0.6); // This should set the opacity back to 60% on mouseout
8     });
9 });

制作等高的列


1 var max_height = 0;
2 $("div.col").each(function(){
3     if ($(this).height() > max_height) { max_height = $(this).height(); }
4 });
5 $("div.col").height(max_height);

在一些老的浏览器上启用 HTML5 的支持


 1 (function(){
 2     if(!/*@cc_on!@*/0)
 3         return;
 4     var e = "abbr,article,aside,audio,bb,canvas,datagrid,datalist,details,dialog,eventsource,figure,footer,header,hgroup,mark,menu,meter,nav,output,progress,section,time,video".split(','),i=e.length;while(i--){document.createElement(e[i])}
 5 })()
 6 
 7 //然后在head中引入该js
 8 <!--[if lt IE 9]>
 9 <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
10 <![endif]-->

测试浏览器是否支持某些 CSS3 属性


 1 var supports = (function() {
 2    var div = document.createElement('div'),
 3       vendors = 'Khtml Ms O Moz Webkit'.split(' '),
 4       len = vendors.length;
 5 
 6    return function(prop) {
 7       if ( prop in div.style ) return true;
 8 
 9       prop = prop.replace(/^[a-z]/function(val) {
10          return val.toUpperCase();
11       });
12 
13       while(len--) {
14          if ( vendors[len] + prop in div.style ) {
15             // browser supports box-shadow. Do what you need.
16             // Or use a bang (!) to test if the browser doesn't.
17             return true;
18          }
19       }
20       return false;
21    };
22 })();
23 
24 if ( supports('textShadow') ) {
25    document.documentElement.className += ' textShadow';

获取 URL 中传递的参数


1 $.urlParam = function(name){
2     var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
3     if (!results) { return 0; }
4     return results[1|| 0;
5 }

禁用表单的回车键提交


1 $("#form").keypress(function(e) {
2   if (e.which == 13) {
3     return false;
4   }
5 });

posted @ 2013-03-01 09:53 小胡子 阅读(263) | 评论 (0)编辑 收藏

     摘要: 为什么需要元数据模型 您已经熟悉使用 Cognos 来创建报表,进行自助式设计分析,然而这些需要的创建的应用都依赖于对应的元数据模型,用户使用元数据模型对他们的数据源进行分析和报告。元数据模型是整 个 Cognos 应用的基础,它是一个或多个数据源中信息的业务演示。基于这个基础,您才能够创建报表,进行自助式设计分析。 Cognos 能支持多种数据源,包括关系型的和多维的数据库。元数据模型能隐藏底...  阅读全文

posted @ 2013-02-26 14:21 小胡子 阅读(914) | 评论 (0)编辑 收藏

什么是自助式设计分析

自助式设计分析是指在业务人员在同一工具做即席查询、报表和分析,完全由业务用户自助式制作。并且能和自助式仪表盘、专业报表工具紧密集成。通过业务人员进行自助式设计分析可以提升业务敏捷度、提升客户满意度、快速报表制作、降低 IT 管理成本。

IBM Cognos Business Insight Advanced 是用于创建报表和分析数据的基于 Web 的工具。商业用户可通过此用户界面了解其业务。IBM Cognos Business Insight Advanced 属于一种新型报表使用环境,将为商业用户带来全面的商业智能体验。

在《第一个自助式仪表盘》介绍了使用 IBM Cognos Business Insight 创建复杂的交互式仪表盘并以预定义的方式浏览内容。在 Business Insight 仪表盘中,可处理现有的内容并进行基本分析、数据浏览和协作性决策的制定。如果要执行深入分析并要创建报表,可以切换到 Business Insight Advanced 来执行更高级的数据浏览,例如添加附加度量、条件格式化和高级计算。

在 IBM Cognos BI 10.1 版本以前,IBM Cognos Report Studio 中的“专业”和“快速”两种创建模式,从 IBM Cognos BI 10.1 版本开始,“快速”创建模式现已替换为 IBM Cognos Business Insight Advanced,专业 IT 报表创建者仍使用 Report Studio 工具创建高级报表。

Business Insight Advanced 由业务人员使用,提供比原来“快速”创建模式的功能更为强大,例如完全支持列表报表、图表和关系数据源,而且还提供了专用于数据浏览的全新用户体验。 Business Insight Advanced 用户界面重点是在浏览数据。因此某些默认行为与以前版本的 IBM Cognos Report Studio 中“快速”创建模有所不同。例如,默认情况下,在 Business Insight Advanced 双击项目现将执行向下追溯。

不论是 IBM Cognos BI 的 Report Studio、Query Studio、Analysis Studio 制作的报表,IBM Cognos Business Insight Advanced 都可以打开,并且可以由业务人员进行自助式设计分析。而 Query Studio、Analysis Studio 功能已经被 Business Insight Advanced 取代,所以 Cognos BI 10 的业务用户只需要使用 Business Insight Advanced 就足够了。Report Studio 则留给专业人员使用。

创建第一个自助式设计分析

  1. 在开始菜单中启动 IBM Cognos BI Developer Edition,运行 Developer Edition Manager,在确保左侧的服务都正常的情况下,点击右上角的启动,选择 Business Insight Advanced。
  2. 在“Cognos > 公共文件夹 > 示样 > 多维数据集”路径下,选择“Great Outdoors Sales (cube)”数据包,进入 IBM Cognos Business Insight Advanced 后选择“新建”。在选择报表类型的时候,选择“交叉表”,点击确定。

    如果载入数据包报错,例如在内容存储库中找不到数据源“great_outdoors_sales_en”,则需要按照《第一次安装》的步骤检查是否正确建立了 PowerCube 数据源。

  3. 在右侧的“可插入对象”窗格中的“来源”选项卡显示了面向成员的数据视图。您可以看到维度数据源,也就是包括多维数据源或者按维度建模的关系数据源,在本教程中使用的是 PowerCube 多维数据源。
    • 数据包是模型的子集,其中包含可以插入到报表中的项目。
    • 维度是有关业务主要方面(如产品、日期或市场)的描述性数据的概括分组。
    • 级别层级是维度内更具体的分组。例如,对于“年份”维度,可以将数据组织为较小的组,如“年份”、“当前月份”和“上一个月份”。
    • 成员文件夹包含可用于层级或级别的成员。例如,“年”级别层级的“成员”文件夹包含“年”、“季度”和“月份”级别中的所有内容。
    • 级别是包含相同详细程度信息并具有共同属性的维度层级内的位置。一个级别层级内可以存在多个级别,从根级别开始。例如,“年份”级别层级具有以下相关级别。
    • 成员属性是每个成员所具有的属性。例如,性别可以是所有员工成员的属性。


    图 1. 可插入对象
    可插入对象 

  4. 对于维度模型数据源,您可以通过单击树面板顶部的按钮来交替查看元数据树和面向成员的数据树。在本教程中选择“查看成员树”。然后把 Years 拖动到列,把 Products 拖动到行,把 Revenue 拖动到度量,如图 2 所示。 

    图 2. 查看成员树
    查看成员树 

  5. 接下来您可以了解一下在 Business Insight Advanced 展示数据的功能。使用维度数据源或按维度建模的关系数据源时,您可以向下追溯到较低级别数据集或向上追溯到较高级别数据集的报表。向上追溯和向下追溯允许 您在预定义的维度层级(例如“年 - 年 - 季度 - 月”)内查看有关数据的更加全面或更加详细的信息,而无需创建其他报表。

    左键点击交叉表中的产品“Golf Equipment”两次,可以实现向下追溯的功能。双击第一列最后一行汇总标题上的“Golf Equipment”可以实现向上追溯的功能。

    其实在交叉表里面的任意数据都可以实现向下追溯的功能,而选择汇总标题上的数据都可以实现向上追溯的功能。

  6. 在“Golf Equipment”的向下追溯的效果下,单击成员“Golf Accessories”,在数据菜单下选择“浏览”,再单击“替换”,然后单击“使用级别成员”,如图 3 所示。 

    图 3. 替换成员
    替换成员 

    这样就把“Golf Accessories”替换为相同级别的成员。为了帮助理解,可以参看图 4,展开面向成员的数据树,和“Golf Accessories”相同级别的成员是标注红色的那些数据项。



    图 4. 级别成员
    级别成员 

  7. 等待报表刷新后,右键选择任意产品类型,点击菜单“最高或最低”,选择“最高 5 (基于 Revenue, Years)”,这样就筛选出最高的 5 个产品类型。 

    图 5. 最高或最低
    最高或最低 

  8. 右键选择汇总标题上的“Golf Equipment”,点击“删除”,这样就可以把不需要的汇总行除去,如图 6 所示。 

    图 6. 删除汇总行
    删除汇总行 

  9. 按住 Ctrl 键选择“Tents”和“Packs”两个产品类型,右键选择“排除成员 > 从初始集”,如图 7 所示。您会发现仍然是 5 个产品类型,但是已经不是原来的 5 个,“Tents”和“Packs”两个产品类型已经被换成另外两个。

    而如果您刚才选择“排除成员 > 从当前集”,则就会剩下 3 个产品类型。



    图 7. 排除成员
    排除成员 

  10. 在右侧的“可插入对象”窗格中的“来源”选项卡中选择“Personal Accessories”产品类型下的后面四个成员拖拽到报表的最后一行后面,如图 8 所示。 

    图 8. 添加成员
    添加成员 

  11. 您会看到报表有 9 个产品类型,它们分别来自两个数据集。其中 Watches 和 Eyewear 这两个产品类型在两个数据集里面都有,属于重复的产品类型。

    您按住 Ctrl 键可以选择两个数据集的 Eyewear,这样就等同于选择了两个数据集。然后在数据菜单下选择“浏览”,再单击“合并到一个集中”,选择“删除重复项”,如图 9 所示。



    图 9. 合并数据集
    合并数据集 

  12. 这样就剩下合并在一个数据集中的 7 个产品类型,Watches 和 Eyewear 也没有重复了。

    右键选择任意产品类型,点击菜单“最高或最低”,选择“最低 5 (基于 Revenue, Years)”,这样就筛选出最低的 5 个产品类型。

  13. 按住 Ctrl 键选择 Packs 和 Navigation 两个产品类型,右键选择“移动成员”,点击 “到顶部”,如图 10 所示。Packs 和 Navigation 两个产品类型就会被放到报表的头两行。 

    图 10. 移动成员
    移动成员 

  14. 刚才您做了很多数据集的操作,这些操作包括:
    • 排除成员
    • 将成员移到集的顶部或底部
    • 联接多个集
    • 应用最高或最低过滤器
    • 过滤集
    • 展开或折叠集合中的成员

    在 IBM Cognos Business Insight Advanced 可以查看集定义,从而了解、更改、添加或删除可对该集执行的操作,集的定义以图形树的形式为您显示了对集执行的所有操作的历史记录。

    您可以任意选择数据项,比如 Packs ,然后右键菜单选择“编辑集”。或者您也可以在“数据”菜单下选择“浏览”,找到“编辑集”的菜单项。

    图形树显示了对成员集合执行的所有操作,如图 11 所示。您可以执行以下操作,在这里选择“取消”即可。

    • 要查看操作详情,请将鼠标悬停在操作节点上。
    • 要更改操作的顺序,请单击操作节点,然后单击向右箭头或向左箭头。
    • 要编辑操作,请单击操作节点,然后单击“编辑”按钮。
    • 要添加新操作,请单击“新建”按钮。


    图 11. 编辑集
    编辑集 

  15. 任意选择报表的数据项,右键选择“显示属性”,这样会展开报表的属性页。您可以设置报表的属性。 

    图 12. 设置属性
    设置属性 

  16. 保存您的分析结果在“我的文件夹”下,命名为“第一个自助式设计分析”。

使用图表

IBM Cognos Business Insight Advanced 包含一种默认图表技术,该技术不同于 10.1 之前版本中使用的原始图表技术。“使用原始图表创建”选项,让您能够使用老版本的原始图表技术的报表,而不是默认的 Business Insight Advanced 图表来创建新的报表。

在《第一张交互式离线报表》,您已经去掉“使用原始图表创建”的选择,这里可以再检查一下。您可以在“工具”菜单中点击“选项”,在“高级选项”标签中,检查是否已经去掉“使用原始图表创建”的选择。

IBM Cognos Business Insight Advanced 包含丰富的图表类型:

  • 柱形图:对于比较离散数据或显示随时间变化的趋势非常有用。
  • 折线图:对于显示随时间变化的趋势和比较多个数据序列非常有用。
  • 饼形图:对于突出显示比例非常有用。
  • 条形图:对于显示随时间变化的趋势和绘制多个数据序列非常有用。
  • 面积图:对于强调随时间变化的更改量非常有用,堆积面积图还用于显示部分与整体的关系。
  • 点状图:对于以非群集样式显示定量数据非常有用。
  • 组合图:通过在一个图表内使用柱形图、面积图和折线图的组合,绘出多个数据序列。组合图对于突出显示各种数据序列之间的关系非常有用。
  • 散点图:使用数据点来沿刻度的任何位置(不仅在常规刻度线处)绘出两个度量,对于浏览不同数据集之间的相互关系非常有用。
  • 泡形图:使用数据点和气泡沿某一刻度的任意位置绘出度量,就像散点图一样,气泡的大小表示第三个度量,对于表示财务数据非常有用。
  • 项目符号图表:是条形图的一个变体。它们可以将特色度量(项目符号)与目标度量(目标)进行对比,也可以将比对度量与背景中提供其他定性度量(如“非常满意”、“满意”和“不满意”)的彩色区域联系到一起,通常用于代替执行仪表盘中的仪表板图。
  • 仪表板图:使用指针将信息显示为表盘上的读数。在有颜色的数据范围或图表轴上读取每个指针的值非常容易。此图表类型常用于执行仪表盘报表,以显示关键业务指示器。
  • 排列图:通过标识事件的主要原因来帮助您改善这些过程。排列图按照从最频繁到最不频繁的顺序对类别进行排名。这些图表常用于质量控制数据,以便您确定并减少问题的主要来源。
  • 渐进图:类似于堆积图,单个堆积的各分段都从下一分段垂直偏移,对于强调各分段占整体的比例非常有用。
  • 象限图:将背景分成四个等区域的泡形图。象限图对于绘出包含三个度量(使用 X 轴、Y 轴和表示第三个度量值的气泡大小)的数据很有用。
  • Marimekko 图表:是百分堆积图,其中列的宽度与列值的总和成正比,各个分段高度是各自列总值的百分比。
  • 雷达图:将多个轴组合成一个放射状的图形。对于每个数字,均沿着从图表中心开始的单独轴绘出数据。
  • 盈亏图表:是一种 Microchart 图,其中每列的值为 1 或 -1,通常表示盈利或亏损。
  • 极坐标图:对于显示科学计算数据非常有用,是使用值和角度将信息显示为极坐标的圆形图。
  1. 在工具栏中找到“页面布局”,为报表选择预定义的页面布局。您选择 1x2 的布局,这样就能在报表旁边放置图表,如图 13 所示。页面刷新后,报表出现在左侧的单元格,而右侧的单元格是空着的。 

    图 13. 页面布局
    页面布局 

  2. 在右侧的“工具箱”中选择图表,拖拽到右侧的单元格中。当“插入图表”提示出现时,选择饼形图,如图 14 所示。 

    图 14. 插入图表
    插入图表 

  3. 在右侧的“来源”中选择 Gross Profit 拖拽到默认度量,把 Sales Regions 拖拽到序列(饼形图扇区)。
  4. 您可以尝试在饼形图上进行向下追溯和向上追溯的功能。右键选择饼形扇区,然后单击“向下追溯”或者“向上追溯”。
  5. 您可以将饼形扇区拉离剩余的饼形图,以突出显示饼形扇区。右键选择要拉出的饼形扇区,然后单击“分解扇区”。此时扇区会从图表中拉出。要使已拉出的扇区返回到饼形图中,请右键选择饼形图图表对象,然后单击“删除已分解的扇区”。
  6. 您在“查看”菜单下可以切换“页面设计”和“页面预览”,其中“页面预览”是缺省选择,这是给业务人员进行自助式设计分析用的,所见即所得,可以直接看到数据结果。而“页面设计”功能是给专业人员用的,界面类似即将在后面介绍的 Report Studio。
  7. 保存并退出 Business Insight Advanced。

在自助式仪表盘中打开

  1. 在开始菜单中启动 IBM Cognos BI Developer Edition,运行 Developer Edition Manager,在确保左侧的服务都正常的情况下,点击右上角的启动,选择 Business Insight。在 IBM Cognos Business Insight 的启动页上选择“新建”。
  2. 在右侧的可插入对象中选择下面的“内容”,在“我的文件夹”下,可以找到刚才保存的“第一个自助式设计分析”,展开可以发现有两个对象,分别是“交叉表 1”和“饼形图 1”。右键选择“第一个自助式设计分析”报表,选择“插入”。
  3. 在自助式仪表盘中,您如果想看除了报表里面 5 个产品类型以外的产品,比如想把 Lanterns 产品类型也添加到报表中。那就不能直接在 Business Insight 里面完成,可以通过选择菜单的齿轮形状的按钮“完成更多”来启动 Business Insight Advanced,如图 15 所示。等待一会以后,Business Insight Advanced 界面就出现了。 

    图 15. 完成更多
    完成更多 

  4. 默认情况下,当您使用 IBM Cognos Business Insight Advanced 将源目录树中的成员插入到报表中时,成员将与其子项一起以集 [ 创建成员集 ] 的形式插入。您可以更改成员的插入方式。因为现在只想添加 Lanterns 产品类型,所以想要插入不带子项的成员。

    为此,在“可插入对象”窗格的“来源”选项卡上,单击“插入带子项的成员”按钮,并选择插入成员的方式,选择“插入单个成员”,如图 16 所示。



    图 16. 插入单个成员
    插入单个成员 

  5. 然后在 Products > Camping Equipment 路径下,把 Lanterns 拖拽到报表的最后一行,注意等到有闪烁行线出现时再松开鼠标。
  6. 这样就有 6 个产品类型出现在报表中,Lanterns 产品类型出现在报表的最后一行。点击右上角的“完成”回到 Business Insight 的仪表盘窗口。
  7. 值得注意的是,现在修改的报表仅仅是改变自助式仪表盘的数据,而不影响原先的报表“第一个自助式设计分析”。因此您可以在自助式仪表盘里面引用自助式设计 分析的结果,也可以随时利用自助式设计分析的强大功能来弥补自助式仪表盘的不足。Business Insight 和 Business Insight Advanced 两者无缝集成,不需要切换。

    总结

    您可以使用两种不同的方式打开 Business Insight Advanced:

    • 从执行报表高级编辑(“完成更多”)的 Business Insight 仪表盘中打开。这种方式适合业务人员在自助式仪表盘里面想进一步进行自助分析。
    • 从 IBM Cognos Connection 的“启动”菜单中打开或从欢迎页面(“创建者业务报表”)中打开。这种方式适合业务人员进行自助设计分析。

    Business Insight Advanced 是给业务人员进行自助式设计分析用的。在《第一次安装》中,您曾经用 Report Studio 构建了第一张简单报表,而 Report Studio 是给专业人士使用的报表工具。 您可以用 Report Studio 来打开刚才保存的“第一个自助式设计分析”。

    在开始菜单中启动 IBM Cognos BI Developer Edition,运行 Developer Edition Manager,在确保左侧的服务都正常的情况下,点击右上角的启动,选择 Report Studio。在“Cognos > 公共文件夹 > 示样 > 多维数据集”路径下,选择“Great Outdoors Sales (cube)”数据包,进入 IBM Report Studio 后选择“打开现有的”。在“我的文件夹”下,可以找到刚才保存的“第一个自助式设计分析”,点击“打开”。

    您可以看到 Report Studio 提供了给专业报表创建者的许多功能,下面举例说明 Business Insight Advanced 不能实现而 Report Studio 可以完成的功能。

    • 在 Report Studio 中间的“查询资源管理器”,您可以创建或修改关系报表 [ 使用关系查询 ] 或维度报表 [ 使用维度查询 ] 中的查询,以及执行复杂任务,如定义合并联接和写入 SQL 语句,如图 17 所示。在 Business Insight Advanced,您不能看到也不能操控查询。 

      图 17. 查询资源管理器
      查询资源管理器 

    • 点击交叉表的左上方的三个小红点,选择交叉表,您可以看到交叉表的属性,如图 18 所示。这里有一些属性是 Business Insight Advanced 无法编辑的。比如在“其他”类别里面的“名称”,这里的名称就是您刚才在 Business Insight 中进行自助式仪表盘时候看到的对象名称。您可以在 Report Studio 把它修改成更有意义的名字,比如“产品线收入表”。 

      图 18. 交叉表属性
      交叉表属性

posted @ 2013-02-26 14:15 小胡子 阅读(531) | 评论 (0)编辑 收藏

仅列出标题
共15页: 上一页 1 2 3 4 5 6 7 8 9 下一页 Last