ブロックタイプ

分析ブロックカテゴリ

フィルター、計算ブロック、アラート設定など、さまざまなブロックタイプを紹介します。各タイプの機能、設定オプション、作成エンドポイントについて学びましょう。

フィルターブロック

POST /api/{tenantId}/{projectId}/block/filter

フィルターブロックは、データセットに対してデータフィルタリング条件を適用し、日付範囲、値のフィルター、論理式などの条件でデータを絞り込みます。特定のデータサブセットに焦点を当てた分析の基盤となります。

機能

  • 日付範囲フィルタリング: 特定の期間内のデータをフィルター
  • アクティビティフィルタリング: 特定のプロセスアクティビティを含める・除外する
  • ケース属性フィルタリング: ケースのプロパティやメタデータに基づくフィルター
  • 値範囲フィルタリング: 数値やテキスト値の条件適用
  • 複雑な論理: 複数フィルターをAND/ORで組み合わせる

リクエストボディ

{
  "notebookId": "660e8400-e29b-41d4-a716-446655440000",
  "blockTitle": "Date Range Filter",
  "blockDescription": "Filters process data for the last 30 days"
}

設定例

// 日付範囲フィルター設定
{
  "filterType": "dateRange",
  "startDate": "2024-01-01T00:00:00Z",
  "endDate": "2024-01-31T23:59:59Z",
  "dateField": "timestamp"
}

// アクティビティフィルター設定
{
  "filterType": "activity",
  "include": ["Order Created", "Payment Processed"],
  "exclude": ["System Log"]
}

// ケース属性フィルター設定
{
  "filterType": "caseAttribute",
  "attribute": "customerType",
  "operator": "equals",
  "value": "Premium"
}

計算ブロック

POST /api/{tenantId}/{projectId}/block/calculator

計算ブロックはデータセットに対して数学的演算や分析計算を行います。プロセスマイニング分析のためにメトリクス、集計、統計値、派生値を算出します。

機能

  • 期間計算: プロセスのサイクルタイムやリードタイム
  • 頻度分析: アクティビティの発生率やパターン
  • パフォーマンス指標: スループット、効率、利用率
  • 統計分析: 平均、中央値、パーセンタイル、分布
  • カスタム数式: 複雑な数式やKPI

リクエストボディ

{
  "notebookId": "660e8400-e29b-41d4-a716-446655440000",
  "blockTitle": "Process Duration Calculator",
  "blockDescription": "Calculates average case duration and cycle times"
}

設定例

// 期間計算設定
{
  "calculationType": "duration",
  "startActivity": "Order Created",
  "endActivity": "Order Completed",
  "unit": "hours",
  "aggregation": "average"
}

// 頻度計算設定
{
  "calculationType": "frequency",
  "groupBy": "activity",
  "timeWindow": "daily",
  "metric": "count"
}

// カスタムKPI計算設定
{
  "calculationType": "custom",
  "formula": "(completedCases / totalCases) * 100",
  "resultUnit": "percentage",
  "name": "Completion Rate"
}

アラートブロック

POST /api/{tenantId}/{projectId}/block/alert

アラートブロックはデータ条件を監視し、特定の基準を満たしたときに通知をトリガーします。プロセスマイニングのワークフローやコンプライアンス要件に対する自動監視および例外検知を提供します。

機能

  • 閾値監視: メトリクスが定義した制限を超えたときにアラート
  • パターン検出: 異常なプロセス動作パターンを識別
  • コンプライアンス監視: ビジネスルールの遵守を追跡
  • パフォーマンスアラート: SLA違反や性能劣化を監視
  • リアルタイム通知: 重要な条件に対する即時アラート

リクエストボディ

{
  "notebookId": "660e8400-e29b-41d4-a716-446655440000",
  "blockTitle": "SLA Violation Alert",
  "blockDescription": "Alerts when case duration exceeds SLA threshold"
}

設定例

// 閾値アラート設定
{
  "alertType": "threshold",
  "metric": "caseDuration",
  "operator": "greaterThan",
  "threshold": 48,
  "unit": "hours",
  "severity": "high"
}

// パターン逸脱アラート設定
{
  "alertType": "patternDeviation",
  "baselinePattern": "Order -> Payment -> Fulfillment",
  "deviationTolerance": 0.1,
  "minOccurrences": 10
}

// コンプライアンスアラート設定
{
  "alertType": "compliance",
  "rule": "approvalRequired",
  "condition": "amount > 1000",
  "requiredActivity": "Manager Approval"
}

ブロックタイプ比較

分析ニーズに合ったブロックタイプを選択しましょう:

ブロックタイプ 主な目的 入力 出力 ユースケース
Filter データの絞り込みとフォーカス 完全なデータセット フィルタリングされたデータセット 期間分析、特定のプロセスパス
Calculator メトリクスとKPI計算 データセット(フィルター済みまたは全体) 計算された値/メトリクス パフォーマンス測定、統計分析
Alert 監視と通知 メトリクスまたはデータセット アラート条件/通知 SLA監視、例外検出

例:完全なブロックワークフロー

この例は、包括的な分析のために異なるブロックタイプを作成する手順を示します:

