আপনি কি ডেটা অ্যানালাইসিস নিয়ে কাজ করেন? যদি করে থাকেন, তাহলে নিশ্চয়ই DAX (Data Analysis Expressions) সম্পর্কে আপনার ভালো ধারণা আছে। Power BI, SSAS Tabular, বা Excel Power Pivot-এ ডেটা নিয়ে কাজ করার সময় COUNT এবং DISTINCTCOUNT, এই দুটি ফাংশন আমাদের প্রায়ই ব্যবহার করতে হয়। কিন্তু কখন কোনটি ব্যবহার করবেন, আর কেন করবেন—এই বিষয়টি নিয়ে অনেকেরই একটু দ্বিধা থাকে।
আজ আমরা এই দুটি ফাংশনের গভীরে যাবো, এদের পার্থক্যগুলো বুঝবো, এবং বাস্তব জীবনের উদাহরণ দিয়ে দেখবো কখন কোনটি আপনার জন্য সেরা সমাধান হতে পারে। ধরুন, আপনি বাংলাদেশের একটি সুপরিচিত ই-কমার্স কোম্পানির ডেটা অ্যানালিস্ট। আপনার হাতে হাজার হাজার কাস্টমার অর্ডার আর প্রোডাক্টের ডেটা। এখন আপনি জানতে চান মোট কতগুলো অর্ডার এসেছে, অথবা কতজন ইউনিক কাস্টমার আপনার ওয়েবসাইটে কেনাকাটা করেছেন। এই ধরণের প্রশ্নের উত্তর দিতেই COUNT এবং DISTINCTCOUNT ফাংশনগুলো দারুণভাবে কাজে আসে। চলুন, আর দেরি না করে মূল আলোচনায় প্রবেশ করি!
DAX COUNT এবং DISTINCTCOUNT: একটি সহজবোধ্য আলোচনা
DAX (Data Analysis Expressions) হলো একটি ফর্মুলা ল্যাঙ্গুয়েজ যা Microsoft Power BI, Power Pivot in Excel, এবং SQL Server Analysis Services (SSAS) Tabular models-এ ডেটা মডেলিং এবং ডেটা অ্যানালাইসিসের জন্য ব্যবহৃত হয়। DAX-এর মাধ্যমে আমরা ডেটা থেকে নতুন তথ্য বের করতে পারি, যা সরাসরি ডেটাসেটে নাও থাকতে পারে। যেমন, মোট বিক্রয়, মাসিক গড় বিক্রয়, বা ইউনিক কাস্টমারের সংখ্যা।
COUNT ফাংশন কী এবং কখন ব্যবহার করবেন?
COUNT ফাংশন একটি কলামে থাকা মোট নন-ব্ল্যাঙ্ক (non-blank) সেলের সংখ্যা গণনা করে। সহজভাবে বললে, যদি আপনার একটি কলামে ১০টি ডেটা থাকে এবং এর মধ্যে একটিও খালি না থাকে, তাহলে COUNT ফাংশন আপনাকে ১০ দেবে। এটি প্রতিটি এন্ট্রিকে আলাদাভাবে গণনা করে, এমনকি যদি একই ভ্যালু একাধিকবার থাকে।
উদাহরণ:
ধরুন, আপনার কাছে একটি Orders
টেবিল আছে যেখানে OrderID
কলামে প্রতিটি অর্ডারের আইডি দেওয়া আছে। এখন আপনি জানতে চান মোট কতগুলো অর্ডার আপনার কোম্পানিতে এসেছে। এক্ষেত্রে আপনি COUNT ফাংশন ব্যবহার করবেন।
Total Orders = COUNT(Orders[OrderID])
যদি আপনার Orders
টেবিলে OrderID
কলামে ১০০টি এন্ট্রি থাকে, তাহলে Total Orders
আপনাকে ১০০ দেখাবে, যতবারই একই অর্ডার আইডি থাকুক না কেন (যদিও OrderID সাধারণত ইউনিক হয়, বোঝার সুবিধার জন্য উদাহরণটি দেওয়া হলো)।
কখন ব্যবহার করবেন:
- মোট এন্ট্রির সংখ্যা জানতে: যখন আপনি একটি কলামে মোট কতগুলো ডেটা এন্ট্রি আছে তা জানতে চান, যেমন – মোট লেনদেন, মোট পণ্য, মোট শাখা।
- নন-ব্ল্যাঙ্ক সেলের সংখ্যা: যখন আপনি কোনো কলামে খালি নয় এমন সেলের সংখ্যা জানতে চান।
- সাধারণ গণনা: যখন আপনি প্রতিটি ঘটনাকে আলাদাভাবে গণনা করতে চান, পুনরাবৃত্তি সহ।
DISTINCTCOUNT ফাংশন কী এবং কখন ব্যবহার করবেন?
DISTINCTCOUNT ফাংশন একটি কলামে থাকা মোট ইউনিক (unique) বা স্বতন্ত্র ভ্যালুর সংখ্যা গণনা করে। এটি একই ভ্যালু যদি একাধিকবার থাকে, তাহলে সেটিকে একবারই গণনা করে। এটি ডেটার মধ্যে কতটা বৈচিত্র্য আছে তা বুঝতে সাহায্য করে।
উদাহরণ:
ধরুন, আপনার Orders
টেবিলে CustomerID
কলামে কাস্টমার আইডি দেওয়া আছে। আপনার কোম্পানিতে ১০০টি অর্ডার এসেছে, কিন্তু এই অর্ডারগুলো হয়তো ৮০ জন ভিন্ন কাস্টমার দিয়েছেন (অর্থাৎ, কিছু কাস্টমার একাধিকবার অর্ডার করেছেন)। এখন আপনি জানতে চান মোট কতজন ইউনিক কাস্টমার আপনার পণ্য কিনেছেন। এক্ষেত্রে আপনি DISTINCTCOUNT ফাংশন ব্যবহার করবেন।
Unique Customers = DISTINCTCOUNT(Orders[CustomerID])
যদি আপনার Orders
টেবিলে CustomerID
কলামে ১০০টি এন্ট্রি থাকে, কিন্তু এর মধ্যে ৮০টি ভিন্ন কাস্টমার আইডি থাকে, তাহলে Unique Customers
আপনাকে ৮০ দেখাবে।
কখন ব্যবহার করবেন:
- ইউনিক এন্ট্রির সংখ্যা জানতে: যখন আপনি একটি কলামে মোট কতগুলো ভিন্ন বা স্বতন্ত্র ডেটা এন্ট্রি আছে তা জানতে চান, যেমন – মোট ইউনিক কাস্টমার, মোট ইউনিক পণ্য, মোট ইউনিক বিক্রেতা।
- ডেটার বৈচিত্র্য পরিমাপ করতে: যখন আপনি ডেটাসেটে কত ধরণের ভিন্ন ভ্যালু আছে তা বুঝতে চান।
- ডুপ্লিকেট বাদ দিয়ে গণনা: যখন আপনি ডুপ্লিকেট এন্ট্রিগুলোকে বাদ দিয়ে শুধু স্বতন্ত্র এন্ট্রিগুলো গণনা করতে চান।
COUNT বনাম DISTINCTCOUNT: মূল পার্থক্য একটি সারণীতে
চলুন, একটি সারণীর মাধ্যমে COUNT এবং DISTINCTCOUNT ফাংশনগুলির মূল পার্থক্যগুলো দেখে নিই:
বৈশিষ্ট্য | COUNT ফাংশন | DISTINCTCOUNT ফাংশন |
---|---|---|
গণনার পদ্ধতি | নন-ব্ল্যাঙ্ক সেলের মোট সংখ্যা গণনা করে। | ইউনিক বা স্বতন্ত্র ভ্যালুর সংখ্যা গণনা করে। |
ডুপ্লিকেট ভ্যালু | ডুপ্লিকেট ভ্যালুগুলোকেও আলাদাভাবে গণনা করে। | ডুপ্লিকেট ভ্যালুগুলোকে একবারই গণনা করে। |
ব্যবহারের ক্ষেত্র | মোট ঘটনা, মোট এন্ট্রি, মোট লেনদেন। | মোট ইউনিক ঘটনা, মোট স্বতন্ত্র কাস্টমার/পণ্য। |
উদাহরণ | মোট অর্ডার, মোট পণ্য বিক্রি। | মোট ইউনিক কাস্টমার, মোট ইউনিক পণ্য। |
পারফরম্যান্স | সাধারণত দ্রুত কাজ করে। | ডেটাসেটের আকার এবং কার্ডিনালিটির উপর নির্ভর করে ধীর হতে পারে। |
কখন কোনটি ব্যবহার করবেন: বাস্তব জীবনের উদাহরণ
আমরা বাংলাদেশের প্রেক্ষাপটে কিছু বাস্তব উদাহরণ দিয়ে বিষয়টি আরও স্পষ্ট করি।
উদাহরণ ১: একটি কুরিয়ার সার্ভিস কোম্পানি
একটি কুরিয়ার সার্ভিস কোম্পানির কাছে প্রতিদিনের ডেলিভারির ডেটা আছে। তাদের Deliveries
টেবিল আছে, যেখানে DeliveryID
, CustomerID
, Area
কলামগুলো আছে।
- প্রশ্ন: মোট কতগুলো ডেলিভারি সম্পন্ন হয়েছে?
- সমাধান: এখানে আপনি মোট ডেলিভারির সংখ্যা জানতে চান, প্রতিটি ডেলিভারি আলাদাভাবে গণনা করতে হবে।
Total Deliveries = COUNT(Deliveries[DeliveryID])
- প্রশ্ন: কতজন ভিন্ন কাস্টমারের কাছে ডেলিভারি পৌঁছেছে?
- সমাধান: এখানে আপনি ইউনিক কাস্টমার সংখ্যা জানতে চান, একই কাস্টমার একাধিকবার ডেলিভারি নিলেও তাকে একবারই গণনা করতে হবে।
Unique Customers Delivered To = DISTINCTCOUNT(Deliveries[CustomerID])
- প্রশ্ন: Dhaka শহরে মোট কতগুলো ডেলিভারি হয়েছে?
- সমাধান: এখানে আপনি একটি নির্দিষ্ট এলাকার মোট ডেলিভারি জানতে চান।
Dhaka Deliveries = CALCULATE(COUNT(Deliveries[DeliveryID]), Deliveries[Area] = "Dhaka")
- প্রশ্ন: কতটি ভিন্ন এলাকায় ডেলিভারি করা হয়েছে?
- সমাধান: এখানে আপনি কতটি ইউনিক এলাকায় ডেলিভারি হয়েছে তা জানতে চান।
Unique Delivery Areas = DISTINCTCOUNT(Deliveries[Area])
উদাহরণ ২: একটি পোশাকের দোকান (যেমন: আড়ং)
আপনার একটি পোশাকের দোকানের বিক্রয় ডেটা আছে। আপনার Sales
টেবিলে SaleID
, ProductID
, CustomerID
কলামগুলো আছে।
- প্রশ্ন: মোট কতগুলো পণ্য বিক্রি হয়েছে?
- সমাধান: এখানে প্রতিটি বিক্রি হওয়া পণ্য আলাদাভাবে গণনা করতে হবে।
Total Products Sold = COUNT(Sales[ProductID])
- প্রশ্ন: কত ধরণের ভিন্ন পণ্য (যেমন: শাড়ি, পাঞ্জাবি, সালোয়ার-কামিজ) বিক্রি হয়েছে?
- সমা সমাধান: এখানে আপনি ইউনিক পণ্যের প্রকার জানতে চান।
Unique Product Types Sold = DISTINCTCOUNT(Sales[ProductID])
(এখানে
ProductID
যদি পণ্যের প্রকার নির্দেশ করে, তবে এটি প্রযোজ্য) - প্রশ্ন: কতজন ইউনিক কাস্টমার এই মাসে কেনাকাটা করেছেন?
- সমাধান: এখানে আপনি ইউনিক কাস্টমারের সংখ্যা জানতে চান।
Monthly Unique Customers = DISTINCTCOUNT(Sales[CustomerID])
পারফরম্যান্স বিবেচনা
সাধারণত COUNT
ফাংশন DISTINCTCOUNT
ফাংশনের চেয়ে দ্রুত কাজ করে। এর কারণ হলো COUNT
ফাংশনকে শুধু নন-ব্ল্যাঙ্ক সেলগুলো গুনতে হয়, যেখানে DISTINCTCOUNT
ফাংশনকে প্রতিটি ভ্যালুকে তুলনা করে দেখতে হয় যে সেটি আগে গণনা করা হয়েছে কিনা। ডেটাসেটে যদি অনেক বেশি ডেটা থাকে এবং কলামে অনেক বেশি ইউনিক ভ্যালু থাকে (উচ্চ কার্ডিনালিটি), তাহলে DISTINCTCOUNT
ফাংশনটি গণনা করতে বেশি সময় নিতে পারে। তাই, পারফরম্যান্সের দিকে খেয়াল রেখে সঠিক ফাংশনটি বেছে নেওয়া গুরুত্বপূর্ণ।
প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী (FAQ)
প্রশ্ন ১: COUNTROWS ফাংশনের সাথে COUNT ফাংশনের পার্থক্য কী?
উত্তর: COUNT
ফাংশন একটি নির্দিষ্ট কলামের নন-ব্ল্যাঙ্ক সেলের সংখ্যা গণনা করে। অন্যদিকে, COUNTROWS
ফাংশন একটি টেবিলের মোট রো (row) সংখ্যা গণনা করে, যেখানে কলামের কোনো নির্দিষ্টতা থাকে না। যদি আপনার টেবিলে কোনো কলামে ব্ল্যাঙ্ক সেল থাকে, তাহলে COUNT
সেই ব্ল্যাঙ্ক সেলগুলো বাদ দেবে, কিন্তু COUNTROWS
পুরো রো-টিকেই গণনা করবে।
উদাহরণ:
যদি আপনার Orders
টেবিলে ৫টি রো থাকে, তাহলে COUNTROWS(Orders)
আপনাকে ৫ দেবে। কিন্তু যদি Orders[CustomerID]
কলামে একটি ব্ল্যাঙ্ক সেল থাকে, তাহলে COUNT(Orders[CustomerID])
আপনাকে ৪ দেবে।
প্রশ্ন ২: DISTINCTCOUNTBLANK কী?
উত্তর: DISTINCTCOUNTBLANK
DAX-এ সরাসরি কোনো ফাংশন নয়। তবে, আপনি DISTINCTCOUNT
ব্যবহার করে একটি কলামে ইউনিক ভ্যালুগুলো গণনা করতে পারেন এবং ব্ল্যাঙ্ক ভ্যালুগুলো বাদ দিতে পারেন। যদি আপনি ব্ল্যাঙ্ক ভ্যালুসহ ইউনিক ভ্যালু গণনা করতে চান, তাহলে DISTINCTCOUNT
ফাংশনটি ব্ল্যাঙ্ক ভ্যালুটিকে একটি ইউনিক ভ্যালু হিসেবে গণনা করে।
প্রশ্ন ৩: COUNT এবং DISTINCTCOUNT কি শুধু সংখ্যাসূচক ডেটার জন্য কাজ করে?
উত্তর: না, COUNT
এবং DISTINCTCOUNT
ফাংশনগুলো শুধুমাত্র সংখ্যাসূচক ডেটার জন্য নয়, বরং টেক্সট, তারিখ, এবং বুলিয়ান (Boolean) ডেটার জন্যও কাজ করে। COUNT
ফাংশন যেকোনো নন-ব্ল্যাঙ্ক ভ্যালু গণনা করবে এবং DISTINCTCOUNT
যেকোনো ইউনিক নন-ব্ল্যাঙ্ক ভ্যালু গণনা করবে।
প্রশ্ন ৪: যদি একটি কলামে কোনো ডেটা না থাকে (পুরো কলাম ব্ল্যাঙ্ক হয়), তাহলে COUNT এবং DISTINCTCOUNT কী রিটার্ন করবে?
উত্তর: যদি একটি কলামে কোনো ডেটা না থাকে (অর্থাৎ, পুরো কলামটিই ব্ল্যাঙ্ক হয়), তাহলে COUNT
এবং DISTINCTCOUNT
উভয় ফাংশনই 0
(শূন্য) রিটার্ন করবে। কারণ, তারা কোনো নন-ব্ল্যাঙ্ক বা ইউনিক ভ্যালু খুঁজে পাবে না।
প্রশ্ন ৫: CALCULATE ফাংশনের সাথে COUNT এবং DISTINCTCOUNT কিভাবে ব্যবহার করা যায়?
উত্তর: CALCULATE
ফাংশন DAX-এর সবচেয়ে শক্তিশালী ফাংশনগুলোর মধ্যে একটি, যা ফিল্টার কন্টেন্ট পরিবর্তন করতে ব্যবহৃত হয়। আপনি CALCULATE
ফাংশনের মধ্যে COUNT
এবং DISTINCTCOUNT
ব্যবহার করে নির্দিষ্ট শর্তের উপর ভিত্তি করে গণনা করতে পারেন।
উদাহরণ:
- শুধুমাত্র Dhaka থেকে আসা অর্ডারের সংখ্যা:
Orders from Dhaka = CALCULATE(COUNT(Orders[OrderID]), Orders[City] = "Dhaka")
- শুধুমাত্র পুরুষ কাস্টমারদের মধ্যে ইউনিক কাস্টমারের সংখ্যা:
Unique Male Customers = CALCULATE(DISTINCTCOUNT(Customers[CustomerID]), Customers[Gender] = "Male")
মূল বিষয়গুলো (Key Takeaways)
COUNT
ফাংশন একটি কলামে মোট নন-ব্ল্যাঙ্ক সেলের সংখ্যা গণনা করে, যেখানে ডুপ্লিকেট ভ্যালুগুলোকেও আলাদাভাবে ধরা হয়।DISTINCTCOUNT
ফাংশন একটি কলামে মোট ইউনিক বা স্বতন্ত্র ভ্যালুর সংখ্যা গণনা করে, যেখানে ডুপ্লিকেট ভ্যালুগুলোকে একবারই গণনা করা হয়।- মোট এন্ট্রি বা ঘটনার সংখ্যা জানতে
COUNT
ব্যবহার করুন। - ইউনিক এন্ট্রি বা স্বতন্ত্র ঘটনার সংখ্যা জানতে
DISTINCTCOUNT
ব্যবহার করুন। DISTINCTCOUNT
ফাংশনCOUNT
ফাংশনের চেয়ে পারফরম্যান্সের দিক থেকে ধীর হতে পারে, বিশেষ করে যখন ডেটাসেট বড় হয় এবং কার্ডিনালিটি বেশি থাকে।CALCULATE
ফাংশনের সাথে এই দুটি ফাংশন ব্যবহার করে নির্দিষ্ট ফিল্টারের উপর ভিত্তি করে গণনা করা সম্ভব।- ডেটা অ্যানালাইসিসে সঠিক ফাংশনটি বেছে নেওয়া আপনার অ্যানালাইসিসের নির্ভুলতা এবং পারফরম্যান্সের জন্য অত্যন্ত গুরুত্বপূর্ণ।
আশা করি, এই বিস্তারিত আলোচনা আপনার COUNT এবং DISTINCTCOUNT ফাংশন সম্পর্কে ধারণা পরিষ্কার করতে সাহায্য করবে। এখন আপনি আপনার ডেটা অ্যানালাইসিসে আরও আত্মবিশ্বাসের সাথে এই ফাংশনগুলি ব্যবহার করতে পারবেন। ডেটা-ভিত্তিক সিদ্ধান্ত নেওয়ার এই যাত্রায় আপনার সাফল্য কামনা করি! আপনার যদি আরও কোনো প্রশ্ন থাকে, তাহলে কমেন্ট করে জানাতে ভুলবেন না।