2026幎ç ããŒã¿ã¢ããªãã£ã¯ã¹é¢æ¥è³ªåããã25
2026幎ã®ããŒã¿ã¢ããªãã£ã¯ã¹é¢æ¥å¯Ÿçã¬ã€ããSQLãPythonãPower BIãçµ±èšãè¡å颿¥ã®é »åºè³ªå25åãã³ãŒãäŸä»ãã§åŸ¹åºè§£èª¬ããŸãã

2026幎ã®ããŒã¿ã¢ããªãã£ã¯ã¹é¢æ¥ã§ã¯ãSQLã®æ§æãã°ã©ãäœæã®ç¥èã ãã§ã¯éçšããŸãããæ¡çšããŒã ã¯ãæ··æ²ãšããããŒã¿ã»ããããæå³ãæœåºããæè¡ã«è©³ãããªãã¹ããŒã¯ãã«ããŒã«åæçµæãäŒãããã¹ãŠã®ææšãããžãã¹ææã«çµã³ã€ããèœåãè©äŸ¡ããŸããæ¬ã¬ã€ãã§ã¯ããžã¥ãã¢ããã·ãã¢ãŸã§å¹ åºãããŒã¿ã¢ããªã¹ãè·ã®é¢æ¥ã§æãé »ç¹ã«åºé¡ããã25ã®è³ªåãåãäžããŸãã
å質åã«ã¯ç°¡æœãªã¢ãã«åçãšãå¿ èŠã«å¿ããŠå®è¡å¯èœãªSQLãŸãã¯Pythonã³ãŒããå«ãŸããŠããŸããè§£çãèªãåã«ããŸãèªåã§ã¯ãšãªãæžãç·Žç¿ãããŠãã ããã颿¥å®ã¯æèšããåçãããæèããã»ã¹ãéèŠããŸãã
ããŒã¿ã¢ããªã¹ã颿¥ã®SQL質å
SQLã¯ãããŒã¿ã¢ããªãã£ã¯ã¹é¢æ¥ã§æãå€ããã¹ããããã¹ãã«ã§ãããªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã䜿çšãããã¹ãŠã®äŒæ¥ããã¢ããªã¹ãã«èªåã§ã¯ãšãªãæžãèœåãæ±ããŠããŸãã
1. WHEREãšHAVINGã®éãã説æããŠãã ãã
WHEREã¯éèšåã«è¡ããã£ã«ã¿ãªã³ã°ããŸããHAVINGã¯éèšåŸã«ã°ã«ãŒãããã£ã«ã¿ãªã³ã°ããŸãããã®2ã€ãæ··åããããšã¯ãæè¡é¢æ¥ã§æãããèŠããããã¹ã®äžã€ã§ãã
-- monthly_revenue.sql
SELECT
DATE_TRUNC('month', order_date) AS month,
SUM(amount) AS revenue
FROM orders
WHERE status = 'completed' -- row-level filter
GROUP BY month
HAVING SUM(amount) > 10000; -- group-level filterWHEREã¯ããŒã¿ããŒã¹ãšã³ãžã³ãGROUP BYãå®è¡ããåã«ããŒã¿ã»ãããçž®å°ããŸããHAVINGã¯éèšçµæã«å¯ŸããŠäœçšããŸããå¯èœãªéãWHEREã䜿çšããããšã§ãå®è¡ãã©ã³ã®æ©ã段éã§ã¯ãŒãã³ã°ã»ãããå°ããã§ãããããã¯ãšãªããã©ãŒãã³ã¹ãåäžããŸãã
2. ãŠã£ã³ããŠé¢æ°ãå®äŸã§èª¬æããŠãã ãã
ãŠã£ã³ããŠé¢æ°ã¯ãçµæã»ãããæããããããšãªããçŸåšã®è¡ã«é¢é£ããè¡ã®ã»ããã«ããã£ãŠå€ãèšç®ããŸããã©ã³ãã³ã°ã环èšãæéæ¯èŒã«äžå¯æ¬ ãªæ©èœã§ãã
-- user_ranking.sql
SELECT
user_id,
purchase_date,
amount,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY purchase_date) AS purchase_rank,
SUM(amount) OVER (PARTITION BY user_id ORDER BY purchase_date) AS running_total,
LAG(amount) OVER (PARTITION BY user_id ORDER BY purchase_date) AS prev_amount
FROM purchases;ROW_NUMBERã¯ãŠãŒã¶ãŒããšã«é£çªã®ã©ã³ã¯ãå²ãåœãŠãŸããSUM(...) OVER(...)ã¯ã»ã«ããžã§ã€ã³ãªãã§çޝèšãèšç®ããŸããLAGã¯åã®è¡ã®å€ãååŸããçŽæ¥æ¯èŒãå¯èœã«ããŸãã颿¥å®ã¯ããŸãã«ãã®ãã¿ãŒã³ã䜿ã£ãŠææ¬¡æé·çãèšç®ããããæ±ããããšããããããŸãã
3. éè€ã¬ã³ãŒãã®ç¹å®ãšå逿¹æ³ã説æããŠãã ãã
éè€æ€åºã¯ãã€ãã³ããã°ãCRMãšã¯ã¹ããŒãããµãŒãããŒãã£ããŒã¿ãã£ãŒããæ±ãã¢ããªã¹ãã«ãšã£ãŠæ¥åžžçãªäœæ¥ã§ãã
-- deduplicate_events.sql
WITH ranked AS (
SELECT *,
ROW_NUMBER() OVER (
PARTITION BY user_id, event_type, DATE_TRUNC('minute', created_at)
ORDER BY created_at
) AS rn
FROM events
)
SELECT * FROM ranked WHERE rn = 1;CTEã¯åéè€ã°ã«ãŒãå
ã§è¡çªå·ãå²ãåœãŠãŸããrn = 1ã®ã¿ãä¿æããããšã§ãæåã®åºçŸãè¿ããŸãããã®ã¢ãããŒãã¯å
ã®ããŒã¿ãä¿æããªãããã€ãºããã£ã«ã¿ãªã³ã°ããŸãã
4. 鱿¬¡ã³ããŒãããšã®ãªãã³ã·ã§ã³ãèšç®ããã¯ãšãªãæžããŠãã ãã
ã³ããŒããªãã³ã·ã§ã³ã¯ããããã¯ãããŒã ãã°ããŒã¹ããŒã ã§æãèŠæ±ãããåæã®äžã€ã§ããSQLãã¿ãŒã³ã¯ãã¹ãŠã®ããŒã¿ããŒã¹ã§äžè²«ããæ§é ã«åŸããŸãã
-- weekly_cohort_retention.sql
WITH cohorts AS (
SELECT
user_id,
DATE_TRUNC('week', MIN(event_date)) AS cohort_week
FROM user_events
GROUP BY user_id
),
activity AS (
SELECT
c.cohort_week,
DATE_TRUNC('week', e.event_date) AS active_week,
COUNT(DISTINCT e.user_id) AS active_users
FROM user_events e
JOIN cohorts c ON c.user_id = e.user_id
GROUP BY c.cohort_week, DATE_TRUNC('week', e.event_date)
)
SELECT
cohort_week,
EXTRACT(WEEK FROM active_week - cohort_week) AS weeks_since_signup,
active_users
FROM activity
ORDER BY cohort_week, weeks_since_signup;æåã®CTEã¯åãŠãŒã¶ãŒã®ç»é²é±ãç¹å®ããŸãã2çªç®ã®CTEã¯ã³ããŒãããšã»é±ããšã®ãŠããŒã¯ã¢ã¯ãã£ããŠãŒã¶ãŒæ°ãã«ãŠã³ãããŸããæçµã¯ãšãªã¯çµæããªãã³ã·ã§ã³ãããªã¯ã¹ã«å€æããŸãã颿¥å®ã¯ãããžãã¹äžã®è§£éã説æããããšãæåŸ ããŸãã第1é±ç®ã§ã®æ¥æ¿ãªäœäžã¯ãªã³ããŒãã£ã³ã°ã®åé¡ã瀺ãã第4é±ç®ä»¥éã®æšªã°ãã¯å®å®ããã³ã¢ãŠãŒã¶ãŒããŒã¹ã®ååšã瀺åããŸãã
5. CTEãšã¯äœã§ããïŒãµãã¯ãšãªã®ä»£ããã«ãã€äœ¿ãã¹ãã§ããïŒ
Common Table ExpressionïŒCTEïŒã¯ãWITHã§å®çŸ©ãããååä»ãã®äžæçãªçµæã»ããã§ããCTEã¯å¯èªæ§ãåäžãããååž°ã¯ãšãªãå¯èœã«ããŸãããµãã¯ãšãªã¯æ·±ããã¹ããããSQLãçæããããããããã°ãå°é£ã«ãªããŸããCTEã¯ãåãæŽŸçããŒãã«ãã¯ãšãªå
ã§è€æ°ååç
§ãããå ŽåããŸãã¯ããžãã¯ã«3ã€ä»¥äžã®å€æã¹ããããããå Žåã«æšå¥šãããŸãã
PythonããŒã¿åæã®é¢æ¥è³ªå
Pythonã®è³ªåã¯ãPandasãããŒã¿ã¯ãªãŒãã³ã°ã¯ãŒã¯ãããŒãã³ãŒããããžãã¹çšèªã§èª¬æããèœåã«çŠç¹ãåœãŠãŠããŸãã颿¥å®ã¯ãåŠè¡çãªæœè±¡è«ã§ã¯ãªããå®çšçãªãœãªã¥ãŒã·ã§ã³ãæ±ããŠããŸãã
6. Pandas DataFrameã®æ¬ æå€ã®åŠçæ¹æ³ã説æããŠãã ãã
æ¬ æããŒã¿ã¯éèšãã¢ãã«å ¥åãæãªããŸããã¢ãããŒãã¯ã«ã©ã ã®åãšããžãã¹ã³ã³ããã¹ãã«ãã£ãŠç°ãªããŸãã
# handle_missing.py
import pandas as pd
import numpy as np
df = pd.read_csv('sales.csv')
# Inspect the extent of missing data
print(df.isnull().sum())
print(df.isnull().mean().round(3)) # percentage per column
# Strategy 1: drop rows where critical columns are null
df_clean = df.dropna(subset=['customer_id', 'amount'])
# Strategy 2: fill numeric columns with median (robust to outliers)
df['amount'] = df['amount'].fillna(df['amount'].median())
# Strategy 3: fill categorical columns with the mode
df['region'] = df['region'].fillna(df['region'].mode()[0])æ¬ æçã5%æªæºã§ãã®ã«ã©ã ãéèŠãªå Žåã¯ãè¡ã®åé€ãæå¹ã§ããäžå€®å€ã«ããè£å®ã¯ãåã£ãååžã«å¯ŸããŠå¹³åå€ããå®å šã§ããæé »å€ã«ããè£å®ã¯ãæ¯é çãªå€ãæã€ã«ããŽãªã«ã«ã«ã©ã ã«é©ããŠããŸããè£å®æŠç¥ãææžåããããšã¯ãç£æ»èšŒè·¡ã®ããã«äžå¯æ¬ ã§ãã
7. mergeãjoinãconcatenateïŒããããã®äœ¿ãåã
Pandasã«ã¯DataFrameãçµåããè€æ°ã®æ¹æ³ããããŸããéžæã¯ãæäœãè¡æ¹åãåæ¹åããããŒããŒã¹ã®ããããå¿ èŠãã©ããã«ãã£ãŠæ±ºãŸããŸãã
# combine_dataframes.py
import pandas as pd
orders = pd.read_csv('orders.csv')
customers = pd.read_csv('customers.csv')
# Key-based merge (equivalent to SQL JOIN)
result = orders.merge(customers, on='customer_id', how='left')
# Stack rows from multiple sources
all_events = pd.concat([events_q1, events_q2], ignore_index=True)
# Add columns side-by-side (same row count required)
combined = pd.concat([features, labels], axis=1)mergeã¯ããŒããŒã¹ã®ãžã§ã€ã³ã«é©ããŠããŸããããã©ã«ãã®axis=0ã§ã®concatã¯è¡ãç©ã¿éããŸããaxis=1ã§ã®concatã¯ã«ã©ã ãæšªã«çµåããŸããhow='left'ã䜿çšãããšå·ŠåŽã®DataFrameã®ãã¹ãŠã®è¡ãä¿æãããSQLã®LEFT JOINãšåçã®åäœã«ãªããŸãã
8. 売äžããŒã¿ã®ã°ã«ãŒãåãéèšã倿
GroupByæäœã¯Pandasã«ãããSQLã®GROUP BYã«çžåœããŸãããã®ãã¿ãŒã³ã¯ãã»ãŒãã¹ãŠã®ããŒã¿ã¢ããªã¹ãã®æã¡åž°ã課é¡ã«ç»å ŽããŸãã
# sales_analysis.py
import pandas as pd
df = pd.read_csv('transactions.csv', parse_dates=['date'])
# Monthly revenue by product category
monthly = (
df.groupby([pd.Grouper(key='date', freq='M'), 'category'])
.agg(revenue=('amount', 'sum'), orders=('order_id', 'nunique'))
.reset_index()
)
# Add a column with each category's share of total monthly revenue
monthly['share'] = (
monthly.groupby('date')['revenue']
.transform(lambda x: x / x.sum())
.round(4)
)
print(monthly.head(10))ååä»ãéèšã䜿ã£ãaggã¯åºåã®å¯èªæ§ãä¿ã¡ãŸããtransformã¯ã°ã«ãŒãã¬ãã«ã®èšç®ãåè¡ã«ãããŒããã£ã¹ãããå¥éã®mergeã¹ããããäžèŠã«ããŸãããã®çµã¿åããã§ãã¢ãããã¯ã¬ããŒãã£ã³ã°ã®å€§éšåãã«ããŒã§ããŸãã
9. ããŒã¿ã»ããã®å€ãå€ã®æ€åºãšåŠçæ¹æ³
å€ã倿€åºã¯ã極端ãªå€ãããŒã¿å ¥åãšã©ãŒãªã®ããäžæ£ã®ã·ã°ãã«ãªã®ãããããšãæ£åœãªãšããžã±ãŒã¹ãªã®ãã倿ããŸãã
# detect_outliers.py
import pandas as pd
import numpy as np
df = pd.read_csv('transactions.csv')
# IQR method
Q1 = df['amount'].quantile(0.25)
Q3 = df['amount'].quantile(0.75)
IQR = Q3 - Q1
lower = Q1 - 1.5 * IQR
upper = Q3 + 1.5 * IQR
outliers = df[(df['amount'] < lower) | (df['amount'] > upper)]
print(f'Outliers found: {len(outliers)} ({len(outliers)/len(df)*100:.1f}%)')
# Cap instead of remove (winsorization)
df['amount_capped'] = df['amount'].clip(lower=lower, upper=upper)IQRæ³ã¯ååäœç¯å²ã®1.5åãè¶ ããå€ããã©ã°ããŸãããã£ããã³ã°ïŒãŠã£ã³ãœã©ã€ãŒãŒã·ã§ã³ïŒã¯ãè¡æ°ãä¿æããªããæ¥µç«¯ãªå€ã®åœ±é¿ãå¶éããŸããåé€ã¯ãå€ãå€ãæãããªãšã©ãŒã§ããå Žåã«ã®ã¿é©åã§ãã
Data Analyticsã®é¢æ¥å¯Ÿçã¯ã§ããŠããŸããïŒ
ã€ã³ã¿ã©ã¯ãã£ããªã·ãã¥ã¬ãŒã¿ãŒãflashcardsãæè¡ãã¹ãã§ç·Žç¿ããŸãããã
çµ±èšãšç¢ºçã®è³ªå
çµ±èšãªãã©ã·ãŒã¯ãæ°åãå ±åããã ãã®ããŒã¿ã¢ããªã¹ããšããããæ£ããè§£éããã¢ããªã¹ããåºå¥ããŸãããããã®è³ªåã¯åºç€çãªçè§£ããã¹ãããŸãã
10. på€ãå¹³æãªèšèã§èª¬æããŠãã ãã
på€ãšã¯ãåž°ç¡ä»®èª¬ãæ£ãããšä»®å®ããå Žåã«ã枬å®ãããçµæãšåçããã以äžã«æ¥µç«¯ãªçµæã芳枬ããã確çã§ããpå€ã0.03ã§ããããšã¯ãåž°ç¡ä»®èª¬ãæ£ãã確çã3%ã§ããããšãæå³ããŸãããåž°ç¡ä»®èª¬ãæ£ãããã°ãããã»ã©æ¥µç«¯ãªçµæãå¶ç¶ã«3%ã®ç¢ºçã§çºçããããšãæå³ããŸããéŸå€ïŒã¢ã«ãã¡ïŒã¯éåžž0.05ã«èšå®ãããŸããããã®éžæã¯ç¹å®ã®ããžãã¹ã³ã³ããã¹ãã«ãããåœéœæ§ã®ã³ã¹ãã«äŸåããŸãã
11. å¹³åå€ã§ã¯ãªãäžå€®å€ã䜿ãã¹ãå Žåã¯ãã€ã§ããïŒ
å¹³åå€ã¯æ¥µç«¯ãªå€ã«ææã§ããåå ¥ããŒã¿ãååŒéé¡ãã»ãã·ã§ã³æéã¯ãäžå€®å€ããã代衚çãªäžå¿åŸåã瀺ãå žåçãªäŸã§ããå°æ°ã®é«é¡ãªãšã³ã¿ãŒãã©ã€ãºååŒãããããŒã¿ã»ããã§ã¯ãå¹³åå€ãäžè¬çãªé¡§å®¢ã®çµéšãã¯ããã«è¶ ããå€ã«æŒãäžããããå¯èœæ§ããããŸããäžå€®å€ãå¹³åå€ãšäžŠã¹ãŠå ±åããæšæºåå·®ãå«ããããšã§ãã¹ããŒã¯ãã«ããŒã«å®å šãªå šäœåãæäŸã§ããŸãã
12. çžé¢ãšå æã®éãã説æããŠãã ãã
çžé¢ã¯2ã€ã®å€æ°éã®ç·åœ¢é¢ä¿ã®åŒ·ããšæ¹åãæž¬å®ããŸããå æã¯äžæ¹ã®å€æ°ã仿¹ã«çŽæ¥åœ±é¿ãäžããããšãæå³ããŸããã¢ã€ã¹ã¯ãªãŒã ã®å£²äžãšæººæ»äºæ ã¯çžé¢ããŸãããããã¯äž¡æ¹ãå€ã«å¢å ããããã§ãããäžæ¹ã仿¹ãåŒãèµ·ãããŠããããã§ã¯ãããŸãããå æã確ç«ããã«ã¯ãå¯Ÿç §å®éšïŒA/Bãã¹ãïŒãŸãã¯å·®åã®å·®åæ³ãæäœå€æ°æ³ãªã©ã®å³å¯ãªå ææšè«ãã¬ãŒã ã¯ãŒã¯ãå¿ èŠã§ãã
13. 第äžçš®é誀ãšç¬¬äºçš®é誀ãããžãã¹äŸã§èª¬æããŠãã ãã
第äžçš®é誀ïŒåœéœæ§ïŒã¯ãæ€å®ãåž°ç¡ä»®èª¬ã誀ã£ãŠæ£åŽããå Žåã«çºçããŸããäŸïŒæ°ãããã§ãã¯ã¢ãŠããããŒãã³ã³ããŒãžã§ã³ãå¢å ããããšçµè«ã¥ããããå®éã«ã¯å¹æããªããäžèŠãªãããã¯ã倿Žã«ã€ãªããã±ãŒã¹ã§ãã第äºçš®é誀ïŒåœé°æ§ïŒã¯ãæ€å®ãå®éã®å¹æãæ€åºã§ããªãå Žåã«çºçããŸããäŸïŒãã¹ãã®ãµã³ãã«ãµã€ãºãäžååã§ãå®éã®2%ã®ãªãããæ€åºã§ãããæ§ãã§ãã¯ã¢ãŠããããŒãç¶æããŠããŸãã±ãŒã¹ã§ãããµã³ãã«ãµã€ãºãå¢ãããšç¬¬äºçš®éèª€ãæžå°ããŸããã¢ã«ãã¡éŸå€ãäžãããšç¬¬äžçš®éèª€ã¯æžå°ããŸããã第äºçš®é誀ã¯å¢å ããŸãã
Power BIãšããŒã¿å¯èŠåã®è³ªå
å¯èŠåã®è³ªåã¯ãåè£è ãé©åãªãã£ãŒããéžæããä¿å®ããããããã·ã¥ããŒããæ§ç¯ããæè¡ã«è©³ãããªãèŽè¡ã«ããŒã¿ã¹ããŒãªãŒãäŒãããããã©ãããè©äŸ¡ããŸãã
14. DAXãšã¯äœã§ããïŒSQLãšã®éãã¯äœã§ããïŒ
DAXïŒData Analysis ExpressionsïŒã¯ãPower BIãAnalysis ServicesãExcel Power Pivotã§äœ¿çšãããæ°åŒèšèªã§ããè¡ã®ã»ããã«å¯ŸããŠæäœããSQLãšã¯ç°ãªããDAXã¯ã¹ã©ã€ãµãŒããã£ã«ã¿ãŒãè¡ã³ã³ããã¹ãã«åºã¥ããŠåçã«å€åãããã£ã«ã¿ãŒã³ã³ããã¹ãå
ã§åäœããŸããDAXã®CALCULATE颿°ã¯ãåŒãè©äŸ¡ããåã«ãã£ã«ã¿ãŒã³ã³ããã¹ãã倿ŽããŸãããããã¯SQLã«çŽæ¥å¯Ÿå¿ããæŠå¿µããããŸããã
15. ã€ã³ããŒãã¢ãŒããšDirectQueryã®éãã説æããŠãã ãã
ã€ã³ããŒãã¢ãŒãã¯ããŒã¿ãPower BIã®ã€ã³ã¡ã¢ãªãšã³ãžã³ïŒVertiPaqïŒã«èªã¿èŸŒã¿ãé«éãªã¯ãšãªããã©ãŒãã³ã¹ãå®çŸããŸããã宿çãªæŽæ°ãå¿ èŠã§ããDirectQueryã¯ãªã¢ã«ã¿ã€ã ã§ãœãŒã¹ããŒã¿ããŒã¹ã«ã¯ãšãªãéä¿¡ããããŒã¿ã®é®®åºŠãä¿èšŒããŸããããœãŒã¹ã·ã¹ãã ã®ããã©ãŒãã³ã¹ã«äŸåããŸãã2026幎ã«ã¯ãMicrosoft FabricãDirect Lakeã¢ãŒããå°å ¥ããŠããŸããããã¯OneLakeããParquetãã¡ã€ã«ãçŽæ¥èªã¿åããã€ã³ããŒããSQLãšã³ããã€ã³ããžã®ã¯ãšãªãªãã§ãã€ã³ããŒãã¢ãŒãã®é床ãšã»ãŒãªã¢ã«ã¿ã€ã ã®é®®åºŠãäž¡ç«ãããŸãã
16. æ£ã°ã©ããšæãç·ã°ã©ãã®äœ¿ãåã
æ£ã°ã©ãã¯é¢æ£ã«ããŽãªãæ¯èŒããŸãïŒå°åå¥å£²äžã補åå¥ä»¶æ°ïŒãæãç·ã°ã©ãã¯é£ç¶çãªæé軞äžã®ãã¬ã³ãã瀺ããŸãïŒæ¥æ¬¡ã¢ã¯ãã£ããŠãŒã¶ãŒæ°ãææ¬¡è§£çŽçïŒãã«ããŽãªããŒã¿ã«æãç·ã°ã©ãã䜿çšãããšãé¢é£ã®ãªãã«ããŽãªéã«ãã¬ã³ãããããã®ããã«èŠããèŽè¡ã誀å°ããŸãã颿¥ã§ã¯ãåã°ã©ãã«ã€ããŠã®ãã©ããŒã¢ãã質åããããããŸããåã°ã©ãã¯å šäœã«å¯Ÿããéšåã瀺ãå Žåã«äœ¿çšããã¹ã©ã€ã¹ã¯5ã€ä»¥äžã«éå®ãã¹ãã§ãã人éã®ç®ã¯è§åºŠãæ£ç¢ºã«æ¯èŒããã®ãèŠæã ããã§ãã
17. é ãPower BIã¬ããŒãã®æé©åæ¹æ³
é
ãã¬ããŒãã¯éåžžãããŒã¿ã¢ãã«ã®éå°ãªã«ã©ã ãè¡ããšã«è©äŸ¡ãããè€éãªDAXã¡ãžã£ãŒãæ°çŸäžè¡ãã¯ãšãªããããžã¥ã¢ã«ã«èµ·å ããŸããæé©åã®ãã§ãã¯ãªã¹ãã«ã¯ãæªäœ¿çšã«ã©ã ã®åé€ã«ããã¢ãã«ãµã€ãºã®çž®å°ãã€ãã¬ãŒã¿é¢æ°ïŒSUMXãFILTERïŒã®å¯èœãªéãã®éã€ãã¬ãŒã¿çãžã®çœ®ãæããããŒãžãããã®ããžã¥ã¢ã«æ°ã15æªæºãžã®åæžãé«ã«ãŒãã£ããªãã£ãã£ã¡ã³ã·ã§ã³ã«å¯ŸããéèšããŒãã«ã®äœ¿çšãå«ãŸããŸããPower BI Desktopã«çµã¿èŸŒãŸããããã©ãŒãã³ã¹ã¢ãã©ã€ã¶ãŒããããã«ããã¯ãšãªã£ãŠããããžã¥ã¢ã«ãDAXã¯ãšãªãæ£ç¢ºã«ç¹å®ããŸãã
è¡å颿¥ãšã±ãŒã¹ã¹ã¿ãã£ã®è³ªå
æè¡ã¹ãã«ã¯é¢æ¥ã®æ©äŒãåŸãããã®ãã®ã§ããè¡å颿¥ã®è³ªåãããªãã¡ãŒãç²åŸã§ãããã©ãããæ±ºå®ããŸãããã¹ãŠã®åçã¯STARãã¬ãŒã ã¯ãŒã¯ïŒSituationãTaskãActionãResultïŒã«åŸãã¹ãã§ãã
18. ããŒã¿åæãããžãã¹äžã®æææ±ºå®ãå€ããçµéšã説æããŠãã ãã
匷ãåçã«ã¯ãå€åããå ·äœçãªææšã䜿çšããåæææ³ãéé¡ãŸãã¯ããŒã»ã³ããŒãžã§ã®åœ±é¿ãå«ãŸããŸãã匱ãåçã¯ãææãšçµã³ã€ããã«ããã·ã¥ããŒãã説æããã ãã§ããåçäŸã®æ§é ïŒãSaaSãããã¯ãã®è§£çŽåæã«ããã48æé以å ã«ãªã³ããŒãã£ã³ã°ãå®äºããªãã£ããŠãŒã¶ãŒã®30æ¥è§£çŽçã60%é«ãããšã倿ããŸããããããã¯ãããŒã ã24æéç®ã«ããªã¬ãŒãããèªåã¡ãŒã«ã·ãŒã±ã³ã¹ã远å ãã30æ¥è§£çŽçã8ãã€ã³ãåæžããŸãããã
19. ã¹ããŒã¯ãã«ããŒããã®çžåããããŒã¿ãªã¯ãšã¹ãã«ã©ã察åŠããŸããïŒ
ãã®è³ªåã¯ãåªå é äœä»ããšã³ãã¥ãã±ãŒã·ã§ã³èœåããã¹ãããŸããæšå¥šãããã¢ãããŒãïŒåãªã¯ãšã¹ãã®èåŸã«ããããžãã¹äžã®è³ªåãæç¢ºã«ããå ±æææšãç¹å®ããäž¡æ¹ã®ããŒãºã«å¯Ÿå¿ããåäžã®ããã·ã¥ããŒããææ¡ãããã¬ãŒããªããéæã«ææžåããŸããããŒã¿ã¬ããã³ã¹ã®æžå¿µããªãœãŒã¹ã®å¶çŽã«è£ä»ããããŠããå Žåãä»£æ¿æ¡ãæç€ºããäžã§ãã¹ããŒã¯ãã«ããŒã«ãããŒããšèšãããšã¯èš±å®¹ãããŸãã
20. æè¡ã«è©³ãããªãèŽè¡ã«è€éãªåæã説æããŠãã ãã
颿¥å®ã¯ãååž°åæãã³ããŒãåæãªã©ã®æŠå¿µãããŒã±ãã£ã³ã°ãããŒãžã£ãŒã«èª¬æããããã«æ±ããããšããããããŸããæè¯ã®åçã¯ã¢ãããžãŒã䜿ããå°éçšèªãé¿ãã説æãããžãã¹ææã«çµã³ã€ããŸãããã³ããŒãåæã¯ã顧客ãç»é²æããšã«ã°ã«ãŒãåãã3ãæåŸã«ãŸã ã¢ã¯ãã£ããªäººæ°ã远跡ããŸãããã®ãã£ãŒãã¯ã1æç»é²è ã2æç»é²è ããããªãã³ã·ã§ã³ãè¯ãããšã瀺ããŠãããããã¯12ææ«ã«å®æœããããªã³ããŒãã£ã³ã°æ¹åãšäžèŽããŠããŸããã
SituationïŒç¶æ³ãèšå®ãããTaskïŒç®æšãå®çŸ©ãããActionïŒå®æœããå ·äœçãªã¹ãããã説æãããResultïŒåœ±é¿ãå®éåããã颿¥å®ã¯ResultïŒçµæïŒã¹ããããçç¥ããææ§ãªåçã«å¯ŸããŠè©äŸ¡ãäžããŸãã
ããŒã¿ã¯ãªãŒãã³ã°ãšETLã®é¢æ¥è³ªå
ããŒã¿å質ã®åé¡ã¯ãã¢ããªã¹ãã®äœæ¥æéã®å€§éšåãæ¶è²»ããŸãããããã®è³ªåã¯ãå®åã§ã®ããŒã¿ã©ã³ã°ãªã³ã°èœåããã¹ãããŸãã
21. ETLãã€ãã©ã€ã³å®è¡åŸã®ããŒã¿æ€èšŒæ¹æ³
æ€èšŒãã§ãã¯ã¯ãè¡æ°ïŒãœãŒã¹ãšãã¹ãã£ããŒã·ã§ã³ã®æ¯èŒïŒãéèŠã«ã©ã ã®nullçãããŒãã«éã®åç §æŽåæ§ãå€ååžã®å€åïŒãµã€ã¬ã³ãã¹ããŒã倿Žã®æ€åºïŒãã«ããŒããå¿ èŠããããŸãããã€ãã©ã€ã³å®è¡åŸã«æ¯åå®è¡ãããèªåãã§ãã¯ã«ãããäžè¯ããŒã¿ãããã·ã¥ããŒãã«å°éããã®ãé²ããŸãã
# etl_validation.py
import pandas as pd
def validate_pipeline(source_df: pd.DataFrame, target_df: pd.DataFrame) -> dict:
checks = {}
# Row count match
checks['row_count_match'] = len(source_df) == len(target_df)
# Null rate on critical columns
for col in ['user_id', 'event_date', 'amount']:
null_rate = target_df[col].isnull().mean()
checks[f'{col}_null_rate'] = round(null_rate, 4)
# Revenue reconciliation
source_total = source_df['amount'].sum()
target_total = target_df['amount'].sum()
checks['revenue_diff_pct'] = round(
abs(source_total - target_total) / source_total * 100, 2
)
return checks
results = validate_pipeline(source, target)
for check, value in results.items():
print(f'{check}: {value}')ãã®é¢æ°ã¯ãã¢ã©ãŒãã·ã¹ãã ã«å ¥åã§ããæ€èšŒçµæã®èŸæžãè¿ããŸãã売äžã®å·®ç°ã0.01%ãè¶ ããå Žåã¯ã調æ»ãéå§ããå¿ èŠããããŸãã
22. æ£èŠåããŒã¿ãšéæ£èŠåããŒã¿ã®éãã¯äœã§ããïŒ
æ£èŠåããŒã¿ã¯ãé¢é£ããããŒãã«ã«æ å ±ãåå²ããããšã§åé·æ§ãæå°åããŸãïŒç¬¬3æ£èŠåœ¢ïŒã鿣èŠåããŒã¿ã¯ãèªã¿åãéèŠã®åæã¯ãšãªã«æé©åããããããåºããã©ãããªæ§é ã«ããŒãã«ãçµåããŸããOLTPã·ã¹ãã ã¯ããŒã¿ã®æŽåæ§ã®ããã«æ£èŠåã奜ã¿ãŸããããŒã¿ãŠã§ã¢ããŠã¹ãšBIããŒã«ã¯ãã¯ãšãªé床ã®ããã«éæ£èŠåïŒã¹ã¿ãŒã¹ããŒããã¹ããŒãã¬ãŒã¯ã¹ããŒãïŒã奜ã¿ãŸãããã®ãã¬ãŒããªããçè§£ããããšã¯ãå¹ççãªããŒã¿ãã€ãã©ã€ã³ã®èšèšã«äžå¯æ¬ ã§ãã
é«åºŠãªã¢ããªãã£ã¯ã¹ã®è³ªå
ã·ãã¢ããžã·ã§ã³ã§ã¯ãå®éšãäºæž¬ãçµç¹æšªæçãªããŒã¿æŠç¥ã«ç²ŸéããŠããããšãæ±ããããŸãã
23. A/Bãã¹ãããŒãããèšèšããæ¹æ³
A/Bãã¹ãã«ã¯5ã€ã®èŠçŽ ãå¿ èŠã§ãïŒæç¢ºãªä»®èª¬ïŒãCTAãã¿ã³ã®è²ãã°ã¬ãŒããç·ã«å€æŽãããšã¯ãªãã¯çã5%åäžãããïŒãäž»èŠææšïŒã¯ãªãã¯çïŒãæåŸ ããã广ãµã€ãºãšæãŸããæ€åºåïŒéåžž80%ïŒã«åºã¥ããµã³ãã«ãµã€ãºèšç®ãã³ã³ãããŒã«çŸ€ãšããªãŒãã¡ã³ã矀ãžã®ãŠãŒã¶ãŒã®ã©ã³ãã å²ãåœãŠããããŠé±æ¬¡ã®å£ç¯æ§ãèæ ®ããäºåèšå®ããããã¹ãæéã§ããå°ãªããšã2ã€ã®å®å šãªããžãã¹ãµã€ã¯ã«ã«ããã£ãŠãã¹ãã宿œããããšã§ãææ¥ãã€ã¢ã¹ã«ããçµæã®æªã¿ãé²ããŸãã
çµ±èšçæææ§ã«éããåã«çµæã確èªãããšãåœéœæ§çãèšåŒµããŸãããã¹ãéå§åã«ãåæèšç»ããµã³ãã«ãµã€ãºãæéãäºåç»é²ããŠãã ããã
24. ãã¡ãã«åæãšæãéèŠãªãããããªããã€ã³ãã®èª¬æ
ãã¡ãã«åæã¯ãäžé£ã®ã¹ãããïŒããŒã ããŒãžèšªåãååé²èЧãã«ãŒã远å ããã§ãã¯ã¢ãŠããè³Œå ¥ãªã©ïŒãéãããŠãŒã¶ãŒã®é²è¡ã远跡ããŸããæãã€ã³ãã¯ãã®ããæé©åã¯ãæå€§ã®ããŒã»ã³ããŒãžããããã§ã¯ãªããæå€§ã®çµ¶å¯Ÿæ°ãããããããã¹ããããã¿ãŒã²ããã«ããŸããååé²èЧã®1,000人ããã«ãŒã远å ã®600人ãžã®40%ã®ããããã¯400äººã®æå€±ã§ãããã§ãã¯ã¢ãŠãã®100人ããè³Œå ¥ã®50人ãžã®50%ã®ããããã¯ããã50äººã®æå€±ã§ããæåã®ããã«ããã¯ãåªå ããããšã§ãããå€ãã®ç·ã³ã³ããŒãžã§ã³ãåŸãããŸãã
25. ã¹ããŒã¯ãã«ããŒãå®éã«äœ¿çšããKPIããã·ã¥ããŒãã®æ§ç¯æ¹æ³
ããã·ã¥ããŒãã¯ãéå±€ãªãã«å€ãããææšã衚瀺ãããšå€±æããŸãã广çãªKPIããã·ã¥ããŒãã¯éãã©ãããã«åŸããŸãïŒæäžéšã«1ïœ2ã€ã®æéèŠææšïŒææ¬¡çµåžžåçããããããã¢ãŒã¿ãŒã¹ã³ã¢ãªã©ïŒãäžéã«ãµããŒãææšïŒã³ã³ããŒãžã§ã³çãè§£çŽçã平忳šæé¡ïŒãããªã«ããŠã³ã§ã¢ã¯ã»ã¹å¯èœãªèšºæè©³çްãé 眮ããŸãããããã¬ãã«ã®ãã¥ãŒã7ã€ä»¥äžã®ææšã«å¶éããããšã§ãèªç¥è² è·ã軜æžããŸããèªå泚éã®è¿œå ïŒã3æ5æ¥ã«æ±ºæžã²ãŒããŠã§ã€ã®é害ã«ãã売äžã12%äœäžãïŒã¯ãçã®æ°åã«ã¯ãªãã³ã³ããã¹ããæäŸããŸãã
ä»ããç·Žç¿ãå§ããŸãããïŒ
颿¥ã·ãã¥ã¬ãŒã¿ãŒãšæè¡ãã¹ãã§ç¥èããã¹ãããŸãããã
ãŸãšã
- SQLã®ãŠã£ã³ããŠé¢æ°ãCTEãã³ããŒãã¯ãšãªã¯ãã»ãŒãã¹ãŠã®ããŒã¿ã¢ããªã¹ãæè¡é¢æ¥ã«ç»å ŽããŸããããããèšæ¶ããæžããããšã¯åºæ¬çãªæåŸ äºé ã§ãã
- Python Pandasã®ç¿ç床ã¯ãã¢ãããã¯åæã¿ã¹ã¯ã®80%ãã«ããŒããŸãã
mergeãgroupbyãtransformãnullåŠçã«éäžããŠãã ããã - çµ±èšçæšè«ïŒpå€ãçžé¢ãšå æãå®éšèšèšïŒã¯ãæ°åãå ±åããã ãã®ã¢ããªã¹ããšæ£ããè§£éããã¢ããªã¹ããåºå¥ããŸãã
- Power BIãšå¯èŠåã®è³ªåã¯ããã£ãŒãã®éžæãDAXã®åºç€ãããã·ã¥ããŒãã®ããã©ãŒãã³ã¹æé©åããã¹ãããŸãã
- STARãã¬ãŒã ã¯ãŒã¯ã«åŸãå®éåãããçµæãå«ãè¡å颿¥ã®åçã¯ãææ§ãªèª¬æãäžåããŸãã
- SharpSkillã§ããŒã¿ã¢ããªãã£ã¯ã¹ã®é¢æ¥ã¢ãžã¥ãŒã«ãç·Žç¿ããã§ãã¿ã€ããŒä»ãæŒç¿ãšããŠãããã®æŠå¿µãèšç·Žã§ããŸãã
- é¢é£ããæºåãšããŠãããŒã¿ãµã€ãšã³ã¹é¢æ¥ã¬ã€ããã·ãã¢ããŒã¿ã¢ããªã¹ãè·ãšéãªãæ©æ¢°åŠç¿ãšçµ±èšã¢ããªã³ã°ã®è³ªåãã«ããŒããŠããŸãã
ä»ããç·Žç¿ãå§ããŸãããïŒ
颿¥ã·ãã¥ã¬ãŒã¿ãŒãšæè¡ãã¹ãã§ç¥èããã¹ãããŸãããã
ã¿ã°
å ±æ
é¢é£èšäº