// 最近のデータに焦点を当てるフィルターブロック作成
const createDateFilter = async (notebookId) => {
  const response = await fetch(`/api/${tenantId}/${projectId}/block/filter`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${token}`
    },
    body: JSON.stringify({
      notebookId: notebookId,
      blockTitle: 'Last 30 Days Filter',
      blockDescription: 'Focus analysis on recent process data'
    })
  });
  return await response.json();
};

// メトリクスを計算する計算ブロック作成
const createDurationCalculator = async (notebookId) => {
  const response = await fetch(`/api/${tenantId}/${projectId}/block/calculator`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${token}`
    },
    body: JSON.stringify({
      notebookId: notebookId,
      blockTitle: 'Average Duration Calculator',
      blockDescription: 'Calculate average case processing time'
    })
  });
  return await response.json();
};

// 監視用のアラートブロック作成
const createSLAAlert = async (notebookId) => {
  const response = await fetch(`/api/${tenantId}/${projectId}/block/alert`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${token}`
    },
    body: JSON.stringify({
      notebookId: notebookId,
      blockTitle: 'SLA Violation Alert',
      blockDescription: 'Monitor for SLA breaches'
    })
  });
  return await response.json();
};

// 完全な分析ワークフローを構築
const buildAnalysisWorkflow = async (notebookId) => {
  try {
    // 1. 最近の期間のデータをフィルター
    const filterBlock = await createDateFilter(notebookId);
    console.log('作成されたフィルターブロック:', filterBlock.blockId);

    // 2. パフォーマンスメトリクスを計算
    const calculatorBlock = await createDurationCalculator(notebookId);
    console.log('作成された計算ブロック:', calculatorBlock.blockId);

    // 3. 監視アラートを設定
    const alertBlock = await createSLAAlert(notebookId);
    console.log('作成されたアラートブロック:', alertBlock.blockId);

    return {
      filter: filterBlock,
      calculator: calculatorBlock,
      alert: alertBlock
    };
  } catch (error) {
    console.error('ワークフロー構築時のエラー:', error);
    throw error;
  }
};

Python 実装例

import requests
from typing import Dict, Any

class BlockTypeManager:
    def __init__(self, base_url: str, tenant_id: str, project_id: str, token: str):
        self.base_url = base_url
        self.tenant_id = tenant_id
        self.project_id = project_id
        self.headers = {
            'Authorization': f'Bearer {token}',
            'Content-Type': 'application/json'
        }

    def create_filter_block(self, notebook_id: str, title: str, description: str) -> Dict[str, Any]:
        """データ削減のためのフィルターブロックを作成"""
        url = f"{self.base_url}/api/{self.tenant_id}/{self.project_id}/block/filter"
        payload = {
            'notebookId': notebook_id,
            'blockTitle': title,
            'blockDescription': description
        }
        response = requests.post(url, json=payload, headers=self.headers)
        response.raise_for_status()
        return response.json()

    def create_calculator_block(self, notebook_id: str, title: str, description: str) -> Dict[str, Any]:
        """メトリクス計算のための計算ブロックを作成"""
        url = f"{self.base_url}/api/{self.tenant_id}/{self.project_id}/block/calculator"
        payload = {
            'notebookId': notebook_id,
            'blockTitle': title,
            'blockDescription': description
        }
        response = requests.post(url, json=payload, headers=self.headers)
        response.raise_for_status()
        return response.json()

    def create_alert_block(self, notebook_id: str, title: str, description: str) -> Dict[str, Any]:
        """監視用のアラートブロックを作成"""
        url = f"{self.base_url}/api/{self.tenant_id}/{self.project_id}/block/alert"
        payload = {
            'notebookId': notebook_id,
            'blockTitle': title,
            'blockDescription': description
        }
        response = requests.post(url, json=payload, headers=self.headers)
        response.raise_for_status()
        return response.json()

    def create_analysis_pipeline(self, notebook_id: str) -> Dict[str, Any]:
        """すべてのブロックタイプを含む完全な分析パイプラインを作成"""
        pipeline = {}

        # フィルターブロック作成
        pipeline['filter'] = self.create_filter_block(
            notebook_id,
            'Data Filter',
            'Filter dataset for analysis scope'
        )

        # 計算ブロック作成
        pipeline['calculator'] = self.create_calculator_block(
            notebook_id,
            'Performance Calculator',
            'Calculate key performance metrics'
        )

        # アラートブロック作成
        pipeline['alert'] = self.create_alert_block(
            notebook_id,
            'Performance Alert',
            'Monitor performance thresholds'
        )

        return pipeline

# 使用例
block_manager = BlockTypeManager(
    'https://your-mindzie-instance.com',
    'tenant-guid',
    'project-guid',
    'your-auth-token'
)

# 完全な分析パイプラインを作成
pipeline = block_manager.create_analysis_pipeline('notebook-guid')
print(f"作成されたパイプラインには{len(pipeline)}個のブロックがあります")

重要な注意点

ブロックの依存関係: ブロックは連鎖可能で、フィルターブロックがデータを絞り込み、計算ブロックがメトリクスを計算し、アラートブロックが結果を監視して例外を検出します。

ベストプラクティス: まずフィルターブロックでデータ範囲を絞り込み、その後計算ブロックで分析を行い、最後にアラートブロックを追加して継続的な監視と通知を行いましょう。