Pandas 3.0ïŒ2026幎çïŒïŒæ°APIãç Žå£ç倿Žã颿¥å¯Ÿçã®å®å šã¬ã€ã
Pandas 3.0ã®Copy-on-WriteãPyArrowæååããã¯ãšã³ããpd.col()åŒãã«ããŒãªã©ã®æ°æ©èœã培åºè§£èª¬ãããŒã¿åæãšã³ãžãã¢ã®é¢æ¥ã§åããããã€ã³ããç¶²çŸ ã

2026幎ç ããŒã¿ã¢ããªã¹ãã®ããã®dbtå ¥éïŒã¢ããªã³ã°ããã¹ãã颿¥å¯Ÿç
dbtã®ãããžã§ã¯ãæ§é ããããªã¢ã©ã€ãŒãŒã·ã§ã³æŠç¥ãããŒã¿å質ãã¹ããJinjaãã¯ãããããŠ2026å¹Žã®æè¡é¢æ¥ã§ããåããã質åãç¶²çŸ çã«è§£èª¬ããŸãã

ããŒã¿ã¢ããªã¹ãã®ããã®SQLïŒãŠã£ã³ããŠé¢æ°ãCTEãé«åºŠãªã¯ãšãªææ³
SQLã®ãŠã£ã³ããŠé¢æ°ãCTEïŒå ±éããŒãã«åŒïŒãé«åºŠãªåæã¯ãšãªãã³ãŒãäŸä»ãã§è§£èª¬ãããŒã¿ã¢ããªã¹ã颿¥å¯Ÿçãšå®åã«çŽçµããå¿ é ãã¯ããã¯ã